Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
astpanel:ats:asterisk:download_file_v6 [2013/11/26 09:08] apor |
astpanel:ats:asterisk:download_file_v6 [2018/06/08 09:17] (текущий) apor [Действие] |
||
---|---|---|---|
Строка 3: | Строка 3: | ||
===== Описание ===== | ===== Описание ===== | ||
+ | <note important>**В этой статье описан алгоритм работы**. Пример реализации описан в [[http://wiki.miko.ru/astpanel:dialplan_miko_ajam | статье]] </note> | ||
+ | |||
В плане набора должен быть описан контекст **miko_ajam**.\\ | В плане набора должен быть описан контекст **miko_ajam**.\\ | ||
В контексте miko_ajam определяется extension с номером **10000666**.\\ | В контексте miko_ajam определяется extension с номером **10000666**.\\ | ||
Строка 8: | Строка 10: | ||
exten => 10000666,1,NoOP(dounload file from Asterisk)</code> | exten => 10000666,1,NoOP(dounload file from Asterisk)</code> | ||
- | При начале работы, **“Панель телефонии Asterisk”** выполняет AMI команду [[:kb:asterisk:ami:originate|originate]].\\ | + | При начале работы **“Панель телефонии Asterisk”** выполняет AMI команду [[:kb:asterisk:ami:originate|originate]].\\ |
**Параметры originate**\\ | **Параметры originate**\\ | ||
* channel - Local/10000666@miko_ajam | * channel - Local/10000666@miko_ajam | ||
Строка 21: | Строка 23: | ||
**Если файл найден:** | **Если файл найден:** | ||
<code>; для типа Records | <code>; для типа Records | ||
- | exten => 10000666,n,UserEvent(StartDownloadRecord,Channel: ${chan},FileName: ${port}/${path}/${recfile}) | + | exten => 10000666,n,UserEvent(StartDownloadRecord,chan1c: ${chan},FileName: ${port}/${path}/${recfile}) |
; для типа FAX | ; для типа FAX | ||
- | exten => 10000666,n,UserEvent(StartDownloadFax,Channel: ${chan},FileName: ${port}/${path}/${recfile})</code> | + | exten => 10000666,n,UserEvent(StartDownloadFax,chan1c: ${chan},FileName: ${port}/${path}/${recfile})</code> |
**Если файл не найден:** | **Если файл не найден:** | ||
<code>; для типа Records | <code>; для типа Records | ||
- | exten => 10000666,n,UserEvent(FailDownloadRecord,Channel: ${chan}) | + | exten => 10000666,n,UserEvent(FailDownloadRecord,chan1c: ${chan}) |
; для типа FAX | ; для типа FAX | ||
- | exten => 10000666,n,UserEvent(FailDownloadFax,Channel: ${chan})</code> | + | exten => 10000666,n,UserEvent(FailDownloadFax,chan1c: ${chan})</code> |
==== FileName ==== | ==== FileName ==== | ||
Строка 47: | Строка 48: | ||
**Скрипт для скачивания файла** | **Скрипт для скачивания файла** | ||
- | В качестве ресурса для скачивания файла м | + | В качестве ресурса для скачивания файла можно использовать php скрипт: |
+ | <code 1c><?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>'; | ||
+ | }?> | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ==== Проверка ==== | ||
+ | **Для проверки можно использовать следующий скрипт:** | ||
+ | <code>#!/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; | ||
+ | </code> | ||
+ | **Вывод в консоли Asterisk** | ||
+ | <code>-- 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</code> | ||
+ | |||
+ | Далее следует открыть в браузере ссылку: \\ | ||
+ | [[http://<IP_PBX>:FileName]]\\ | ||
+ | |||
+ | [[astpanel:ats:asterisk_v6|Обратно к основной инструкции...]] | ||
+ | ===== Комментарии ===== | ||
+ | ~~DISQUS~~ |