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

Twilio Flex Actions框架WrapupTask相关事件不触发问题咨询

问题描述
  • 运行环境:最新版Twilio Flex,采用--flexui2模式部署Twilio Flex插件,插件版本为@twilio-labs/plugin-flex 5.1.2
  • 故障现象:参考Actions Framework官方示例开发时,始终无法捕获WrapupTask或beforeWrapupTask事件,照搬官方示例代码、使用动作替换方案均无法生效;动作替换方案还会导致afterAcceptTask等其他事件触发异常。目前仅beforeCompleteTask事件可正常监听,但业务场景必须依赖beforeWrapupTask事件。
  • 已尝试的代码:
    1. 监听beforeWrapupTask事件
    Actions.addListener("beforeWrapupTask", (payload) => {
       console.log(`***Task Channel Unique Name: ${payload.task.taskChannelUniqueName}`);
       alert("Fired - beforeWrapupTask")
    })
    
    1. 监听WrapupTask事件
    Actions.addListener("WrapupTask", (payload) => {
       console.log(`***Task Channel Unique Name: ${payload.task.taskChannelUniqueName}`);
       alert("Fired - WrapupTask")
    })
    
    1. 替换WrapupTask动作
    flex.Actions.replaceAction("WrapupTask", (payload, original) => {
        return new Promise(function(resolve, reject) {
          // Send the message:
          console.log('***** THIS EVENT FIRED!!!! *****')
          }).then(response => {
            // Wait until the message is sent to wrap-up the task:
            resolve(original(payload));
        });
      });
    
问题根因

Flex UI 2版本默认启用了新版任务完成交互流程,旧版的WrapupTask动作在默认配置下不会被触发,官方在版本迭代中调整了任务进入Wrapup阶段的动作链路,旧文档示例未同步更新,因此照搬旧版示例代码无法监听到对应事件。
另外你写的replaceAction代码存在逻辑问题:Promise内部没有调用resolve(),导致动作链路一直处于pending状态,阻塞了后续其他动作的触发,才会导致afterAcceptTask等事件异常。

解决方案

根据业务需求二选一即可:

  • 方案1:切回旧版任务流程,直接复用原有代码
    在插件初始化配置中关闭新版任务完成开关,即可恢复WrapupTask、beforeWrapupTask事件的触发:
    flex.init(flexConfig, {
      features: {
        enableNewTaskCompletion: false
      }
    });
    
    配置生效后原有监听代码不需要修改即可正常运行。
  • 方案2:保留新版任务流程,监听新版对应动作
    新版流程中替代WrapupTask的动作是SetTaskWrapupAttribute,对应的前置/后置事件为beforeSetTaskWrapupAttribute、afterSetTaskWrapupAttribute,payload结构和旧版WrapupTask一致,可以直接获取task对象实现业务逻辑:
    // 等价于原beforeWrapupTask事件
    flex.Actions.addListener("beforeSetTaskWrapupAttribute", (payload) => {
      console.log(`***Task Channel Unique Name: ${payload.task.taskChannelUniqueName}`);
      // 自定义业务逻辑写在这里
    })
    

如果需要使用动作替换能力,正确的写法参考如下,避免链路阻塞:

flex.Actions.replaceAction("WrapupTask", async (payload, original) => {
  console.log('Wrapup action intercepted')
  // 先执行自定义前置逻辑
  await yourCustomLogic()
  // 自定义逻辑执行完成后再调用原动作
  return original(payload)
});

内容的提问来源于stack exchange,提问作者Alan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:27:19