【问题标题】:Twilio JS SDK Unable to get the status change of callTwilio JS SDK 无法获取调用的状态变化
【发布时间】:2021-04-17 04:29:49
【问题描述】:

我在我的 Angular 应用程序中使用 Twilio JS SDK 来呼叫我的客户。 我需要在 UI 上显示通话状态(正在响铃/进行中/已完成)。 为此,我已经看到了一些使用 StatusCallBack Web 挂钩的文档,但是如果 Web 挂钩被执行并返回 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 twilio-api twilio-twiml twilio-programmable-chat twilio-click-to-call


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这里是 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。您需要将它作为选项对象的一部分与callerID 一起传递给Dial 方法。像这样:

      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 事件仅在人们拨打电话后才会触发。并且响铃,接受事件没有被触发。您能否就此提出建议。
      • 我在答案中看到了您的评论。设置访问令牌时,您提供了一个 TwiML 应用程序,其中包括一个用于语音呼叫的 webhook URL。在该应用程序中设置 TwiML 并且在该 上您应该设置 answerOnBridge。
      • 是的,我这样做了,但在拨出电话的情况下,device.connect(function(connection)){} 事件只有在人们拨打电话后才会触发。响铃,接受事件根本没有被触发。您能否就此提出建议。
      • 您能分享一下您用来拨打电话和收听事件的代码吗?我认为您可能正在监听设备对象上的事件,但您应该监听连接对象。
      • 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; }); });
      猜你喜欢
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      • 2020-03-23
      • 1970-01-01
      相关资源
      最近更新 更多