我是 Kamailio 4.3.1 的新手,我正在尝试按照此http://kb.asipto.com/kamailio:k43-async-sip-routing-nodejs页面上的说明使用它。显然,这是一种使用 NodeJS 进行异步路由的新方法。我对示例进行了一些修改,并使用 REGISTER sip 对其进行了调整,并且效果很好。但现在我正在寻找一种让事情变得更复杂的方法。在示例中,仅当收到 REGISTER 方法时才调用 NodeJS 例程。当“200 OK”从寄存器的目的地返回时,我正在尝试对 NodeJS 进行类似的异步调用。
如果我们有:
Alice---REGISTER(Alice)---> Kamailio (异步调用 NodeJs)---REGISTER(Alice)-->Asterisk
稍后当 Asterisk 接受 REGISTER 时,我想要这个:
Alice<---200 OK---Kamailio(对 NodeJS 的异步调用)<---200 OK---Asterisk
为了捕获 200 OK,我将 Kamailio 配置为使用 EVAPI 执行异步调用,如下所示:
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;
}
所以这是我处理 200 OK 的配置。我想说它可以工作(因为最后 200 Ok 被转发给 Alice)但是 Kamailio 记录了这条消息: tm [tm.c:1479]: _w_t_relay_to(): ERROR: w_t_relay_to: unsupported route type: 4
我不喜欢这样。我知道出了点问题,当我查看 Kamailio 的源代码时,很明显这不是处理“200 OK”之类的消息的正确位置。
我的问题是,一旦 NodeJS 回复,有没有其他方法(好方法)来中继/路由 200 OK?我也试过
t_reply("200","OK"); instead of t_relay();
但这会生成一条 SIP 消息“200 OK”,其中不包含 Asterisk 收到的消息的所有内容。可能我可以告诉 Kamailio 回复完全相同的 200 OK,它刚刚收到?先感谢您!
此致,
安东