UserEvent
发送 任意的 事件到 AMI
接口,这里的任意的表示即可发送 Asterisk
内置的也可以是自定义的。其语法为
UserEvent(eventname,[body])
给个 demo
来演示下,首先在拨号计划里加条规则
exten => _8.,1,Answer()
same => n,MixMonitor(${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)}-${CALLERID(num)}-${EXTEN}.wav,b)
same => n,UserEvent(TEST,test: 1) ; TEST 为自定义的事件,其中键值对中那个冒号后面一定得加个空格,否则解析为空
same => n,Dial(SIP/ss2ss${EXTEN:1},45)
same => n,Hangup()
其次执行监听脚本
#!/usr/bin/php -q
<?php
include "phpagi-asmanager.php";
$ams = new AGI_AsteriskManager();
$ams->AGI_AsteriskManager("ami.ini");
$result = $ams->connect();
$ams->Events('on');
$res = $ams->add_event_handler('*', 'callback');
function callback($event, $param, $server, $port)
{
echo 'event:'. $event . ', server:' . $server . ', port:'. $port . "\r\n";
print_r($param);
}
var_dump($res); //这个是查看输出信息的调试代码
while (true)
{
$ams->wait_response();
}
$ams->disconnect();
最后软电话上拨打 8001
,再看看控制台上的相关输出,这里截取一段
event:newexten, server:192.168.255.161, port:5038
Array
(
[Event] => Newexten
[Privilege] => dialplan,all
[Channel] => SIP/8002-0000004e
[Context] => dialout
[Extension] => 8001
[Priority] => 3
[Application] => UserEvent
[AppData] => TEST,test: 1
[Uniqueid] => 1535335774.125
)
event:userevent, server:192.168.255.161, port:5038
Array
(
[Event] => UserEvent
[Privilege] => user,all
[UserEvent] => TEST
[Uniqueid] => 1535335774.125
[test] => 1
)