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!
';
}
?>
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|Обратно к основной инструкции...]]