Node.js Kamailio 4.3.1寄存器/200正常异步
我是Kamailio 4.3.1的新手,我正在尝试按照本页所述使用它。显然,使用NodeJS进行异步路由是一种新的方法。 我对这个例子做了一点修改,并用一个寄存器sip对其进行了调整,效果非常好。但现在我正在寻找一种方法,让事情变得更复杂一点。 在本例中,仅当接收到REGISTER方法时才调用NodeJS例程。当“200OK”从寄存器的目标返回时,我尝试对NodeJS进行类似的异步调用 如果我们有: Alice---寄存器(Alice)-->Kamailio(对NodeJs的异步调用)-----寄存器(Alice)-->Asterisk 稍后,当Asterisk接受注册时,我希望:Node.js Kamailio 4.3.1寄存器/200正常异步,node.js,asynchronous,routing,sip,kamailio,Node.js,Asynchronous,Routing,Sip,Kamailio,我是Kamailio 4.3.1的新手,我正在尝试按照本页所述使用它。显然,使用NodeJS进行异步路由是一种新的方法。 我对这个例子做了一点修改,并用一个寄存器sip对其进行了调整,效果非常好。但现在我正在寻找一种方法,让事情变得更复杂一点。 在本例中,仅当接收到REGISTER方法时才调用NodeJS例程。当“200OK”从寄存器的目标返回时,我尝试对NodeJS进行类似的异步调用 如果我们有: Alice---寄存器(Alice)-->Kamailio(对NodeJs的异步调用)-----
爱丽丝所以我终于找到了部分解决问题的方法。 我发现模块EVAPI提出了一个名为EVAPI_relay()的方法,该方法不挂起当前事务,而是向NodeJS应用程序发送消息,并立即中继SIP消息。 我说这部分地解决了我的问题,因为我仍然无法完成暂停事务的整个过程(没有Kamailio错误)。 就我而言,这并不重要,但我认为在某些情况下,这个问题会持续下去 Anton:evapi_async_relay()返回true后,请求路由()中不应发生中继,它后面应该是exit 将作为参数给定的事件数据中继到连接的应用程序。在评估参数之前,使用tm模块(使用
t\u suspend()
/t\u continue()
框架)暂停请求处理。一旦触发事件路由[evapi:message received]
,SIP请求的路由就可以继续。evapi\u async\u relay()
返回true后,在request\u route()
中不应发生中继,然后是exit
request_route
{
....
route(REGISTRAR);
....
exit;
}
route[REGISTRAR]
{
...
t_on_reply("2OO_OK_RSP"); # Here I tell that I want to catch the "200 OK"
...
exit;
}
# When the 200 OK arrives, this code is called
onreply_route[2OO_OK_RSP]
{
# Here is my async call to NodeJS
evapi_async_relay("send message to NodeJS about 200 OK");
}
#When NodeJS returns
event_route[evapi:message-received]
{
if(200 OK)
{
t_countinue("..", "...", RSP_200OK)
}
}
route[RSP_200OK]
{
t_on_branch("MANAGE_BRANCH");
t_on_failure("MANAGE_FAILURE");
route(RELAY); # I am trying here to relay the 200 OK, which finishes by calling t_relay();
exit;
}
t_reply("200","OK"); instead of t_relay();