[英]How to set Asterisk call log CDR database fields from AMI ORIGINATE
我在 PHP 中使用星號管理接口 (AMI) 來發起出站調用。 下面是我正在使用的代碼片段:
// 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" );
如何為原始腳本中的出站呼叫設置呼叫者姓名 ( $name
) 或寫入asteriskcdrdb
其他詳細信息? 理想情況下,我想以與設置入站呼叫字段相同的方式設置dst
字段。
在originate之后,您可以解析輸出以查找通道 id,然后您可以使用 Setvar 來設置 CDR(userfield) 或 CDR(accouncode) ...等。
我的例子:
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 調用創建一個特定的上下文,將一些變量從源傳遞到上下文,將這個變量設置為撥號計划中的 CDR .
您不需要使用 Action: Setvar 來設置 CDR(accountcode) ,您只需要在呼叫發起期間添加以下行
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;
您可以將任何變量放入操作中:
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" );
fputs($socket, "Variable: CDR(userfield)=AnyData\r\n\r\n" );
$wrets=fgets($socket,128);
echo $wrets;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.