【问题标题】:Socket.io / ARI error: Emit AlertSocket.io / ARI 错误:发出警报
【发布时间】:2023-03-13 00:40:01
【问题描述】:

我目前正在尝试添加一些错误处理,该处理目前显示在我的 Web 应用程序的前端,但我不知道如何让 socket.io 向前端发出警报框到目前为止,我输入了一个扩展号码来桥接呼叫,如果该呼叫不存在则显示警报。

代码应该让它看起来更清晰。

客户端

单击按钮时,将输入框中的数据发送到服务器端

$(document).on('click', '.bridge', function () {
    var bridge = $('input').val();
    socket.emit('bridge', bridge);
    console.log(bridge)
});

服务器端

将从客户端接收到的数据存储到一个var中,然后调用stasis函数。

io.sockets.on('connection', function (socket) {
socket.on('bridge', function (data) {
  bridgeCall(data);
  console.log("Reached listener for bridge")
});
    });

静止功能

使用 ARI 客户端命令将您刚刚从客户端传递到服务器端的通道桥接,用户将被桥接并显示在 stasis 应用程序中。如果出现错误,我正在尝试以某种方式向前端网页发出警报。

function bridgeCall(exeten) {
    console.log("Extension being bridged: " + exeten);
    client.channels.originate({
      endpoint : "SIP/" + exeten,
      app : 'bridge-hold'
    },
      function (err, channel) {
      console.log("Channel: " + exeten + " does not exist");
      alert("Channel: " + exeten + " does not exist");
    });

  }

我只是想在前端出现错误时发出警报。

【问题讨论】:

    标签: javascript jquery node.js express socket.io


    【解决方案1】:

    您必须发出一个客户端可以侦听的事件,然后对其采取行动。

    首先你的客户有:

    socket.on("my_error",function(err){alert(err)}
    

    然后在服务器端,将套接字传递给 bridgeCall 函数:

    bridgeCall(data,socket);
    

    然后在bridgeCall中,做:

    function bridgeCall(exeten,socket) {
        console.log("Extension being bridged: " + exeten);
        client.channels.originate({
          endpoint : "SIP/" + exeten,
          app : 'bridge-hold'
        },
          function (err, channel) {
              console.log("Channel: " + exeten + " does not exist");
              socket.emit("my_error","Channel: " + exeten + " does not exist");
        });
    
      }
    

    【讨论】:

      【解决方案2】:

      我最终是如何根据原始答案让它工作的!

      首先在您的客户端上,您必须插入以下内容以接收事件以显示错误(如果有):

      socket.on("error", function (err) {
      $("<div title='Error'>" + err + "</div>").dialog({
          modal : true,
          buttons : {
              Ok : function () {
                  $(this).dialog("close");
              }
          }
      });
      

      });

      然后在服务器端,将套接字传递给 bridgeCall 函数:

      bridgeCall(data,socket);

      然后在 bridgeCall 中,你需要将错误信息存储在一个全局变量中,然后在错误函数中使用它,ARI/Stasis 很奇怪,所以请执行以下操作:

        function bridgeCall(exeten) {
          console.log("Extension being bridged: " + exeten);
          client.channels.originate({
            endpoint : "SIP/" + exeten,
            app : 'ARI-Web-App'
          },
            function (err) {
                    if (err) {
            console.log("Channel: " + exeten + " does not exist");
            error = ("Channel: " + exeten + " does not exist");
            Error();
            }
          });
      
        }
      

      您在 bridgeCall 结束时调用的错误函数如下所示,与服务器端套接字逻辑一起插入:

       function Error() {
      io.sockets.emit("error",error);
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-29
        • 2014-02-23
        相关资源
        最近更新 更多