====== 10000333. Настройка Asterisk для отправки факсов ====== **В этой статье описан алгоритм работы**. Пример реализации описан в [[http://wiki.miko.ru/astpanel:dialplan_miko_ajam | статье]] [[astpanel:ats:asterisk_v6|Обратно к основной инструкции...]] Для отправки факсов, на АТС должны присутствовать модули, позволяющие это сделать. Пример с использованием **spandsp**: CLI> module show like fax Module Description Use Count res_fax.so Generic FAX Applications 1 res_fax_spandsp.so Spandsp G.711 and T.38 FAX Technologies 0 2 modules loaded ===== Описание ===== В плане набора должен быть описан контекст **miko_ajam**.\\ В контексте miko_ajam определяется extension с номером **10000333**.\\ [miko_ajam] exten => 10000333,1,NoOP(Send fax Asterisk app) При необходимости, **“Панель телефонии Asterisk”** выполняет AMI команду [[:kb:asterisk:ami:originate|originate]].\\ **Параметры originate**\\ * channel - Local/10000333@miko_ajam * Application - NoCDR **Переменные канала** \\ * chan - канал пользователя в формате "Технология/Номер", который инициировал originate * faxfile - имя файла факса для отправки * faxcallerid - Номер телефона, на который отправляется факс ===== Пример dialplan ===== [miko_ajam] exten => 10000333,1,NoCDR() exten => 10000333,n,Noop(internal calling application: 10000333 1C_SendFax) ; получим параметры, переданные из 1С exten => 10000333,n,Set(_chan=${chan}) exten => 10000333,n,Set(_faxcallerid=${faxcallerid}) exten => 10000333,n,Set(_faxfile=${faxfile}) ; звонок в контекст отправки факса exten => 10000333,n,Dial(LOCAL/${CALLERID(num)}@miko_ajam_fax_tx,,g) exten => 10000333,n,Hangup [miko_ajam_fax_tx] exten => _X!,1,WaitForSilence(500,1,15)) exten => _X!,n,Answer ; ${ASTSPOOLDIR} - параметр из /etc/asterisk/asterisk.conf exten => _X!,n,SendFAX(${ASTSPOOLDIR}/fax/${faxfile}.tif) ; в userfield сохраним информацию о вызванном приложении exten => _X!,n,Set(CDR(userfield)=SendFAX) exten => _X!,n,Hangup exten => h,1,GotoIf($["${FAXSTATUS}" = "SUCCESS"]?h,success:h,failed) ; сообщим 1С о неудаче exten => h,n(failed),UserEvent(SendFaxStatusFail,chan1c: ${chan},CallerID: ${faxcallerid}) exten => h,n,Hangup ; сообщим 1С об успешности операции exten => h,n(success),UserEvent(SendFaxStatusOk,chan1c: ${chan},CallerID: ${faxcallerid}) ; сохраним имя файла в поле recordingfile exten => h,n,Set(CDR(recordingfile)=${faxfile}.tif) exten => h,n,Hangup В текущем примере файл должен находиться в директории **${ASTSPOOLDIR}/fax/${faxfile}.tif**. \\ Перед вызовом приложения **10000333** 1C отправляет файл на АТС средствами [[http://wiki.miko.ru/doc:1cajam:astcastomize_v6#nastrojka_papki_uploads|res_http_post]] или используя ресурс для **upload**. В качестве ресурса для загрузки файла может служить php скрипт: /dev/null 2>&1'); }else{ echo "Fail copy file!"; } if(is_file($tif_filename)){ echo "
File $name upload success.
"; }else{ echo "
File $name upload fail.
"; } }elseif($filetype=="tif"){ $tif_filename = ''.$faxdir.$name; if (move_uploaded_file($_FILES['file']['tmp_name'], $tif_filename)){ echo "
File $name upload success.
"; }else{ echo ("
File $name fail. $tif_filename
"); } }else{ echo '
Upload failed. Only PDF format!
'; } }else{ echo '
Upload failed. File not found!
'; } ?>
Для конвертации PDF to TIFF используется приложение Ghostscript Если для загрузки файла используется php или прочий скрипт, путь к нему следует указать в приложении **10000111**, в пврвметре **${FaxSendUrl}**. ==== Проверка работы скрипта ==== Допустим скрипт опубликован как ресурс "**/admin/1c/upload/index.php**" shell>curl -F 'file=@fax.tif' 'http:///admin/1c/upload/index.php' shell>curl -F "file=@fax.pdf" 'http:///admin/1c/upload/index.php' ==== Проверка отправки факса ==== #!/bin/sh # скрипт должен лежать в каталоге dir_script='/tmp/send_fax'; astspooldir='/var/spool/asterisk'; # файл должен лежать в каталоге $dir_script file_fax_name='send_fax_img'; ext_file='.tif'; # call_text="Channel: Local/20190@from-internal Context: miko_ajam Extension: 10000333 MaxRetries: 2 RetryTime: 600 WaitTime: 25 Callerid: Alexey<104> Set: faxfile=$file_fax_name"; echo "$call_text" > /tmp/file.call; cp "$dir_script/$file_fax_name$ext_file" "$astspooldir/fax/$file_fax_name$ext_file" mv '/tmp/file.call' '$astspooldir/outgoing/'; asterisk -rvvv; Каналом:\\ * Local/20190@from-internal определяется АТС - приемник факса, вряд ли выйдет отправить факс на свою же АТС. [[astpanel:ats:asterisk_v6|Обратно к основной инструкции...]]