首页 > 解决方案 > Asterisk PAMI 如何查找相关事件

问题描述

我有以下代码:

$pamiClient = new ClientImpl($params);

$pamiClient->open();

$originateMsg = new OriginateAction('PJSIP/9090');
$originateMsg->setContext('from-internal');
$originateMsg->setPriority('1');
$originateMsg->setAsync(true);
$originateMsg->setCallerId('Test');
$originateMsg->setExtension('user phone');

$response = $pamiClient->send($originateMsg);

$pamiClient->close();

返回响应:

"response": "Success",
"actionid": "1607830126.4974",
"message": "Originate successfully queued",
"created": 1607830126

我的任务是记录所有操作呼叫开始 9090 到用户电话,结束 9090 到用户电话等。

为此,我听取了星号的所有操作,但我不知道如何将呼叫后收到的响应与事件联系起来 您无法通过 calleridnum 连接,因为 9090 可以呼叫不同的号码 如何通过 actionid 获取linkedid ?

示例事件:

array(17) {
["event"]=>
string(13) "HangupRequest"
["privilege"]=>
string(8) "call,all"
["channel"]=>
string(19) "PJSIP/9090-000007f5"
["channelstate"]=>
int(5)
["channelstatedesc"]=>
string(7) "Ringing"
["calleridnum"]=>
int(9090)
["calleridname"]=>
string(7) "Test"
["uniqueid"]=>
string(15) "1607830255.6102"
["linkedid"]=>
string(15) "1607830255.6102"
...

标签: phpasterisk

解决方案


每次频道启动时,您都会收到 NewChannel 事件。在那种情况下,您有 uniqueid 字段,将其与 callerid 和您需要的其他信息和频道名一起存储。

每次您进行任何操作时,您都具有相同的唯一 ID 或频道名称。当您在队列中有孩子的频道时,您有linkedid = parent 频道ID。

还有一些伪装事件会改变频道名称等。

检查 FOP(闪存操作面板)代码。通过 AMI 做到这一点确实不是一件容易的事,值得几年的发展。


推荐阅读