gpt4 book ai didi

php - PHP AMI连接-无法将传入和传出调用保存到数据库中

转载 作者:行者123 更新时间:2023-12-03 11:53:27 25 4
gpt4 key购买 nike

使用AMI(与Asteriskserver进行API连接,因此我可以使用PHP套接字连接),我正在尝试使用PHP捕获接收的数据,这样我可以记录在CRM上使用的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或A​​sterisk的情况下编写此部分。

简而言之,这是我的问题:
-如何记录传入和传出的调用,以最终通过使用AMI将它们保存在数据库中?
-如何以最佳方式保持与服务器的连接?我现在使用的方法不是最佳方法,因为连接在48小时内至少失败一次。
-您是否有关于优化代码和整洁代码编写的提示或建议?而且您是否知道我可以使用的任何功能代替我正在使用的功能?

带着敬意,
登普西

Since recently I get this error which I cannot solve properly. This error creates itself after about 15 minutes running. It would run atleast 24 hours before:

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}

Can anyone help me with this too? The authorisation data is correct (it is using the same data in the whole script and it does get a connection). Also I don't get the response 'Action: Ping???...' which it says is being send by the script as command, but where do the three questionmarks and periods come from?

最佳答案

这个框架应该很方便:
https://github.com/marcelog/PAMI

否则,您可以检查vTiger源以及它如何处理ami集成:
http://www.vtiger.com/index.php?Itemid=57&id=30&option=com_content&task=view

关于php - PHP AMI连接-无法将传入和传出调用保存到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5962866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com