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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:24:03