Проблема в том, что используется asterisk 16.
Для него изменился подход к получению информации о хинтах.
Можно использовать в 10000111 следующий скрипт AGI (и только его после
Answer()):
| Код |
|---|
#!/usr/bin/php -q
<?php
function normalize_hint(&$str){
$hint_val = '';
$arr_val = explode('&', $str);
foreach ($arr_val as $val){
if( strrpos($val, 'SIP/') === FALSE &&
strrpos($val, 'PJSIP/') === FALSE &&
strrpos($val, 'IAX2/') === FALSE &&
strrpos($val, 'DAHDI/') === FALSE){
continue;
}
if($hint_val != '') $hint_val.='&';
$hint_val.=$val;
}
$str = $hint_val;
}
$agi = new AGI();
// Получение переменной AGI канала
//
function GetVarChannnel($agi, $_varName){
$v = $agi->get_variable($_varName);
if(!$v['result'] == 0){
return $v['data'];
}
else{
return "";
}
} // GetVarChannnel($_agi, $_varName)
$Chan = GetVarChannnel($agi, "v1");;
$pt1cusemp3player = GetVarChannnel($agi, "pt1cusemp3player");;
$attr_name = "chan1c";
$DialplanVer = "1.0.0.6";
$GSVER = trim(substr(exec("gs -v"),15,4));
$FaxSendUrl = "80/admin/1c/upload/index.php";
$Statistic = "";
$SkypeContext = "";
$DefaultContext = "from-internal";
$agi->exec("UserEvent", "AsteriskSettings"
.",{$attr_name}:{$Chan}"
.",FaxSendUrl:$FaxSendUrl"
.",DefaultContext:$DefaultContext"
.",SkypeContext:$SkypeContext"
.",DialplanVer:$DialplanVer"
.",autoanswernumber:**"
.",Statistic:$Statistic"
.",GhostScriptVer:$GSVER"
."$pt1cusemp3player");
$arr_hints = array();
$context = 'ext-local';
exec("asterisk -rx\"core show hints\" | grep -v '^_' | grep '{$context}' | awk -F'([ ]*[:]?[ ]+)|@' ' {print $1\"@{$context}\" \"@.@\" $3 \"@.@\" $4 } '", $arr_hints);
$result = ''; $count = 1;
foreach ($arr_hints as $hint_row){
if(substr($hint_row, 0, 1) === '*'){
// Старкоды отсекаем.
continue;
}
$row_data = explode('@.@', $hint_row);
if(count($row_data) <3){
// Битая строка.
continue;
}
normalize_hint($row_data[1]);
$hint_row = implode('@.@', $row_data);
if(strrpos($row_data[1], '/') === FALSE) {
// Не корректное имя канала, это вероятно виртуальное устройство.
continue;
}
if($count >= 10){
$agi->exec("UserEvent", "RowsHint,chan1c:{$attr_name}:{$Chan},Lines:{$result}");
$result = ''; $count = 1;
}
$result .= trim($hint_row).'.....';
$count++;
}
if($result!==''){
$agi->exec("UserEvent", "RowsHint,chan1c:{$attr_name}:{$Chan},Lines:{$result}");
}
$agi->exec("UserEvent", "HintsEnd,chan1c:{$attr_name}:{$Chan}");
// отклюаем запись CDR для приложения
// $agi->exec("NoCDR", "");
// ответить должны лишь после выполнения всех действий
$agi->answer();
|