如何通过Worker属性配置启用Twilio Flex自动应答插件
自动应答功能实现问题修正
你当前的核心逻辑方向是正确的,只需要补充边界判断和修正语法问题即可正常运行:
现有代码存在的问题
- 语法笔误1:
manager.workerClient.attributes.[attribute name]中多了一个多余的.,正确写法是manager.workerClient.attributes[你的属性名] - 语法笔误2:
includes('[attribute name')缺少闭合的],应该和你实际要匹配的属性值对应 - 缺少重复监听防护:如果插件多次初始化(比如热重载、页面刷新场景),会重复绑定
reservationCreated事件,导致同一个任务触发多次接听逻辑 - 缺少状态判断:没有校验预约和任务的状态,可能会对已经取消、拒绝的任务执行接听操作,抛出异常
- 缺少任务类型过滤:如果只需要自动接听呼入来电,需要过滤掉消息、短信类的任务
修正后完整代码
init(flex, manager) { // 校验当前Worker是否开启自动应答权限 const hasAutoAnswerPermission = manager.workerClient.attributes?.[你的自定义属性名]?.includes('你要匹配的属性值') ?? false; if (!hasAutoAnswerPermission) return; // 定义事件处理函数,方便后续解绑避免重复监听 const onReservationCreated = async (reservation) => { // 仅处理待接听的语音呼入任务,不需要的话可以删除这个判断 if (reservation.status !== 'pending' || reservation.task?.taskChannelUniqueName !== 'voice') return; // 校验任务的自动应答标识 if (reservation.task.attributes?.autoAnswer === 'true') { try { // 等待接听完成再切换选中任务 await flex.Actions.invokeAction('AcceptTask', { sid: reservation.sid }); flex.Actions.invokeAction('SelectTask', { sid: reservation.sid }); } catch (err) { console.error('自动接听任务失败,任务SID:', reservation.sid, '错误信息:', err); } } } // 先移除已有的相同事件监听,再绑定新的 manager.workerClient.off('reservationCreated', onReservationCreated); manager.workerClient.on('reservationCreated', onReservationCreated); }
适配提示
- 如果你存在Task的
autoAnswer属性是布尔值而非字符串的情况,将判断条件改为reservation.task.attributes?.autoAnswer === true即可 - 如果需要对语音之外的其他类型任务也开启自动应答,删除
taskChannelUniqueName对应的判断条件即可 - 新增的异常捕获可以避免接听失败时抛出未捕获错误,影响Flex其他功能的正常运行
内容的提问来源于stack exchange,提问作者mandooov
相关产品推荐
相关产品推荐

