Внимание!
Эта wiki об устаревших версиях
Документация к актуальной версии интеграции 1С и телефонии доступна по ссылке

Инструменты пользователя

Инструменты сайта


astpanel:ats:asterisk:download_file_v6

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
astpanel:ats:asterisk:download_file_v6 [2013/11/26 09:03]
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 ====
Строка 39: Строка 41:
 При получении оповещения,​ 1С откроет интернет обозвреватель по адресу:​\\ При получении оповещения,​ 1С откроет интернет обозвреватель по адресу:​\\
 <​code>​http://​${IP_PBX}:​${port}/​${path}/​${recfile}</​code>​ <​code>​http://​${IP_PBX}:​${port}/​${path}/​${recfile}</​code>​
 +
 +После выполнения **UserEvent** приложение должно ответить на звонок и отбить его.\\
 +<​code>​exten => 10000111,​n,​Answer()
 +exten => 10000111,​n,​Hangup()</​code>​
 +
 +**Скрипт для скачивания файла**
 +
 +В качестве ресурса для скачивания файла можно использовать 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~~
astpanel/ats/asterisk/download_file_v6.1385456622.txt.gz · Последние изменения: 2014/11/14 22:32 (внешнее изменение)