====== 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~~