使用AMI(与Asteriskserver的API连接,所以我可以使用PHP套接字连接)我正在尝试使用PHP捕获接收数据,以便我可以记录我工作的公司使用的CRM系统(基于Web)的传出和传入呼叫。但我没有得到我想要的结果...完整的代码可以在PasteBin http://pastebin.com/AwRNBW2G 上找到
我以这种方式接听拨出电,这有效:
if($givenkey = array_search("Context: from-internal", $content)){
$calleridKey = $givenkey + 1;
$idSIP = $givenkey - 1;
$dialNumber = str_replace("Extension: 0","31",$content[$calleridKey]);
$dialNumber = str_replace("Extension: ", "", $dialNumber);
$fromSIP = str_replace("Channel: SIP/", "", $content[$idSIP]);
$fromSIP = substr($fromSIP, 0, 2);
$dialTime = date('r');
$uitgaand = array(
"Phonenumber" => $dialNumber,
"Type" => "Uitgaand",
"datetime" => $dialTime,
"SIP" => $fromSIP
);
以这种方式捕获传入的呼叫,但这无法正常工作:
if($givenkey = array_search("AppData: Using CallerID ", $content)){
if(array_search("Channel: SIP/31000000000", $content)+5 == $InCallKey = array_search("AppData: Using CallerID", $content)){
$calleridNum = explode('"',str_replace('AppData: Using CallerID "',"",$content[$InCallKey]));
$pickupSource = array_search("Source: SIP/31000000000", $content);
if($pickupSource+1 == $pickupKey = array_search("Destination: SIP/", $content)){
$pickupBy = str_replace("Destination: SIP/","",$content[$pickupkey]);
$pickupBy = substr($pickupBy, 0, 2);
$dialTime = date('r');
$inkomend = array(
"Phonenumber" => $calleridNum[0],
"Type" => "Binnenkomend",
"datetime" => $dialTime,
"SIP" => $pickupBy
);
我有我现在不可用的数组,但如有必要,我可以保存数组并将其发布在此处,并过滤个人数据。
我知道我现在使用的代码并不整洁,但我编写它的目的是:快速获得结果。如果我有一个工作代码,我会优化它并清理它。也非常欢迎有关这方面的提示。太糟糕了,我找不到任何关于这个的好文档,所以我必须从头开始,只能找到我现在正在使用的工人阶级,但它不是很完整。我不得不在没有任何关于VOIP或AMI或Asterisk的知识的情况下写这部分。
简而言之,这是我的问题:- 如何使用 AMI 记录传入和传出呼叫以最终将它们保存在数据库中?- 如何以最佳方式保持与服务器的连接?我现在使用的方法不是最佳的,因为连接在 48 小时内至少失败一次。- 您有关于优化代码和更整洁的代码编写的提示或建议吗?您是否知道我可以使用的任何功能而不是我正在使用的功能?
问候,登普西
从最近开始,我收到此错误 我无法正确解决。此错误 大约 15 分钟后创建自己 运行。它将至少运行 24 小时 以前:
PHP Notice: fwrite(): send of 16 bytes failed with errno=32 Broken pipe in /var/www/html/phpami/AMILoader.php on line 147 Net_AsteriskManagerException: Authorisation failed in /var/www/html/phpami/AMILoader.php on line 173 #0 /var/www/html/phpami/AMILoader.php(173): Net_AsteriskManager-login('GEBRUIKERSNAAM','WACHTWOORD') #1 /var/www/html/phpami/AMILoader.php(306): Net_AsteriskManager-_sendCommand('Action: Ping???...') #2 /var/www/html/phpami/AMILoader.php(543): Net_AsteriskManager->ping() #3 {main}
谁能帮我解决这个问题?这 授权数据是正确的(它是 在整体上使用相同的数据 脚本,它确实得到了连接)。 我也没有得到响应"操作: 乒???...'它说是 通过脚本作为命令发送,但 三个问号和 月经从何而来?
这个框架应该很方便:https://github.com/marcelog/PAMI
否则,您可以检查 vTiger 源以及它如何处理 AMI 集成:http://www.vtiger.com/index.php?Itemid=57&id=30&option=com_content&task=view
如果您使用的是 php,那么连接到 AMI 的最简单方法之一是使用 php-astmanager 类。它支持对某些"事件"的回调,以便您可以捕获所需的数据。最好的(唯一?)维护副本是FreePBX的一部分,可以直接从最新版本(撰写本文时为2.9)中提取出来。