You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按执行顺序获取Twilio Studio Flow中的所有双向短信消息

如何按执行顺序获取Twilio Studio Flow中的所有双向短信消息

嗨,我来帮你搞定这个按顺序收集短信的问题!你现在遇到的widgets对象顺序不对的情况很常见——因为Twilio Studio里的widgets集合是按widget的标识来组织的,并不是实际执行的先后顺序。下面给你两个靠谱的解决方案,你可以根据自己的场景选择:

方案一:通过Twilio API获取执行步骤序列(推荐复杂Flow使用)

这个方法的核心是利用Twilio Studio的Execution Steps API,它会返回整个Flow执行过程中所有步骤的时间顺序列表,完全符合你的需求。

步骤:

  1. 在Studio Flow里传递必要参数:
    调用你的Twilio Function时,别再传widgets对象了,改成传递{{flow.executionSid}}和{{flow.sid}}这两个内置变量(这俩分别是当前Flow执行的ID和Flow本身的ID)。

  2. 在Twilio Function里获取并处理步骤:
    用Twilio Client调用API拿到执行步骤,筛选出短信相关的步骤,整理成有序的消息列表,再发给你的系统API。

    示例代码如下:

    exports.handler = function(context, event, callback) {
      const twilioClient = context.getTwilioClient();
      const { executionSid, flowSid } = event;
    
      // 获取当前Flow执行的所有步骤(按执行顺序排列)
      twilioClient.studio.v2.flows(flowSid)
        .executions(executionSid)
        .steps.list({ limit: 200 }) // 根据对话长度调整上限
        .then(steps => {
          // 筛选出发送/接收短信的步骤
          const messageSteps = steps.filter(step => 
            step.type === 'send-message' || step.type === 'wait-for-message'
          );
    
          // 整理成需要的JSON格式
          const conversationHistory = messageSteps.map(step => {
            let msg = { timestamp: step.dateCreated };
            if (step.type === 'send-message') {
              // 替换成你实际的发送消息widget名称,比如send_message_2
              msg.direction = 'outbound';
              msg.body = step.context['send_message_1'].body;
            } else if (step.type === 'wait-for-message') {
              msg.direction = 'inbound';
              msg.body = step.context.inboundMessage.Body;
            }
            return msg;
          });
    
          // 发送到你的系统API
          fetch('你的系统REST API地址', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({ conversation: conversationHistory })
          })
          .then(res => res.json())
          .then(apiRes => {
            console.log('对话历史已成功发送', apiRes);
            callback(null, { status: 'success' });
          })
          .catch(apiErr => {
            console.error('发送到系统API失败', apiErr);
            callback(apiErr);
          });
        })
        .catch(err => {
          console.error('获取执行步骤失败', err);
          callback(err);
        });
    };
    

方案二:在Flow中实时维护有序消息数组(适合简单Flow)

如果不想额外调用Twilio API,可以在Flow里的每个短信操作后,把消息信息追加到一个数组变量里,最后直接把这个有序数组传给Function。

步骤:

  1. 初始化数组变量:
    在Flow的起始位置,添加一个「Set Variables」widget,设置变量flow.conversationHistory的初始值为[](空数组)。

  2. 发送消息后追加记录:
    每用「Send Message」widget发完短信,就添加一个「Set Variables」widget,用如下表达式把消息信息追加到数组:

    {{flow.conversationHistory}} + [{"direction": "outbound", "body": "{{widgets.你的发送widget名称.body}}", "timestamp": "{{widgets.你的发送widget名称.dateCreated}}"}]
    

    把你的发送widget名称替换成实际的widget标识(比如send_message_1)。

  3. 接收消息后追加记录:
    当「Wait for Message」widget收到用户短信后,同样添加「Set Variables」widget,用如下表达式追加:

    {{flow.conversationHistory}} + [{"direction": "inbound", "body": "{{widgets.你的接收widget名称.inboundMessage.Body}}", "timestamp": "{{widgets.你的接收widget名称.dateCreated}}"}]
    
  4. 传递数组给Function:
    最后调用你的Twilio Function时,传递{{flow.conversationHistory}}这个变量,Function里直接拿到的就是按执行顺序排列的消息数组,直接处理发给你的系统即可。


备注:内容来源于stack exchange,提问作者Mohammad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 09:22:59