Это старая версия документа!
В плане набора должен быть описан контекст miko_ajam.
В контексте miko_ajam определяется extension с номером 10000666.
[miko_ajam] exten => 10000666,1,NoOP(dounload file from Asterisk)
При начале работы, “Панель телефонии Asterisk” выполняет AMI команду originate.
Параметры originate
Переменные канала
Приложение должно выполнить команду плана набора UserEvent и передать информацию по файлу:
Если файл найден:
; для типа Records exten => 10000666,n,UserEvent(StartDownloadRecord,Channel: ${chan},FileName: ${port}/${path}/${recfile}) ; для типа FAX exten => 10000666,n,UserEvent(StartDownloadFax,Channel: ${chan},FileName: ${port}/${path}/${recfile})
Если файл не найден:
; для типа Records exten => 10000666,n,UserEvent(FailDownloadRecord,Channel: ${chan}) ; для типа FAX exten => 10000666,n,UserEvent(FailDownloadFax,Channel: ${chan})
Параметр состоит их нескольких частей:
При получении оповещения, 1С откроет интернет обозвреватель по адресу:
http://${IP_PBX}:${port}/${path}/${recfile}
После выполнения UserEvent приложение должно ответить на звонок и отбить его.
exten => 10000111,n,Answer() exten => 10000111,n,Hangup()
Скрипт для скачивания файла
В качестве ресурса для скачивания файла можно использовать php скрипт:
<?php $ASTSPOOLDIR = "/var/spool/asterisk/"; $tmpdir = '/tmp/'; $faxdir = $ASTSPOOLDIR."fax/"; $recdir = $ASTSPOOLDIR."monitor/"; if ($_GET['view']) { if ($_GET['type']=="FAX") { $filename = $faxdir.basename($_GET['view']); $fp=fopen($filename, "rb"); if ($fp) { header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=".basename($_GET['view'])); ob_clean(); fpassthru($fp); }else{ echo '<b>404 File lib not found!</b>'; } }elseif ($_GET['type']=="Records" && file_exists($recdir.$_GET['view']) ){ $wavfile = $recdir.$_GET['view']; $size = filesize($wavfile); $name = basename($_GET['view']); $extension = strtolower(substr(strrchr($name,"."),1)); // This will set the Content-Type to the appropriate setting for the file $ctype =''; switch( $extension ) { case "mp3": $ctype="audio/mpeg"; break; case "wav": $ctype="audio/x-wav"; break; case "Wav": $ctype="audio/x-wav"; break; case "WAV": $ctype="audio/x-wav"; break; case "gsm": $ctype="audio/x-gsm"; break; // not downloadable default: die("<b>404 File not found!</b>"); break ; } // need to check if file is mislabeled or a liar. $fp=fopen($wavfile, "rb"); if ($ctype && $fp) { header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); header("Content-Description: wav file"); header("Content-Type: " . $ctype); header("Content-Disposition: attachment; filename=" . $name); header("Content-Transfer-Encoding: binary"); header("Content-length: " . $size); ob_clean(); fpassthru($fp); }else{ echo '<b>404 File not found!</b>'; } }else{ echo '<b>404 File not found!</b>'; } exit; }else{ echo '<b>404 File not found!</b>'; }?>
Для проверки можно использовать следующий скрипт:
#!/bin/sh dir_script='/tmp/'; # каталог из asterisk.conf astspooldir='/var/spool/asterisk'; # call_text="Channel: SIP/104 Context: miko_ajam Extension: 10000666 Callerid: Alexey<104> Setvar: v2=1385413520.14 Setvar: v1=SIP/104 Setvar: v6=Records "; echo "$call_text" > /tmp/file.call; mv '/tmp/file.call' "$astspooldir/outgoing/"; asterisk -rvvv;
Вывод в консоли Asterisk
-- Executing [10000666@miko_ajam:1] NoCDR("SIP/104-00000016", "") in new stack -- Executing [10000666@miko_ajam:2] NoOp("SIP/104-00000016", "internal calling application: 10000666 1C_Download") in new stack -- Executing [10000666@miko_ajam:3] AGI("SIP/104-00000016", "1C_Download.php") in new stack -- Launched AGI Script /var/lib/asterisk/agi-bin/1C_Download.php -- AGI Script Executing Application: (UserEvent) Options: (StartDownloadRecord,Channel:SIP/104,FileName:80/admin/1c/download/index.php?type=Records&view=exten-106-104-20131125-160520-1385413520.14.wav) -- AGI Script Executing Application: (NoCDR) Options: () -- <SIP/104-00000016>AGI Script 1C_Download.php completed, returning 0 -- Executing [10000666@miko_ajam:4] Hangup("SIP/104-00000016", "") in new stack
Далее следует открыть в браузере ссылку:
http://<IP_PBX>:FileName