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

Twilio Flex已接受任务删除后会话保留的异常问题及程序化解决咨询

解决Twilio Flex残留会话问题:程序化方法与配置检查

程序化关闭会话的两种方案

1. 通过TaskRouter事件触发自动关闭

监听TaskRouter的task.canceled(系统自动删除任务时触发)和task.deleted(控制台手动删任务时触发)事件,通过Webhook联动关闭关联的会话:

  • 先在TaskRouter工作区的Event Hooks中添加Webhook,指向你的服务端点
  • 端点处理逻辑示例(Node.js):
const twilio = require('twilio');
const client = twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);

// 处理TaskRouter事件的Webhook
app.post('/handle-task-events', async (req, res) => {
  const { EventType, TaskAttributes } = req.body;
  const attrs = JSON.parse(TaskAttributes);

  // 仅处理任务删除/取消且有会话关联的场景
  if ((EventType === 'task.canceled' || EventType === 'task.deleted') && attrs.conversationSid) {
    try {
      await client.conversations.v1.conversations(attrs.conversationSid)
        .update({ status: 'closed' });
      return res.status(200).send('会话已关闭');
    } catch (err) {
      console.error('关闭会话失败:', err);
      return res.status(500).send('处理错误');
    }
  }
  res.status(200).send('无操作');
});

2. 定时清理无有效任务的会话

编写定时任务,定期扫描活跃会话,若关联任务已不存在则自动关闭:

  • 示例(Node.js + node-schedule):
const schedule = require('node-schedule');
const WORKSPACE_SID = '你的工作区SID';

// 每日凌晨执行清理
schedule.scheduleJob('0 2 * * *', async () => {
  const activeConvs = await client.conversations.v1.conversations.list({ status: 'active' });

  for (const conv of activeConvs) {
    const { taskSid } = JSON.parse(conv.attributes);
    if (!taskSid) continue;

    try {
      // 检查任务是否存在
      await client.taskrouter.v1.workspaces(WORKSPACE_SID).tasks(taskSid).fetch();
    } catch {
      // 任务不存在,关闭会话
      await client.conversations.v1.conversations(conv.sid).update({ status: 'closed' });
      console.log(`已清理会话: ${conv.sid}`);
    }
  }
});

配置检查项

  • Worker离线超时:在TaskRouter工作区的Worker Activity Settings中,设置Worker Activity Timeout(比如30分钟),当Worker长时间无活动时自动切换到Offline状态,触发任务重新分配(此设置配合事件Webhook,可避免任务挂死)
  • 任务超时规则:在任务队列配置中设置Task Timeout(比如1小时),当任务处于assigned状态超时时自动取消,触发task.canceled事件来关闭会话
  • Flex Flow fallback:检查Flex Flow的Fallback Queue设置,当会话无活跃Worker时,将新消息路由到可用队列,避免消息流入无人监控的残留会话

补充说明

控制台手动删除任务时,TaskRouter会触发task.deleted事件,只要Webhook配置正确,就能自动关闭对应会话,无需手动操作CLI。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 10:34:54