UNPKG

@sinch/mcp

Version:

Sinch MCP server

78 lines 4.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.sendTemplateMessageHandler = exports.registerSendTemplateMessage = void 0; const zod_1 = require("zod"); const types_1 = require("../../types"); const utils_1 = require("../../utils"); const conversation_service_helper_1 = require("./utils/conversation-service-helper"); const conversation_tools_helper_1 = require("./utils/conversation-tools-helper"); const send_message_builder_1 = require("./utils/send-message-builder"); const prompt_schemas_1 = require("./prompt-schemas"); const TOOL_KEY = 'sendTemplateMessage'; const TOOL_NAME = (0, conversation_tools_helper_1.getToolName)(TOOL_KEY); const registerSendTemplateMessage = (server, tags) => { if (!(0, conversation_tools_helper_1.shouldRegisterTool)(TOOL_KEY, tags)) return; server.tool(TOOL_NAME, 'Send a template message to a contact on the specified channel. The contact can be a phone number in E.164 format, or the identifier for the specified channel.', { recipient: prompt_schemas_1.Recipient, templateId: zod_1.z.string() .describe('The ID (ULID format) of the omni-template template to use for sending the message.'), language: zod_1.z.string().optional() .describe('The language to use for the omni-template (BCP-47). If not set, the default language code will be used.'), parameters: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional() .describe('The parameters to use for the template. This is a key-value map where the key is the parameter name and the value is the parameter value. Look carefully in the prompt to find which parameters are expected by the template.'), channel: prompt_schemas_1.ConversationChannel, appId: prompt_schemas_1.ConversationAppIdOverride, sender: prompt_schemas_1.MessageSenderNumberOverride, region: prompt_schemas_1.ConversationRegionOverride }, exports.sendTemplateMessageHandler); }; exports.registerSendTemplateMessage = registerSendTemplateMessage; const sendTemplateMessageHandler = async ({ recipient, channel, templateId, language, parameters, appId, sender, region }) => { const maybeAppId = (0, conversation_service_helper_1.getConversationAppId)(appId); if ((0, utils_1.isPromptResponse)(maybeAppId)) { return maybeAppId.promptResponse; } const conversationAppId = maybeAppId; const maybeClient = (0, conversation_service_helper_1.getConversationClient)(TOOL_NAME); if ((0, utils_1.isPromptResponse)(maybeClient)) { return maybeClient.promptResponse; } const sinchClient = maybeClient; const usedRegion = (0, conversation_service_helper_1.setConversationRegion)(region, sinchClient); const requestBase = await (0, send_message_builder_1.buildMessageBase)(sinchClient, conversationAppId, recipient, channel, sender); const omniChannelMessage = { omni_template: { template_id: templateId, version: 'latest', parameters: { ...parameters } } }; if (language) { omniChannelMessage.omni_template.language_code = language; } const request = { sendMessageRequestBody: { ...requestBase, message: { template_message: { ...omniChannelMessage } } } }; let response; let reply; try { response = await sinchClient.conversation.messages.sendTemplateMessage(request); reply = `Template message submitted on channel ${channel}! The message ID is ${response.message_id}`; } catch (error) { reply = `An error occurred when trying to send the template message: ${JSON.stringify(error)}. Are you sure you are using the right region to send your message? The current region is ${usedRegion}.`; } return new types_1.PromptResponse(reply).promptResponse; }; exports.sendTemplateMessageHandler = sendTemplateMessageHandler; //# sourceMappingURL=send-template-message.js.map