Twilio Flex Actions框架WrapupTask相关事件不触发问题咨询
问题描述
- 运行环境:最新版Twilio Flex,采用
--flexui2模式部署Twilio Flex插件,插件版本为@twilio-labs/plugin-flex 5.1.2 - 故障现象:参考Actions Framework官方示例开发时,始终无法捕获
WrapupTask或beforeWrapupTask事件,照搬官方示例代码、使用动作替换方案均无法生效;动作替换方案还会导致afterAcceptTask等其他事件触发异常。目前仅beforeCompleteTask事件可正常监听,但业务场景必须依赖beforeWrapupTask事件。 - 已尝试的代码:
- 监听
beforeWrapupTask事件
Actions.addListener("beforeWrapupTask", (payload) => { console.log(`***Task Channel Unique Name: ${payload.task.taskChannelUniqueName}`); alert("Fired - beforeWrapupTask") })- 监听
WrapupTask事件
Actions.addListener("WrapupTask", (payload) => { console.log(`***Task Channel Unique Name: ${payload.task.taskChannelUniqueName}`); alert("Fired - WrapupTask") })- 替换
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
相关产品推荐
相关产品推荐

