#Asteriskを使いocnドットフォン(050)でFAX送受信
##はじめに
RaspberryPi 4のAsteriskでOCNドットフォンのFAX送受信環境を作りました。
色々ハマったので手順を公開します。
Asteriskはgit経由で GIT-master-134d2e729dをインストールして使ってます。
##spandspのインストール
FAX送受信にはspandspが必要。
インストールされていない場合はソースからインストール
wget https://www.soft-switch.org/downloads/spandsp/snapshots/spandsp-20180108.tar.gz
tar xvzf spandsp-20180108.tar.gz
cd spandsp-0.0.6
sudo make all install
##Asteriskの再ビルド
res_fax_spandspモジュールをビルドするため、asteriskを再ビルド
make clean
./configure
make menuselect
#Resource Modulesにあるres_fax_spandspを選択
make
sudo make install
##FAXをPDFに変換してemail送信
faxmail
https://github.com/kkajita/faxmail
をダウンロードしemail送信環境に合わせて編集
/usr/local/binにコピー
PDF変換がImageMagickのPolicyで禁止されているので許可するよう設定変更
vi /etc/ImageMagick-6/policy.xml
下記行をコメントアウト
<!-- policy domain="coder" rights="none" pattern="PDF" -->
##sip.conf extensions.confの設定
FAXを送受信できるよう/etc/asterisk/sip.conf extensions.confを編集
sip.confは下記追加
[general] or [ocnドットフォンの設定]
faxdetect=yes
extensions.confは
[OCNドットフォン]
exten => 電話番号,1,Answer() ;fax信号を受信するためAnswer
exten => 電話番号,n,Wait(3) ;FAX信号の受信まち
;fax
exten => fax,1,NoOp(Faxin-${EXTEN}) ;FAX信号検知
exten => fax,n,Gosub(macro-recfax,receive,1)
exten => fax,n,Hangup()
[send-fax]
exten => send,1,NoOp(**** SENDING FAX ****)
same => n,Set(FAXOPT(maxrate)=9600)
same => n,Set(FAXOPT(minrate)=7200)
same => n,Set(FAXOPT(modem)=v29,v27) ;050はビットレートが低いのかfaxのレートを下げないと失敗しがち
same => n,SendFAX(\${FAXFILE},d)
same => n,Hangup()
; Hangup.
exten => h,1,NoOp(Hangup send-fax)
same => n,NoOp(\${FAXSTATUS})
same => n,NoOp(\${FAXERROR})
[macro-recfax]
exten => receive,1,NoOp(Faxin-\${EXTEN})
same => n,Set(FAXOPT(maxrate)=4800)
same => n,Set(FAXOPT(minrate)=2400) ;050はビットレートが低いのかfaxのレートを下げないと失敗しがち
same => n,Set(FAXOPT(modem)=v27)
same => n,Set(TIFF=\${EXTEN}-\${UNIQUEID}.tif)
same => n,Set(FAXFILE=/share/fax/\${TIFF})
;same => n,ReceiveFax(/share/fax/\${TIFF},d)
same => n,ReceiveFax(\${FAXFILE},d)
same => n,Hangup()
; Hangup.
exten => h,1,NoOp(Hangup rec-fax)
same => n,NoOp(FAX Status: \${FAXSTATUS})
same => n,NoOp(FAXOPT(ecm): \${FAXOPT(ecm)})
same => n,NoOp(FAXOPT(filename): \${FAXOPT(filename)})
same => n,NoOp(FAXOPT(headerinfo): \${FAXOPT(headerinfo)})
same => n,NoOp(FAXOPT(localstationid): \${FAXOPT(localstationid)})
same => n,NoOp(FAXOPT(maxrate): \${FAXOPT(maxrate)})
same => n,NoOp(FAXOPT(minrate): \${FAXOPT(minrate)})
same => n,NoOp(FAXOPT(pages): \${FAXOPT(pages)})
same => n,NoOp(FAXOPT(rate): \${FAXOPT(rate)})
same => n,NoOp(FAXOPT(remotestationid): \${FAXOPT(remotestationid)})
same => n,NoOp(FAXOPT(resolution): \${FAXOPT(resolution)})
same => n,NoOp(FAXOPT(status): \${FAXOPT(status)})
same => n,NoOp(FAXOPT(statusstr): \${FAXOPT(statusstr)})
same => n,NoOp(FAXOPT(error): \${FAXOPT(error)})
same => n,GotoIf($["\${FAXSTATUS}" != "SUCCESS"]?failed)
same => n,System(/usr/local/bin/sendmail.py \${TOADDR} -f "\${FROMADDR}" -a \${FAXFILE} -s "Fax Received from \${CALLERID(num)}")
same => n,Return
same => n(failed),System(/usr/local/bin/sendmail.py "\${TOADDR}" -f "\${FROMADDR}" -a \${FAXFILE} -s "[FAILED] Fax Received from \${CALLERID(num)}" -b "STATUS: \${FAXSTATUS}\nERROR: \${FAXERROR}\n\n")