Node.js Kamailio 4.3.1寄存器/200正常异步

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的异步调用)-----

我是Kamailio 4.3.1的新手,我正在尝试按照本页所述使用它。显然,使用NodeJS进行异步路由是一种新的方法。 我对这个例子做了一点修改,并用一个寄存器sip对其进行了调整,效果非常好。但现在我正在寻找一种方法,让事情变得更复杂一点。 在本例中,仅当接收到REGISTER方法时才调用NodeJS例程。当“200OK”从寄存器的目标返回时,我尝试对NodeJS进行类似的异步调用

如果我们有:

Alice---寄存器(Alice)-->Kamailio(对NodeJs的异步调用)-----寄存器(Alice)-->Asterisk

稍后,当Asterisk接受注册时,我希望:


爱丽丝所以我终于找到了部分解决问题的方法。 我发现模块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();