Это старая версия документа!
В плане набора должен быть описан контекст miko_ajam.
В контексте miko_ajam определяется extension с номером 10000222.
[miko_ajam] exten => 10000222,1,NoOP(internal calling application: 10000222 1C_get_context)
Приложение может принимать параметры:
#!/usr/bin/php -q <?php /*----------------------------------------------------- // ООО "МИКО" - 2014-03-04 // v.1.5 // 1С_Set_Status // 10000222 // Передача статусов пользователей ------------------------------------------------------- Скрипт протестирован на Askozia v2: Asterisk 1.8.4.4 PHP 4.4.9 AGI phpagi.php,v 2.14 2005/08/29 -------------------------------------------------------*/ require('phpagi.php'); function GetVarChannnel($agi, $_varName){ $v = $agi->get_variable($_varName); if(!$v['result'] == 0){ return $v['data']; }else{ return ""; } } // GetVarChannnel($_agi, $_varName) $agi = new AGI(); $command = GetVarChannnel($agi,'command'); // put // show $dbFamily= GetVarChannnel($agi,'dbFamily'); $key = GetVarChannnel($agi,'key'); $val = GetVarChannnel($agi,'val'); $chan = GetVarChannnel($agi,'chan'); if($dbFamily!='CF'&&$dbFamily!='UserBuddyStatus'&&$dbFamily!='DND'){ $agi->exec("UserEvent", "DB_ERR,user:$key,status:$val"); }elseif($command=='get'){ // получение статуса конкретного пользователя $ret = $agi->evaluate("DATABASE GET $dbFamily $key"); if($ret['result']==1&&$ret['code']==200){ // успех выполнения операции $agi->exec("UserEvent", "DB_$dbFamily,сhannel:$chan,key:$key,val:$val"); }else{ // не установлена! $agi->exec("UserEvent", "DB_$dbFamily,сhannel:$chan,key:$key,val:"); } }elseif($command=='put'){ if(trim($val)==''){ $ret = $agi->evaluate("DATABASE DEL $dbFamily $key"); }else{ if($dbFamily=='DND'){ // текущий штамп времени + 8 часов $val = time() + (8*60*60); } // установка статуса $ret = $agi->evaluate("DATABASE PUT $dbFamily $key $val"); } if($ret['result']==1&&$ret['code']==200){ // успех выполнения операции $agi->exec("UserEvent", "DB_$dbFamily,Channel:$chan,key:$key,val:$val"); }else{ // были ошибки $agi->exec("UserEvent", "Error_data_put_$dbFamily,Channel:$chan,key:$key,val:$val"); } }elseif($command=='show'){ $output = array(); $result =''; // получение статустов всех пользователей $tmp_str = exec('asterisk -rx"database show '.$dbFamily.'"',$output); $agi->verbose("database show ".$dbFamily,3); // обходим файл построчно foreach($output as $_data){ // набор символов - разделитель строк if(! $result=="") $result = $result."....."; $_data = str_replace(' ', '', $_data); $_data = str_replace(':', '@.@', $_data); $_data = str_replace('/UserBuddyStatus/', '', $_data); $_data = rtrim($_data); $result = $result.$_data; // если необходимо отправляем данные порциями if($ch == 20){ // отправляем данные в 1С, обнуляем буфер $agi->exec("UserEvent", "From$dbFamily,Channel:$chan,Date:$date1,Lines:$result"); $result = ""; $ch = 1; } $ch = $ch + 1; } // проверяем, есть ли остаток данных для отправки if(!$result == ""){ $agi->exec("UserEvent", "From$dbFamily,Channel:$chan,Date:$date1,Lines:$result"); } }else{ // ошибка при установке параметров скрипта } // отклюаем запись CDR для приложения // $agi->exec("NoCDR", ""); // ответить должны лишь после выполнения всех действий // если не ответим, то оргининация вернет ошибку $agi->answer(); ?>
#!/bin/sh dir_script='/tmp/'; # каталог из asterisk.conf astspooldir='/var/spool/asterisk'; # call_text="Channel: SIP/104 Context: miko_ajam Extension: 10000222 Callerid: Alexey<104> Setvar: command=get Setvar: dbFamily=CF Setvar: key=104 Setvar: val=79257184222 Setvar: chan=SIP/104"; echo "$call_text" > /tmp/file.call; mv '/tmp/file.call' "$astspooldir/outgoing/"; asterisk -rvvv;
#!/bin/sh dir_script='/tmp/'; # каталог из asterisk.conf astspooldir='/storage/usbdisk1/askoziapbx/voicemailarchive'; SIPADDHEADER='Call-Info:\;answer-after=0'; # call_text="Channel: SIP/104 Context: miko_ajam Extension: 10000222 Callerid: Alexey<104> Setvar: command=show Setvar: dbFamily=UserBuddyStatus Setvar: chan=SIP/104 Setvar: SIPADDHEADER=$SIPADDHEADER"; echo "$call_text" > /tmp/file.call; mv '/tmp/file.call' "$astspooldir/outgoing/"; asterisk -rvvv;