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

使用Twilio<SIP>/<Client>及<Enqueue>/<Queue>时Yealink T31 BLF不亮问题

问题描述

我正在基于Twilio与Yealink T31硬电话开展项目,使用Twilio的<Client>和<SIP>动词处理呼叫,通过<Enqueue>和<Queue>实现呼叫驻留。已在Yealink控制台选择呼叫驻留的转移模式,使其触发SIP呼叫时指定的referUrl。

当前遇到的问题是:呼叫驻留时Yealink T31的BLF(Busy Lamp Field)指示灯未点亮。理想状态下,发起驻留的电话应显示红色BLF指示灯,网络内其他电话应显示闪烁绿色BLF指示灯。

我的Yealink DSS Key配置如下:

  • 驻留码(Park Key):*10001
  • 取回码(Retrieve Key):*20001

尽管完成上述配置,呼叫驻留时BLF指示灯仍无变化。我知道还需额外配置,但无法确定缺失项。

我调研过PBX系统,但均不符合我的业务场景:产品需接入多企业,每个企业拥有独立的SIP和Client账号。目前我使用Twilio SIP域,为企业号码注册账号并直接在Yealink设备中使用。

参考代码

取回驻留呼叫代码

const response = new twilio.twiml.VoiceResponse()
const dial = response.dial();
dial.queue(`${company.data.company_id}_${toFormatted?.toString()?.substring(4)}`); // 格式为companyid_lotNumber
return response.toString();

呼叫驻留代码

与上述类似,仅将dial.queue替换为dial.enqueue。

呼叫SIP电话代码

dial = voice_response.dial({
  callerId: from,
  action: `${process.env.ENV_URL}/voice/sip-url`,
  method: 'POST',
  referUrl: `${process.env.ENV_URL}/voice/transfer-sip`,
});

dial.sip({
  statusCallbackEvent: 'answered completed',
  statusCallback: `${process.env.ENV_URL}/voice/save-logs-callback`,
  statusCallbackMethod: 'POST',
}, sip);

请问我缺失了哪些配置才能让BLF指示灯正常工作?


解决方案

BLF指示灯未点亮的核心原因是Yealink设备需要实时获取队列/驻留呼叫的状态更新,而Twilio默认不会主动推送这类状态到SIP终端。以下是你缺失的关键配置和调整:

Yealink的BLF灯需要绑定到具体的监控对象,你当前只配置了驻留/取回码,但没有把BLF键关联到Twilio的队列地址:

  • 进入Yealink T31网页控制台,找到DSS Key配置
  • 将对应BLF键的类型设置为BLF
  • 输入队列的SIP URI作为监控目标:sip:[队列名称]@[你的Twilio SIP域],比如队列是company123_1001、SIP域是mydomain.sip.twilio.com,则填入sip:company123_1001@mydomain.sip.twilio.com
  • 确保该BLF键的Retrieve字段设置为你的取回码*20001

2. 启用Twilio SIP域的Presence(状态推送)

Twilio需要开启Presence功能才能向SIP终端发送BLF所需的SIP NOTIFY状态通知:

  • 登录Twilio控制台,进入你的SIP域配置页面
  • 找到Presence选项,设置为Enabled
  • 确保Event Package选择dialog(Yealink支持的状态推送协议)

3. 调整Enqueue/Queue的配置,监听状态变化

在使用<Enqueue>和<Queue>时,需要配置状态回调让Twilio跟踪呼叫状态:

  • 当使用dial.enqueue时,添加statusCallback参数,监听队列的wait和leave事件
  • 示例调整(Node.js):
const enqueue = dial.enqueue({
  statusCallback: `${process.env.ENV_URL}/voice/queue-status`,
  statusCallbackEvent: 'wait leave',
  statusCallbackMethod: 'POST'
});
enqueue.queue(`${company.data.company_id}_${toFormatted?.toString()?.substring(4)}`);

4. 确保Yealink设备允许SIP订阅

Yealink需要开启SIP订阅权限才能接收状态通知:

  • 在Yealink控制台的SIP Settings > Advanced中,设置Allow SIP Subscribe为Yes
  • 检查SIP Notify相关选项,确保未禁用状态接收

5. 验证SIP NOTIFY消息传输

可以通过Wireshark等抓包工具验证:

  • 呼叫驻留后,Twilio应向订阅该队列的SIP终端发送NOTIFY消息,携带呼叫状态
  • 如果未收到,检查Twilio SIP域的防火墙/ACL设置,确保允许向Yealink设备发送NOTIFY请求

内容的提问来源于stack exchange,提问作者Ayush T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:32:42