1
8

More than 3 years have passed since last update.

Asteriskを使いocnドットフォン(050)でFAX送受信

Last updated at Posted at 2021-02-20

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")
1
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
8