基于Webhook实现SAP CAI与Twilio对接的最新方案求助
基于Webhook实现SAP CAI与Twilio消息收发的可行方案
问题根源
旧代码失效是因为SAP CAI更新了API规范,原有的sapcai npm包已不再适配新接口,对接流程的凭证要求、API端点也同步发生了变更。
实现步骤与代码示例
1. 准备必要凭证
- SAP CAI侧:获取Bot ID、版本ID(如
production)、API Key(从SAP CAI控制台「Settings > API Keys」路径获取) - Twilio侧:获取Account SID、Auth Token,将消息Webhook配置指向你的服务地址(如Twilio Functions的部署URL)
2. 适配新API的Twilio Functions代码
替换旧代码为以下实现,直接调用SAP CAI v2对话API:
exports.handler = async function(context, event, callback) { const twiml = new Twilio.twiml.MessagingResponse(); const axios = require('axios'); // SAP CAI 配置(从Twilio Functions环境变量读取,避免硬编码) const SAP_CAI_BOT_ID = context.SAP_CAI_BOT_ID; const SAP_CAI_API_KEY = context.SAP_CAI_API_KEY; const SAP_CAI_VERSION = 'production'; const SAP_CAI_ENDPOINT = `https://api.cai.sap.com/v2/dialog/${SAP_CAI_BOT_ID}/${SAP_CAI_VERSION}/talk`; try { // 调用SAP CAI对话API const caiResponse = await axios.post(SAP_CAI_ENDPOINT, { message: { type: 'text', content: event.Body // Twilio传来的用户消息内容 }, conversation_id: event.From // 用用户手机号作为对话ID,维持会话上下文 }, { headers: { 'Authorization': `Bearer ${SAP_CAI_API_KEY}`, 'Content-Type': 'application/json' } }); // 提取SAP CAI的回复内容 const caiReply = caiResponse.data.results.replies[0].content; twiml.message(caiReply); callback(null, twiml); } catch (error) { console.error('SAP CAI调用失败:', error.response?.data || error.message); twiml.message('抱歉,暂时无法回复,请稍后再试。'); callback(null, twiml); } };
3. Postman测试示例
测试Twilio Webhook接收(模拟Twilio发送用户消息)
- 请求方法:
POST - 请求URL:你的Webhook服务地址
- 请求头:
Content-Type: application/x-www-form-urlencoded - 请求体(form-data格式):
Body:你好,查询我的订单状态(用户消息内容)From:+1234567890(模拟用户手机号,作为会话ID)To:+0987654321(你的Twilio手机号)
发送请求后,响应会返回Twiml格式的消息内容,即SAP CAI生成的回复。
测试SAP CAI API调用(单独验证接口有效性)
- 请求方法:
POST - 请求URL:
https://api.cai.sap.com/v2/dialog/{你的Bot ID}/{版本ID}/talk - 请求头:
Authorization: Bearer {你的SAP CAI API Key}Content-Type: application/json
- 请求体(JSON格式):
{ "message": { "type": "text", "content": "你好,查询我的订单状态" }, "conversation_id": "+1234567890" }
响应中results.replies数组会包含SAP CAI的回复内容,验证此步骤正常后再对接Twilio即可。
关键注意事项
- 确保SAP CAI的API Key拥有对话API的调用权限
- 对话ID需保持唯一且稳定,建议使用用户手机号或Twilio会话ID,以维持会话上下文
- 必须处理API调用异常,避免Twilio返回错误提示给终端用户
内容的提问来源于stack exchange,提问作者Prócer
相关产品推荐
相关产品推荐

