Asterisk 1.6でFax送信に成功したので設定データを公開

2020年4月7日

テクノロジー

コストを抑えるために、IT技術を日々高めている、ユゲタです。 「FAX送信」とかけまして、 「男の人が少し強めの女性からもらったバレンタインチョコ」と、ときます。 そのココロは・・・ 必ず受け取らなければいけないでしょう。

Faxの必要性

とあるリアル店舗に対して、FAXを送信するというシステム構築を頼まれて、これまで扱ったことのなかったFaxについて、徹底的に調査してみました。 基本的には、手元に電話回線とFAX機器があれば、店舗へのFAX番号にデータを送りつければいいだけなのですが、インターネットサーバーからそうしたデータを送る事になるととたんに難しくなる。 ネットでFaxを検索すると、かならず「eFax」というサービスがGoogle広告に引っかかりますが、このサービスを調べてみると、メールに添付したpdfや画像などを任意のFAX番号に送信することができるようだ。 また、KDDIが提供している、Twillioというサービスでは、APIが用意されていて便利にシステム連携ができるということを見かけた。 他にもインターネットFAXサービスというのが多数あり、どれも似たようなことはできる感じはあるのだが、当たり前のようにだいたい月額費が1500円ほどかかる。 せっかく事務所にAsteriskサーバーが設置されていて、VOIP環境が整っているので、それを使ってFAXの回線費(電話代)だけで行えないかと1週間ほど設定をしてみて、ようやくテスト送信することができたので、とりあえずFax送信の枚数が少ないのであれば、これで運用しようと行き追加のである。

Asteriskの設定ファイル

とりあえず、備忘録も兼ねて設定ファイルを下記に掲載しておきます。 下記設定にてひかり電話のルータでの設定は済ませてある状態としています。 [general] maxexpiry=3600 defaultexpiry=3600 context=default bindport=5060 bindaddr=0.0.0.0 srvlookup=yes allowguest=no disallow=all allow=ulaw allow=alaw allow=gsm language=ja sendrpid=pai qualify=2000 nat=force_rport,comedia localnet=192.168.1.0/24 hikarihgw=%ひかりルーターのIP tcpenable=yes transport=udp,tcp register => 4:pass:0004@mynt/200 [mynt] type=friend secret=pass username=0004 defaultuser=0004 fromuser=4 host=%ひかり電話ルータのローカルIP fromdomain=%ひかり電話ルータのローカルIP context=default insecure=invite,port dtmfmode=inband canreinvite=no disallow=all allowsubscribe=no allow=ulaw callgroup=1 picupgroup=1 faxdetect=yes [201]; 内線201番の設定 type=friend username=201 secret=pass canreinvite=no host=dynamic callgroup=1 pickupgroup=1 [202] type=friend username=202 secret=pass canreinvite=no host=dynamic callgroup=1 pickupgroup=1 [general] writeprotect=no priorityjumping=no [globals] MYNT=%会社電話 GROUP1=SIP/201&SIP/202 [default] exten => _20Z,1,NoOp(内線呼出) exten => _20Z,n,Dial(SIP/${EXTEN},60) exten => _20Z,n,Hangup exten => _0.,1,Set(CALLERID(num)=${MYNT}) exten => _0.,2,Set(CALLERID(name)=${MYNT}) exten => _0.,3,GotoIf($[${EXTEN:0:2} = 00]?international) exten => _0.,n,Dial(SIP/${EXTEN}@mynt) exten => _0.,n(international),Hangup() [incoming] exten => 200,1,NoOp(内線代表着信) exten => 200,n,Dial(${GROUP1},60) exten => 200,n,Hangup [send-fax] exten => send,1,NoOp(**** SENDING FAX ****) same => n,SendFAX(${FAXFILE},d) same => n,Wait(30) same => n,Hangup()

Fax送信のポイントは画像変換にあり

Faxを送信する画像データを事前に作成しておきます。 今回はPDFファイルをtif画像に変換して、それを送信します。 $ gs -sDEVICE=tiffg3 -r204x196 -dNOPAUSE -dSAFER -dMaxStripSize=0 \ -sOutputFile=~/sample.tif PERSIZE=a4 ~/sample.pdf > GPL Ghostscript 9.06 (2012-08-08) > Copyright (C) 2012 Artifex Software, Inc. All rights reserved. > This software comes with NO WARRANTY: see the file PUBLIC for details. > Processing pages 1 through 1. > Page 1 GS>exit; 次にFaxを送信するコールファイルを作成します。 Channel: SIP/%送信先の電話番号@mynt CallerID: Asterisk MaxRetries: 0 RetryTime: 60 WaitTime: 60 Context: send-fax Extension: send Set: FAXFILE=~/sample.tif それを以下の階層にファイル移動をすると、自動的にFAX送信になります。 $ mv ~/fax.call /var/spool/asterisk/outgoing/ コールファイルは、/var/spool/asterisk/outgoing/に置くとすぐにfax送信処理が始まるので、必ず別フォルダで書き込んでから移動(またはコピー)するようにしましょう。 これで、無事にFax送信をすることが成功になりますが、画像変換で使ったGhostScriptコマンドが非常にややこしいツールだったので、ここの環境構築をしっかりしておく必要を感じました。 でも、これでAPIでも作成しておけば、インターネットFAXサービスがはじめられますね。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。