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

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

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


astpanel:ats:asterisk:faxsend_v6

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
astpanel:ats:asterisk:faxsend_v6 [2013/11/26 09:58]
apor [Пример dialplan]
astpanel:ats:asterisk:faxsend_v6 [2018/06/08 09:19] (текущий)
apor
Строка 1: Строка 1:
 ====== 10000333. Настройка Asterisk для отправки факсов ====== ====== 10000333. Настройка Asterisk для отправки факсов ======
 +<note important>​**В этой статье описан алгоритм работы**. Пример реализации описан в [[http://​wiki.miko.ru/​astpanel:​dialplan_miko_ajam | статье]] </​note> ​
 +
 [[astpanel:​ats:​asterisk_v6|Обратно к основной инструкции...]] [[astpanel:​ats:​asterisk_v6|Обратно к основной инструкции...]]
  
Строка 25: Строка 27:
  
 ===== Пример dialplan ===== ===== Пример dialplan =====
-<​code ​1C>​[miko_ajam]+<​code>​[miko_ajam]
 exten => 10000333,​1,​NoCDR() exten => 10000333,​1,​NoCDR()
 exten => 10000333,​n,​Noop(internal calling application:​ 10000333 1C_SendFax) exten => 10000333,​n,​Noop(internal calling application:​ 10000333 1C_SendFax)
Строка 47: Строка 49:
 exten => h,​1,​GotoIf($["​${FAXSTATUS}"​ = "​SUCCESS"​]?​h,​success:​h,​failed) exten => h,​1,​GotoIf($["​${FAXSTATUS}"​ = "​SUCCESS"​]?​h,​success:​h,​failed)
 ; сообщим 1С о неудаче ; сообщим 1С о неудаче
-exten => h,​n(failed),​UserEvent(SendFaxStatusFail,​Channel: ${chan},​CallerID:​ ${faxcallerid})+exten => h,​n(failed),​UserEvent(SendFaxStatusFail,​chan1c: ${chan},​CallerID:​ ${faxcallerid})
 exten => h,n,Hangup exten => h,n,Hangup
 ; сообщим 1С об успешности операции ; сообщим 1С об успешности операции
-exten => h,​n(success),​UserEvent(SendFaxStatusOk,​Channel: ${chan},​CallerID:​ ${faxcallerid})+exten => h,​n(success),​UserEvent(SendFaxStatusOk,​chan1c: ${chan},​CallerID:​ ${faxcallerid})
 ; сохраним имя файла в поле recordingfile ; сохраним имя файла в поле recordingfile
 exten => h,​n,​Set(CDR(recordingfile)=${faxfile}.tif) exten => h,​n,​Set(CDR(recordingfile)=${faxfile}.tif)
 exten => h,n,Hangup exten => h,n,Hangup
 </​code>​ </​code>​
 +
 +В текущем примере файл должен находиться в директории **${ASTSPOOLDIR}/​fax/​${faxfile}.tif**. \\
 +Перед вызовом приложения **10000333** 1C отправляет файл на АТС средствами [[http://​wiki.miko.ru/​doc:​1cajam:​astcastomize_v6#​nastrojka_papki_uploads|res_http_post]] или используя ресурс для **upload**.
 +
 +В качестве ресурса для загрузки файла может служить php скрипт:​
 +
 +<code 1C>
 +<?php
 +$ASTSPOOLDIR = '/​var/​spool/​asterisk';​
 +$tmpdir = $ASTSPOOLDIR.'​fax/';​
 +$faxdir = $ASTSPOOLDIR."​fax/";​
 +
 +if(!is_dir($faxdir)) mkdir($faxdir);​
 + 
 +if (is_uploaded_file($_FILES['​file'​]['​tmp_name'​])) {
 + $filename = str_replace("​ ","​_",​$_FILES['​file'​]['​name'​]);​
 +
 + $name   = basename($filename);​
 + $filetype = strtolower(substr(strrchr($name,"​."​),​1) );
 +
 + if ($filetype=="​pdf"​) {
 + $tif_filename = $tmpdir.basename($name,'​.pdf'​).'​.tif';​
 + // move file to asterisk music-on-hold directory on media storage
 + $pdf_filename = $faxdir.$name;​
 +
 + if(move_uploaded_file($_FILES['​file'​]['​tmp_name'​],​ $pdf_filename)){
 + set_time_limit(900);​
 + $gs_path = exec('​which gs');
 + $res_str = exec($gs_path.'​ -q -dNOPAUSE -dBATCH -sDEVICE=tiffg4 -sPAPERSIZE=a4 -g1680x2285 -sOutputFile=\''​.escapeshellarg($tif_filename).'​\'​ \''​.escapeshellarg($pdf_filename).'​\'​ > /dev/null 2>&​1'​);​
 + }else{
 +   echo "Fail copy file!";​
 + }
 +  
 +  if(is_file($tif_filename)){
 +   echo "<​pre>​File $name upload success.</​pre>";​
 +  }else{
 +   echo "<​pre>​File $name upload fail.</​pre>";​
 +  }
 +    }elseif($filetype=="​tif"​){
 +        $tif_filename = ''​.$faxdir.$name;​
 +        if (move_uploaded_file($_FILES['​file'​]['​tmp_name'​],​ $tif_filename)){
 +            echo "<​pre>​File $name upload success.</​pre>";​
 +        }else{
 +            echo ("<​pre>​File $name fail. $tif_filename</​pre>"​);​
 +        }
 + }else{
 + echo '<​pre>​Upload failed. Only PDF format!</​pre>';​
 + }
 +}else{
 + echo '<​pre>​Upload failed. File not found!</​pre>';​
 +}
 +?>
 +</​code>​
 +
 +<note important>​Для конвертации PDF to TIFF используется приложение Ghostscript</​note>​
 +<note important>​Если для загрузки файла используется php или прочий скрипт,​ путь к нему следует указать в приложении **10000111**,​ в пврвметре **${FaxSendUrl}**.</​note>​
 +==== Проверка работы скрипта ====
 +Допустим скрипт опубликован как ресурс "​**/​admin/​1c/​upload/​index.php**"​
 +
 +<​code>​shell>​curl -F '​file=@fax.tif'​ '​http://<​IP_PBX>/​admin/​1c/​upload/​index.php'​
 +shell>​curl -F "​file=@fax.pdf"​ '​http://<​IP_PBX>/​admin/​1c/​upload/​index.php'</​code>​
 +
 +==== Проверка отправки факса ====
 +
 +<​code>#​!/​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;</​code>​
 +
 +Каналом:​\\
 +  * Local/​20190@from-internal
 +определяется АТС - приемник факса, вряд ли выйдет отправить факс на свою же АТС.
 +
 +[[astpanel:​ats:​asterisk_v6|Обратно к основной инструкции...]]
astpanel/ats/asterisk/faxsend_v6.1385459901.txt.gz · Последние изменения: 2014/11/14 22:32 (внешнее изменение)