【发布时间】:2021-01-29 14:53:00
【问题描述】:
TL;DR:Twilio javascript 客户端中的“reject”事件监听器在被调用者被拒绝后没有被调用,但“disconnect”事件监听器被调用。我想知道呼出呼叫何时被其他对等方拒绝,但找不到如何。
我正在使用 Twilio 进行浏览器到浏览器的调用(基于此存储库:https://github.com/TwilioDevEd/browser-calls-node)。
呼叫者客户端正在使用 device.connect 发起呼叫。 我收到一个连接到我的服务器的钩子(在 Twilio 应用程序控制台中定义的路由)。 然后,我的服务器使用包含拨号命令的 twiml 字符串响应 Twilio,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial answerOnBridge="true" action="/calls/webhooks/status" record="record-from-answer">
<Client>
600b3a66ebc8f8ba51d7aed6
<Parameter name="sessionId" value="53d70205-6723-4402-afe5-68169c2bd018" />
</Client>
</Dial>
<Record />
</Response>
客户端字符串是注册代理。
当被叫方收到来电时,UI 会显示一个带有接听和拒绝按钮的弹出窗口。
当用户点击拒绝时,我使用call.reject() 拒绝来电。
然后 Twilio 访问了我定义的状态 webhook,如果正文包含等于 busy 的 DialCallStatus,我将使用 Twiml 字符串响应拒绝命令,如下所示:
<?xml version="1.0" encoding="UTF-8"?><Response><Reject/></Response>
现在问题来了: 调用者“拒绝”事件侦听器不会被触发,也不会被“取消”。 调用者“断开连接”事件监听器确实被调用了——但是当每一方挂断时它也会被调用。 当被叫方接听电话时,一切正常,连接“接受”事件监听器被触发。
无法区分这两种状态 - 呼叫是否已接听并挂断,或者呼叫是否被座席拒绝。
我已经尝试了所有方法 - 将事件侦听器连接到呼叫、设备,但我不知道为什么它没有被调用。
我在调用方的代码如下所示:
const device = new Twilio.Device(token, {
codecPreferences: ["opus", "pcmu"],
fakeLocalDTMF: true,
enableRingingState: true,
});
device.on('disconnect', () => {
// this is actually being called after the Reject response from the server... but I want the reject listener to be called instead.
})
const call = device?.connect({ sessionId: state.sessionId });
state.call.on('reject', (call) => {
// this is not being called... :(
});
state.call.on('canceled', (call) => {
// this is not being called either
});
我的代码有问题吗? 如果拒绝事件监听器从未被触发并且只有断开连接,我怎么知道为什么会发生断开连接?
提前致谢。
【问题讨论】:
标签: javascript node.js twilio