当前位置: 首页 > 知识库问答 >
问题:

Socket.io/ARI错误:发出警报

左丘元徽
2023-03-14

我目前正在尝试添加一些错误处理,这些错误处理显示在我的web应用程序的前端,但我不知道如何获取套接字。io向前端发送警报框到目前为止的示例,我输入了一个号码来桥接呼叫,如果该呼叫不存在,则显示警报。

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

客户端

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

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

服务器端

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

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

停滞功能

使用ARI客户端命令桥接刚刚从客户端传递到服务器端的通道,用户将被桥接并显示在应用程序中。我试图在出现错误时向前端网页发出警报。

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");
    });

  }

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

共有2个答案

秦景同
2023-03-14

我是如何根据最初的答案让它工作的!

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

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

});

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

BridgeCall(数据、套接字);

然后在bridgeCall中,您需要将错误消息存储在一个全局变量中,然后在error函数中使用它,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);

}

黎曾笑
2023-03-14

您必须发出一个事件,客户端可以监听该事件,然后对其执行操作。

首先你的客户有:

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");
    });

  }
 类似资料:
  • 我目前正在为asterisk开发一个静音功能,我可以使用asterisk ARI从我的web前端运行该功能。 但每次我尝试运行/调用静音功能时,它都会给我以下错误: 但是,据am所知,am将信道数据直接传递给该功能,但没有任何效果。 有人对ARI JS客户端有任何建议或习惯吗? 客户端 当静音按钮被点击时,将在td中找到的数据发送到服务器端。 服务器端 将从客户端接收的数据存储到var中,然后调用

  • 我已经跟随杰弗里·韦的教程。 教程: https://laracasts.com/series/real-time-laravel-with-socket-io/episodes/1 null 我尝试使用

  • 我一直试图设置我的第一个Socket.io服务器,该服务器只需向客户机推送通知。 Apache和Socket.io当前运行在同一物理服务器(同一IP)上 服务器 我做错了什么??

  • 这可能是一个更巧妙的问题,但我在ViewComponent类中有以下方法 所以我的问题是我应该采取什么方法?让异步在那里与警告无关,还是有一个解决方案/修复这个警告?它对我的项目有那么大的影响吗? 谢了!

  • 我在express+Socket.io中使用了以下代码 我使用了以下代码: var express=require('express.io'); var app=require('express.io')(); var server=require('http').server(app); var io=require('socket.io')(server); 有没有人知道如何解决这个错误?

  • 我管理一切都很好,创建了一个通知服务,用于作为警报的结果触发通知。不幸的是,使用AlarmManager设置警报不能正常工作。它会在几分钟后触发(而不是几小时,这将表示时区问题)。循环周期为1周,所以我使用了常数INTERVAL_DAY,并将其乘以7。为了确保一个PendingIntent不会替换另一个,我将dayOfWeek作为第二个参数传递给PendingIntent.getService()