OpenWRT + asterisk + Fusion IP-Phone SMART で作る?? FAX 送受信環境(作業中)
2014/12/22時点の覚書。OpenWRTにopkgでasteriskをインストールしてファクスの送受信環境を作るという誰得なテストです。
なぜこんなことを試しているのか。
asterisk + fax の環境構築方法を調べると Digium の Fax for Asterisk を使う事例が多く見つかるわけだが、契約中のDTIのVPS環境ではNICのデバイス名が違うために Fax for Asterisk が有効化できませんでした。
なにか他に方法はないものかと調べているときに、手元の OpenWRT のパッケージ一覧を見ると asterisk とか asterisk11-res-fax のような文字列が目に止まったので「もしかして OpenWRT で出来るのか?」と思って試行錯誤してます。
ファクスの送信は一応行えるようになった。
/var/spool/asterisk/faxout/ に dw-faxout.tif を配置したのち、以下のようにすれば送信は一応できる。少なくともPamFax宛の送信はできた。
あとは、メール添付の投げ込みの仕組みを作ればよいのだけど、実際に運用するには向かない気がしてきた。なにしろ、ストレージやメモリが少ない。ま、実運用に不向きなら、今回の内容を VPS 環境で作り直すだけだが。
root@OpenWrt:~# asterisk -vvvcr Asterisk 11.12.0, Copyright (C) 1999 - 2013 Digium, Inc. and others. Created by Mark Spencer <markster@digium.com> Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. This is free software, with components licensed under the GNU General Public License version 2 and other licenses; you are welcome to redistribute it under certain conditions. Type 'core show license' for details. ========================================================================= Connected to Asterisk 11.12.0 currently running on OpenWrt (pid = 17840) Core debug is still 3. OpenWrt*CLI> channel originate SIP/81[発信先番号]@fusion-smart extension send@faxout (以下省略)
ファクスの受信は上手くいかない。。。
送信が行えるようになったので、こんどはこれを自分宛に送るテストをしているが、今の所は成功せず。
"FAX CNG detected but no fax extension" という NOTICE が出ているので、設定が微妙に間違っているのだろう。。。
see also
http://d.hatena.ne.jp/pirosap/20130707/1373209697
https://yasurok2.wordpress.com/2014/10/30/sending-email-on-openwrt/
パッケージ選択
asterisk11 asterisk11-app-originate asterisk11-app-system asterisk11-func-global asterisk11-res-clioriginate asterisk11-res-fax asterisk11-res-fax-spandsp asterisk11-res-musiconhold asterisk11-res-timing-pthread coreutils-base64 ssmtp imagemagick-tools imagemagick-tiff
本当は添付ファイルを処理するなら msmtp のほうがよいと思うんだけど、
ssmtp 前提で作ってしまった。。。
imagemagick* は、tiff->PDF変換を想定して入れているけど、現時点では未使用。
設定ファイルなど
/etc/asterisk/extensions.conf
[globals] MYNUMBER1=[Fusionの番号] [default] ;From fusion exten => ${MYNUMBER1},1,Goto(faxin,receive,1) exten => _0.,1,Dial(SIP/fusion-smart/${EXTEN:1}) [faxin] exten => receive,1,NoOp(**** SETTING FAXOPT ****) exten => receive,n,Set(FAXOPT(ecm)=yes) exten => receive,n,Set(FAXOPT(headerinfo)=[適当な文字列]) exten => receive,n,Set(FAXOPT(localstationid)=+81-50-[Fusionの番号]) exten => receive,n,Set(FAXOPT(maxrate)=14400) exten => receive,n,Set(FAXOPT(minrate)=4800) exten => receive,n,Set(FAXFILE=${EPOCH}.tif) exten => receive,n,NoOp(**** RECEIVING FAX : ${FAXFILE} ****) exten => receive,n,ReceiveFAX(/var/spool/asterisk/faxin/${FAXFILE}) exten => h,1,System(/usr/local/bin/sendfax.sh ${FAXFILE}) exten => h,n,Hangup [faxout] exten => send,1,NoOp(**** SENDING FAX ****) exten => send,n,Wait(6) exten => send,n,Set(GLOBAL(FAXCOUNT)=$[ ${GLOBAL(FAXCOUNT)} + 1 ]) exten => send,n,Set(FAXCOUNT=${GLOBAL(FAXCOUNT)}) exten => send,n,NoOp(**** SETTING FAXOPT ****) exten => send,n,Set(FAXOPT(ecm)=yes) exten => send,n,Set(FAXOPT(headerinfo)=[適当な文字列]) exten => send,n,Set(FAXOPT(localstationid)=+81-50-[Fusionの番号]) exten => send,n,Set(FAXOPT(maxrate)=14400) exten => send,n,Set(FAXOPT(minrate)=4800) exten => send,n,Set(FAXFILE=dw-faxout.tif) ; Send the fax exten => send,n,NoOp(**** SENDING FAX : ${FAXFILE} ****) exten => send,n,SendFAX(/var/spool/asterisk/faxout/${FAXFILE},d) ; Hangup! Print FAXOPTs exten => h,1,NoOp(FAXOPT(ecm) : ${FAXOPT(ecm)}) exten => h,n,NoOp(FAXOPT(filename) : ${FAXOPT(filename)}) exten => h,n,NoOp(FAXOPT(headerinfo) : ${FAXOPT(headerinfo)}) exten => h,n,NoOp(FAXOPT(localstationid) : ${FAXOPT(localstationid)}) exten => h,n,NoOp(FAXOPT(maxrate) : ${FAXOPT(maxrate)}) exten => h,n,NoOp(FAXOPT(minrate) : ${FAXOPT(minrate)}) exten => h,n,NoOp(FAXOPT(pages) : ${FAXOPT(pages)}) exten => h,n,NoOp(FAXOPT(rate) : ${FAXOPT(rate)}) exten => h,n,NoOp(FAXOPT(remotestationid) : ${FAXOPT(remotestationid)}) exten => h,n,NoOp(FAXOPT(resolution) : ${FAXOPT(resolution)}) exten => h,n,NoOp(FAXOPT(status) : ${FAXOPT(status)}) exten => h,n,NoOp(FAXOPT(statusstr) : ${FAXOPT(statusstr)}) exten => h,n,NoOp(FAXOPT(error) : ${FAXOPT(error)})
[general] register => [fusionの番号]:[fusionのパスワード]@smart.0038.net maxexpirey=3600 defaultexpirey=3600 context=default port=5060 bindaddr=0.0.0.0 srvlookup=yes allowguest=no disallow=all allow=ulaw allow=alaw allow=gsm language=en faxdetect=yes [fusion-smart] type=friend defaultuser=[fusionの番号] fromuser=[fusionの番号] secret=[fusionのパスワード] host=smart.0038.net fromdomain=smart.0038.net context=default insecure=port,invite canreinvite=no disallow=all allow=ulaw allow=alaw dtmfmode=inband nat=never
/etc/ssmtp/ssmtp.conf
# Gmail に送信するための設定を書いています。 root=[gmailのアカウント] mailhub=smtp.gmail.com:587 rewriteDomain=gmail.com hostname=openwrt UseTLS=YES UseSTARTTLS=Yes AuthUser=[gmailのアカウント] AUthPass=[gmailのパスワード] FromLineOverride=yes
/usr/local/bin/sendfax.sh
#!/bin/sh # シェルスクリプトで添付ファイルを送信する強引な処理です。 MAILFROM=[gmailのアカウント] MAILTO=[gmailのアカウント] FAXFILE=$1 FILENAME="/var/spool/asterisk/faxin/$FAXFILE" CMD_SENDMAIL="ssmtp -t" #CMD_SENDMAIL=cat DATE=$( date +"%Y/%m/%d" -r "${FILENAME}" ) BOUNDARY="==============$( date +"%Y%m%d%H%M%S" )" ( ######################################## # mail header # cat<<EOF From: ${MAILFROM} To:${MAILTO} Subject: fax received MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="${BOUNDARY}" --${BOUNDARY} Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit EOF ######################################## # mail body # cat<<EOF received fax EOF ######################################## # mime header for attached file # FILENAME_ATTACHED=FAXFILE cat<<EOF --${BOUNDARY} Content-Type: application/octet-stream; name="$FILENAME_ATTACHED" Content-Disposition: attachment; filename="$FILENAME_ATTACHED" Content-Transfer-Encoding: base64 EOF ######################################## # insert faxfile with base64 encoding # cat $FILENAME | base64 ######################################## # close multipart # cat<<EOF --${BOUNDARY}-- EOF ) | $CMD_SENDMAIL