如何在Twilio Function执行后从内部重定向到Studio Flow
需求可行性结论
该需求完全可以实现。你现有代码无法达成跳转效果的核心原因是:Twilio WhatsApp消息的Webhook触发逻辑只识别标准TwiML格式的响应,直接返回普通JSON对象不会触发流程跳转,会话会在函数执行完成后直接终止。
实现逻辑说明
Twilio消息类Webhook的流转控制依赖TwiML指令,你只需要在函数中构造带<Redirect>标签的TwiML响应,把提取到的经纬度作为Query参数拼接到目标Studio Flow的Webhook地址上,Twilio收到响应后就会自动把当前会话的控制权移交到Studio Flow,同时携带你传入的位置参数,后续在Flow里完成处理后转Flex坐席即可。
具体操作步骤
- 获取目标Studio Flow的Webhook地址
打开Twilio控制台进入对应Studio Flow的编辑页,在触发器配置面板复制Flow的官方Webhook URL,格式为https://webhooks.twilio.com/v1/Accounts/<你的Account SID>/Flows/<你的Flow SID>,提前保存备用。
- 获取目标Studio Flow的Webhook地址
- 修改Serverless函数代码
替换原有返回普通JSON的逻辑,构造TwiML响应实现跳转,参考代码如下:
- 修改Serverless函数代码
exports.handler = function(context, event, callback) { console.log("收到位置纬度: ", event.Latitude); console.log("收到位置经度: ", event.Longitude); // 初始化消息TwiML响应实例 const twiml = new Twilio.twiml.MessagingResponse(); // 替换为你上一步复制的Studio Flow Webhook地址 const STUDIO_ENDPOINT = "替换为你的Studio Flow Webhook地址"; let redirectUrl; if (!event.Latitude || !event.Longitude) { // 未收到位置信息的场景可按需调整,比如先返回提示语要求用户发送位置 // twiml.message("请发送你的当前位置,以便为你转接对应坐席"); redirectUrl = `${STUDIO_ENDPOINT}?lat=null&lon=null`; } else { // 拼接经纬度参数到跳转地址,做转义避免特殊字符导致URL解析失败 redirectUrl = `${STUDIO_ENDPOINT}?lat=${encodeURIComponent(event.Latitude)}&lon=${encodeURIComponent(event.Longitude)}`; } // 添加跳转指令 twiml.redirect(redirectUrl); // 返回TwiML响应给Twilio callback(null, twiml); };
- Studio Flow侧参数读取配置
会话跳转到Studio Flow后,你可以在Flow的任意组件中通过{{trigger.message.lat}}、{{trigger.message.lon}}直接读取到传入的经纬度值,后续做位置业务处理、存储后,直接调用「Send to Flex」组件即可把会话连同上下文一起转接给在线坐席。
- Studio Flow侧参数读取配置
注意事项
- 不要把WhatsApp Sandbox的回调地址直接绑定到Studio Flow,必须绑定到你部署的Serverless函数地址,否则位置提取的逻辑不会执行。
- 如果你已经完成Studio Flow和Twilio Proxy、Flex的集成,跳转后会话上下文(包括用户历史消息、位置参数)会自动同步到坐席端,不需要额外做适配。
- Twilio官方Serverless运行环境默认预装Twilio SDK,不需要额外安装依赖;如果是自建Serverless部署环境,需要手动安装
twilionpm包保证TwiML构造方法可正常调用。
内容的提问来源于stack exchange,提问作者rafadev
相关产品推荐
相关产品推荐

