在来电时调用php文件(星号)



im new在星号中,我搜索了10个小时,例如如何在来电时触发php文件以获取来电者ID并显示给正在呼叫的用户
,我找到了一些结果并测试了它们

下面的代码是工作的(复制粘贴自某人的例子(但问题是它的工作(触发php文件(只有当我从voip打电话给某人时,而不是当有人从外面打电话给我时,这就是我需要

那么,亲爱的程序员们能帮我什么是我的错误,并给我一个工作示例吗?我知道extensions_custom.conf中的代码需要更改,但我不太擅长voip编程,也不知道如何修复

extensions_custom.conf代码:

[macro-dialout-trunk-predial-hook]
exten => s,1,Verbose(Incoming call from Sip line CallerID=${CALLERID(all)})
exten => s,2,AGI(testest.php,${CALLERID(all)})

和我的测试php文件

#!/usr/bin/php -q
<?php 
$query = $argv[1];
file_get_contents('http://192.168.1.6/crm/test.php?s=test');
$fh = fopen('test.txt','w+');
fwrite($fh,$query);
fclose($fh);
?>

检查宏拨号一(需要在extensions_ovveride_freepbx.conf中更改它(或在传入上创建自定义上下文(extensions_custom.conf(,并将所有中继更改为该上下文。

i FOund答案我把它放在这里所以每个人都可以使用,因为在任何地方都没有这个简单代码的例子

<?php
$socket = fsockopen("192.168.1.100","5038", $errno, $errstr,10);
if (!$socket){
echo "$errstr ($errno)n"; 
}else{
//include('config.php');
//$db = db();
fputs($socket, "Action: Loginrn");
fputs($socket, "UserName: adminrn");
fputs($socket, "Secret: *********rnrn");
//fputs($socket, "Action: WaitEventrn");
//fputs($socket, "Action: Logoffrnrn");
$event = "";
while($ret = fgets($socket)){        
if(substr($ret,0,6) == "Event:"){
$e = explode(':', $ret);
$event = trim($e[1]);
}

if($event == "DeviceStateChange"){
$data = explode(':', $ret);

if($data[0] == "Timestamp"){
$ts = floor(trim($data[1]));
}

if($data[0] == "Device" && substr(trim($data[1]),0,3) == 'SIP'){
$d = explode('/', trim($data[1]));
$dev = trim($d[1]);
$device = "";

if(is_numeric($dev)){
$device = $dev;
}
}

if($data[0] == "State" && $device != ""){
$state = trim($data[1]);

if($state == "NOT_INUSE"){
//Clear CID fields and update presence state
echo 'NOT_inuse: state:'.$state.'-device: '.$device;//YOUR CODE
// $sql = "update asterisk.web_presence set state='$state',cidnum = NULL, cidname = NULL, inorout = NULL, callstart = NULL where ext='$device'";
// mysql_query($sql);
}else{
//Update presence state
echo 'else NOT_inuse: state:'.$state.'-device: '.$device;//YOUR CODE
$sql = "update asterisk.web_presence set state='$state' where ext='$device'";
//  mysql_query($sql);
}

$event = "";
$device = "";
}    
}

if($event == "DialBegin"){
$data = explode(':', $ret);

if($data[0] == "Timestamp"){
$ts = floor(trim($data[1]));
}

if($data[0] == "Channel"){
$c = explode('/',trim($data[1]));
$c2 = explode('-', trim($c[1]));
$channel = trim($c2[0]);
}

if($data[0] == "CallerIDNum"){
$cidnum = trim($data[1]);
}

if($data[0] == "CallerIDName"){
$cidname = trim($data[1]);
}

if($data[0] == "DialString"){
if(substr(trim($data[1]),0,3) == 'SIP' || is_numeric(trim($data[1]))){                
if(is_numeric(trim($data[1]))){
$exten = trim($data[1]);
}else{
$e = explode('/', trim($data[1]));
$exten = trim($e[1]);
}
$time = time();
//query("insert into callq(mobile,exten,time_stamp) values('$cidnum','$exten',$time)",$db);//YOUR CODE
echo 'dialstring-cidnum:'.$cidnum.'-cidname:'.$cidname.'-ts:'.$ts.'-ext:'.$exten;
//Update inbound presence call
/// $sql = "update asterisk.web_presence set cidnum = '$cidnum', cidname = '$cidname', inorout='I', callstart='$ts' where ext='$exten' and cidnum is null";//YOUR CODE
// mysql_query($sql);    

// $sql = "update asterisk.web_presence set cidnum = '$exten', inorout='O', callstart='$ts' where ext='$channel' and cidnum is null";//YOUR CODE
// mysql_query($sql);            
}else{
$e = explode('@', trim($data[1]));
$dialed = trim($e[0]);

if($channel != 'gateway'){                    
//Update outbound presence call

// $sql = "update asterisk.web_presence set cidnum = '$dialed', inorout='O', callstart='$ts' where ext='$channel'";
// mysql_query($sql);    
}                
}
$event = "";
$exten = "";
}    
}

if($event == "UnParkedCall"){
$data = explode(':', $ret);

if($data[0] == "Timestamp"){
$ts = floor(trim($data[1]));
}

if($data[0] == "RetrieverChannel"){
$c = explode('/',trim($data[1]));
$c2 = explode('-', trim($c[1]));
$channel = trim($c2[0]);
}

if($data[0] == "ParkeeCallerIDNum"){
$cidnum = trim($data[1]);
}

if($data[0] == "ParkeeCallerIDName"){
$cidname = trim($data[1]);
}        

if($data[0] == "ParkingSpace"){
$dialed = trim($data[1]);

$pickup = "$cidnum ($dialed)";
echo 'parked';
//Update outbound presence call
// $sql = "update asterisk.web_presence set cidnum = '$pickup', cidname='$cidname', inorout='O', state='INUSE', callstart='$ts' where ext='$channel'";
//mysql_query($sql);    

$event = "";    
$channel = "";        
}    
}        
}
} 
sleep(5);
exit;   
fclose($socket); ?>

最新更新