====== 10000666. Запрос имени файла на скачивание ====== [[astpanel:ats:asterisk_v6|Обратно к основной инструкции...]] ===== Описание ===== **В этой статье описан алгоритм работы**. Пример реализации описан в [[http://wiki.miko.ru/astpanel:dialplan_miko_ajam | статье]] В плане набора должен быть описан контекст **miko_ajam**.\\ В контексте miko_ajam определяется extension с номером **10000666**.\\ [miko_ajam] exten => 10000666,1,NoOP(dounload file from Asterisk) При начале работы **“Панель телефонии Asterisk”** выполняет AMI команду [[:kb:asterisk:ami:originate|originate]].\\ **Параметры originate**\\ * channel - Local/10000666@miko_ajam * Application - NoCDR **Переменные канала** \\ * v1 - канал пользователя, который инициировал originate * v2 - уникальный идентификатор файла записи. Поле **uniqueid** таблицы CDR. * v6 - тип файла. Может принимать два значения: "**FAX**" / "**Records**". ===== Действие ===== Приложение должно выполнить команду плана набора **UserEvent** и передать информацию по файлу:\\ **Если файл найден:** ; для типа Records exten => 10000666,n,UserEvent(StartDownloadRecord,chan1c: ${chan},FileName: ${port}/${path}/${recfile}) ; для типа FAX exten => 10000666,n,UserEvent(StartDownloadFax,chan1c: ${chan},FileName: ${port}/${path}/${recfile}) **Если файл не найден:** ; для типа Records exten => 10000666,n,UserEvent(FailDownloadRecord,chan1c: ${chan}) ; для типа FAX exten => 10000666,n,UserEvent(FailDownloadFax,chan1c: ${chan}) ==== FileName ==== Параметр состоит их нескольких частей: * ${port} - порт, к примеру 80 * ${path} - путь к ресурсу для скачивания файла * ${recfile} - Имя файла При получении оповещения, 1С откроет интернет обозвреватель по адресу:\\ http://${IP_PBX}:${port}/${path}/${recfile} После выполнения **UserEvent** приложение должно ответить на звонок и отбить его.\\ exten => 10000111,n,Answer() exten => 10000111,n,Hangup() **Скрипт для скачивания файла** В качестве ресурса для скачивания файла можно использовать php скрипт: 404 File lib not found!'; } }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("404 File not found!"); 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 '404 File not found!'; } }else{ echo '404 File not found!'; } exit; }else{ echo '404 File not found!'; }?> ==== Проверка ==== **Для проверки можно использовать следующий скрипт:** #!/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: () -- AGI Script 1C_Download.php completed, returning 0 -- Executing [10000666@miko_ajam:4] Hangup("SIP/104-00000016", "") in new stack Далее следует открыть в браузере ссылку: \\ [[http://:FileName]]\\ [[astpanel:ats:asterisk_v6|Обратно к основной инструкции...]] ===== Комментарии ===== ~~DISQUS~~