2013-02-18 4 views
2

PHP에서 Asterisk 관리 인터페이스 (AMI)를 사용하여 발신 전화를 시작합니다.Asterisk 호출 로그 CDR 데이터베이스 필드를 AMI에서 설정하는 방법 ORIGINATE

// snippet 
// $num is the number to dial e.g. 0207 121 3456 
// $ext is the extension use to make the call e.g. 101 
// $name is the name of the caller e.g. Fred Flintstone 
// 
fputs($socket, "Action: Originate\r\n"); 
fputs($socket, "Channel: SIP/$ext\r\n"); 
fputs($socket, "Exten: $num\r\n"); 
fputs($socket, "Context: from-internal\r\n"); 
fputs($socket, "Priority: 1\r\n"); 
fputs($socket, "CallerID: \"".$name."\" <".$num.">\r\n"); 
fputs($socket, "Async: yes\r\n\r\n"); 

가 어떻게이 발생한 스크립트 내 발신 통화에 대한 asteriskcdrdb에 기록 된 발신자 이름 ($name) 또는 기타 세부 사항을 설정하는 : 아래는 내가 사용하고 코드의 조각은 무엇입니까? 이상적으로 인바운드 통화 필드가 설정된 것과 동일한 방법으로 dst 필드를 설정하려고합니다. 후

답변

0

originate 당신은 채널 ID를 찾는 출력을 구문 분석 할 수 있습니다 그리고 당신은 등 CDR (userfield) 또는 CDR (accouncode) ...

내 예를 설정하는 SETVAR를 사용할 수 있습니다

fputs($socket, "Action: Originate\r\n"); 
fputs($socket, "Channel: $userExt\r\n"); 
fputs($socket, "Context: $AMIcntx\r\n"); 
fputs($socket, "Exten: $phoneNum\r\n"); 
fputs($socket, "Priority: 1\r\n"); 

$chan=true; 
$channelID=0; 

while (!feof($socket)) 
{ 
    if ($chan && preg_match("#Channel: ([a-zA-Z0-9\\/-]+)#", $wrets, $cm)) 
    { 
     $channelID = $cm[1];   
     fputs($socket, "Action: Setvar\r\n"); 
     fputs($socket, "Channel: $channelID\r\n"); 
     fputs($socket, "Variable: CDR(userfield)\r\n"); 
     fputs($socket, "Value: FOOBAR\r\n\r\n");   
     fputs($socket, "Action: Logoff\r\n\r\n"); 
     $chan = false; //There are various Channel response, not overwrite. 
    } 
    //Further parsing of the AMI response go heres 
} 

SetVar은 지정된 채널에 대해서만 변수를 설정합니다. 호출이 끝나기 전에 가능한 한 일찍 setvar 명령을 보내야합니다.

다이얼 플랜을 편집 할 수있는 또 다른 방법은 (내가 freepbx를 사용하기 때문에) ami 호출에 대한 특정 컨텍스트를 작성하고, 컨텍스트에 대한 일부 변수를 전달하고,이 vars를 다이얼 플랜의 CDR.

0

당신이 액션 사용할 필요가 없습니다 다음 CDR (accountcode)를 설정하는 SETVAR를, 당신이 필요로하는 모든 통화 발신 아래

  fputs($socket, "Account: FOOBAR\r\n"); 

및 중 아래 줄을 추가하는 것은 전체 예제를

입니다
 fputs($socket, "Action: Originate\r\n"); 
     fputs($socket, "Channel: SIP/201\r\n"); 
     fputs($socket, "Exten: 1234\r\n"); 
     fputs($socket, "Account: FOOBAR\r\n"); 
     fputs($socket, "Context: from-internal\r\n"); 
     fputs($socket, "Priority: 1\r\n"); 
     fputs($socket, "WaitTime: 15\r\n"); 
     fputs($socket, "Callerid: 123456\r\n\r\n"); 
     $wrets=fgets($socket,128); 
     echo $wrets;