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

来电时调用php文件(星号),php,asterisk,voip,Php,Asterisk,Voip,我在asterisk中是新的,我搜索了10个小时,例如如何在传入呼叫时触发一个php文件,以获取呼叫者ID并向正在呼叫的用户显示 我找到了一些结果并测试了它们 下面的代码正在工作(复制粘贴自某人的示例),但问题是它的工作(触发php文件)仅当我从voip呼叫某人时,而不是当有人从外部呼叫我时,这就是我所需要的 那么,亲爱的程序员们,你们能帮我找出我的错误并给我一个工作示例吗?我知道extensions_custom.conf中的代码需要更改,但我不太擅长voip编程,我不知道如何修复它 扩展名\

我在asterisk中是新的,我搜索了10个小时,例如如何在传入呼叫时触发一个php文件,以获取呼叫者ID并向正在呼叫的用户显示
我找到了一些结果并测试了它们

下面的代码正在工作(复制粘贴自某人的示例),但问题是它的工作(触发php文件)仅当我从voip呼叫某人时,而不是当有人从外部呼叫我时,这就是我所需要的

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

扩展名\u 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);
?>
#/usr/bin/php-q

检查宏拨号一(需要在extensions\u ovveride\u freepbx.conf中更改)或在传入(extensions\u custom.conf)上创建自定义上下文,并将所有中继线更改为该上下文。

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

<?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: Login\r\n");
    fputs($socket, "UserName: admin\r\n");
    fputs($socket, "Secret: *********\r\n\r\n");
    //fputs($socket, "Action: WaitEvent\r\n");
    //fputs($socket, "Action: Logoff\r\n\r\n");
$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); ?>

您好首先谢谢您的回答,但您能给我举个例子说明我需要做什么吗?我是voip新手,不知道你给出了什么答案,很抱歉,根据指导原则,你应该展示你的努力。我给了你方向。我不会为你工作。这就是为什么我搜索了10个小时,没有任何运气,也没有完整的结果,这个简单的事情没有任何例子,相信我,这不是我的努力,我准备好了任何努力,因为我的公司想从我这里得到它,但我喜欢我想要的90%,但10%很难阅读所有的voip文档。但正如我说的,谢谢你的回答