Asterisk UserEvent

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
)

猜你喜欢

转载自blog.csdn.net/molaifeng/article/details/82109970