微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Twilio JS SDK 无法获取调用的状态变化

如何解决Twilio JS SDK 无法获取调用的状态变化

我在我的 Angular 应用程序中使用 Twilio JS SDK 来呼叫我的客户。 我需要在 UI(振铃/进行中/已完成)上显示呼叫状态。 为此,我看到了一些使用 StatusCallBack 网络钩子的文档,但是如果网络钩子被执行并返回 TwiML,我将如何在 UI 中收到通知。 请建议是否有任何替代方案。

这是我的 Angular 代码

    this.device.connect(function (connection) {
      connection.on('warning',function (warningName,warningData) {
        // alert(warningName);
        if (warningName == "low-bytes-received" || warningName == "low-bytes-sent") {
          myscope.NetworkIssue();
        }
      });
      connection.on('ringing',function (param1) {
        // alert(warningName);
        debugger;
      });
      connection.on('accept',function (param2) {
        // alert(warningName);
        debugger;
      });
});

这是我的 TWI ML 应用代码

var response = new VoiceResponse();
            var dial = new Dial(callerId: twilioNumber);
            if (phoneNumber != null)
            {
                dial.Number(phoneNumber);
                dial.AnswerOnBridge = true;
            }
            response.Append(dial);
            return Content(response.ToString(),"application/xml");

解决方法

这里是 Twilio 开发者布道者。

您实际上可以获取呼叫的状态,包括正在响铃和正在进行中的区别。

您可以看到 the events you can receive in the documentation here。要启用振铃状态,您需要在设置设备时包含 enableRingingState 选项:

Twilio.Device.setup(token,{ enableRingingState: true });

您还需要确保设置了 answerOnBridge attribute to true in your <Dial>

完成该设置后,一旦您拨打出站电话,您将收到事件 "ringing""accept""disconnect",以符合您的响铃/进行中/已完成要求。

编辑

在您的 TwiML 中,您错误地设置了 answerOnBridge。您需要将它作为选项对象的一部分与 Dial 一起传递给 callerID 方法。像这样:

var response = new VoiceResponse();
var dial = response.dial({
  callerId: twilioNumber,answerOnBridge: true
});
if (phoneNumber != null) {
  dial.Number(phoneNumber);
}
return Content(response.ToString(),"application/xml");

编辑 2

您正在使用已弃用的 device.connect 回调版本。但是现在在连接对象上设置事件处理程序也为时已晚。相反,当您调用 device.connect 进行传出呼叫时,您将获得一个连接对象返回,然后您应该设置侦听器。

为避免混淆,您还应该使用 device.on('connect',handler) 来监听连接事件。

像这样:

var connection = this.device.connect(connectOptions);

connection.on('warning',function (warningName,warningData) {
  // alert(warningName);
  if (warningName == "low-bytes-received" || warningName == "low-bytes-sent") {
    myscope.NetworkIssue();
  }
});
connection.on('ringing',function (param1) {
  // alert(warningName);
  debugger;
});
connection.on('accept',function (param2) {
  // alert(warningName);
  debugger;
});

this.device.on("connect",function() {
  console.log("Now connected");
})
,

这似乎对我有用。但是当我使用“Device.Connect”从 Twilio 客户端调用时如何设置 answerOnBridge=true

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?