LubuntuでWinModemを使用したFAX送信に引き続き、ひかり電話なのでAsteriskを用いたFAX送受信にTry。これができればWinModemじゃなくても今後もFAXが使用できるから。
(2017/8/5 注)間違え、勘違いがあり修正しています。
結果使用できた
FAX受信したらメールで通知も、FAX送信も
でも、WindowsクライアントからのFAX送信ができなかった……
HylafaxクライアントソフトをWindows10に入れることができなかったので。
(2017/8/5 注)後日試してみたらできました。
http://sourceforge.net/projects/wphf-reloaded/
https://sourceforge.net/projects/jhylafax/?source=recommended
どちらも大丈夫でした。
・ファックスを送るとき
sendfax -n -d 0312345678 fax.ps
(送信票無しで、03-1234-5678へfax.psファイルを送る場合)
実施した手順は以下。
①必要なファイルのインストール
・Asterisk
・iaxmodem
・hylafax-server
sudo apt-get install asterisk iaxmodem hylafax-server
②Asteriskの設定
元のファイルは.orgとかつけてバックアップしておきました。
・/etc/asterisk/asterisk.conf
languageprefix = yes
runuser = asterisk
rungroup = asterisk
defaultlanguage = ja
を有効にしました。
・/etc/asterisk/sip.conf
[general]
allowguest=no
allowoverlap=no
context=default
maxexpirey=3600
defaultexpirey=3600
port=5060
bindaddr=0.0.0.0
srvlookup=yes
language=ja
disallow=all
allow=ulaw
faxdetect=yes
;HIKARI ROUTER PR-400MI
pr-400mi=192.168.1.1
register => 7:password:0007@pr-400mi/400
[201]
type=friend
secret=pass
canreinvite=no
host=dynamic
context=default
mailbox=999
[202]
type=friend
secret=pass
canreinvite=no
host=dynamic
context=default
mailbox=999
[pr-400mi]
type=friend
secret=password
username=0007
fromuser=7
host=192.168.1.1
fromdomain=192.168.1.1
context=default
insecure=invite
canreinvite=no
disallow=all
allow=ulaw
faxdetect=yes
パスワードの位置でちょっと悩みました。
②iaxmodemの設定
うまく起動しなくて、ktgohanさんのWEB記事を参考にして
init.dを書き換えました。
・/etc/init.d/iaxmodem
#! /bin/sh
#
### BEGIN INIT INFO
# Provides: iaxmodem
# Required-Start: $syslog $remote_fs $network
# Required-Stop: $syslog $remote_fs $network
# Should-Start: asterisk
# Should-Stop: asterisk
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Software modem with IAX2 connectivity
# Description: Use this software modem with Asterisk or another
# IPBX with IAX2 connectivity to send and receive
# faxes over VoIP.
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/iaxmodem
DAEMON_OPTS=ttyIAX
NAME=iaxmodem
DESC=iaxmodem
test -x $DAEMON || exit 0
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --background --make-pidfile --pidfile /var/run/$NAME.pid \
--exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/$NAME.pid \
--exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC: "
if [ -e /var/run/$NAME.pid ]; then
kill -HUP $(cat /var/run/$NAME.pid)
echo "$NAME."
else
echo "$NAME not running!"
exit 1
fi
;;
restart|force-reload)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --oknodo --pidfile \
/var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
sleep 1
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --background --make-pidfile \
--pidfile /var/run/$NAME.pid --exec $DAEMON \
-- $DAEMON_OPTS
echo "$NAME."
;;
status)
if [ -s /var/run/$NAME.pid ]; then
RUNNING=$(cat /var/run/$NAME.pid)
if [ -d /proc/$RUNNING ]; then
if [ $(readlink /proc/$RUNNING/exe) = $DAEMON ]; then
echo "$NAME is running."
exit 0
fi
fi
# No such PID, or executables don't match
echo "$NAME is not running, but pidfile existed."
rm /var/run/$NAME.pid
exit 1
else
rm -f /var/run/$NAME.pid
echo "$NAME not running."
exit 1
fi
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|reload|force-reload|status}" >&2
exit 1
;;
esac
exit 0
これって、/dev/ttyIAXを見るように設定している……のかな。
・/etc/asterisk/iax.conf
ここはktgohanさんのWEB記事そのままのものを入れました。
[general]
bindport=4569
iaxcompat=yes
language=ja
bandwidth=medium
disallow=all
allow=ulaw
allow=alaw
allow=gsm
forcejitterbuffer=no
jitterbuffer=no
;dropcount=2
;maxjitterbuffer=500
;maxexcessbuffer=80
;minexcessbuffer=10
;jittershrinkrate=1
;tos=lowdelay
;mailboxdetail=yes
[iaxmodem]
type=friend
username=iaxmodem
secret=password
host=dynamic
disallow=all
allow=ulaw
allow=alaw
allow=gsm
requirecalltoken=no
context=fax-out
ignoresdpversion=yes
・/etc/iaxmodem/ttyIAX
これは、参考にしたもののcidnameとcidnumberって要らないのかなと思うので削除。
device /dev/ttyIAX
owner uucp:uucp
mode 660
port 4570
refresh 300
server 127.0.0.1
peername iaxmodem
secret password
codec ulaw
で、iaxmodemを再起動
sudo service iaxmodem restart
③Hylafax の設定
faxsetupを実行したと思ったんだけど、ここらへんだったかなぁ……
・/etc/hylafax/config
国際電話はかけないので、InternationPrefixは適当……
LogFacility: daemon
CountryCode: 81
AreaCode: 3
LongDistancePrefix: 0
InternationalPrefix: 0036
DialStringRules: etc/dialrules
ServerTracing: 1
・/etc/hylafax/config.ttyIAX
確か、ファイルが無いので、どこかのweb参考に作ったはず。
FAXNumberは自分とこの番号を設定。
CountryCode: 81
AreaCode: 3
FAXNumber: +81.3.xxxx.xxxx
LongDistancePrefix: 0
InternationalPrefix: 0036
DialStringRules: etc/dialrules
ServerTracing: 0xFFF
SessionTracing: 0xFFF
RecvFileMode: 0600
LogFileMode: 0600
DeviceMode: 0600
RingsBeforeAnswer: 1
SpeakerVolume: off
GettyArgs: "-h %l dx_%s"
LocalIdentifier: "lubuntu server"
TagLineFont: etc/lutRS18.pcf
TagLineFormat: "From %%l|%F %T|Page %%P of %%T"
MaxRecvPages: 200
ModemType: Class1 # use this to supply a hint
Class1AdaptRecvCmd: AT+FAR=1
Class1TMConnectDelay: 400 # counteract quick CONNECT response
ModemResetCmds: AT+VCID=1 # enables CallID display
PagerTTYParity: none
CallIDPattern: "NMBR="
CallIDPattern: "NAME="
CallIDPattern: "ANID="
CallIDPattern: "NDID="
・/etc/hylafax/sendfax.conf
このファイルも無かったから作ったような……
MaxTries: 2
MaxDials: 2
・/etc/hylafax/hfaxd.conf
ここもktgohanさんのWEB記事をみて修正っと。
#JobFmt: "%-3j %3i %1a %6.6o %-12.12e %5P %5D %7z %.25s"
JobFmt: "%-5j %1a %-12.12e %5P %5D %Y %.27s"
TimeZone: local
④Asteriskの追加設定
今の設定だと、留守電になってるんだけど、どうにかしたいなぁ。
留守電入ったらメールするとか。extenの文法勉強してみなきゃなぁ。
・/etc/asterisk/extensions.conf
修正……
[general]
autofallthrough=yes
writeprotect=no
[globals]
MYNUMBER=03xxxxxxxx <= ってここはじぶんちの番号で
SPEAKINGCLOCK=917
[default]
exten => 400,1,Answer()
exten => 400,n,Ringing
exten => 400,n,Wait(1)
exten => 400,n,Playback(fax)
exten => 400,n,Ringing
exten => 400,n,WaitExten(10)
exten => 400,n,Dial(SIP/201&SIP/202,30)
exten => 400,n,GotoIf($["${DIALSTATUS}"="BUSY"]?busy)
exten => 400,n,GotoIf($["${DIALSTATUS}"="NOANSWER"]?unavail)
exten => 400,n,GotoIf($["${DIALSTATUS}"="CONGESTION"]?unavail)
exten => 400,n,GotoIf($["${DIALSTATUS}"="CHANUVAIL"]?unavail)
exten => 400,n,Voicemail(999)
exten => 400,n,Hangup
;;== sip client 201 & 202 un avail
exten => 400,n(unavail),Voicemail(999)
exten => 400,n,Hangup
;;== busy tone
exten => 400,n(busy),busy()
;;== fax-in
exten => fax,1,Dial(IAX2/iaxmodem)
exten => fax,n,Hangup
;
;**** 内線999でvoicemailの再生や削除
;
exten => 999,1,Goto(vm1,1)
exten => vm1,1,Answer()
exten => vm1,n,VoiceMailMain(999,s) ; sオプション : 再生時パスワード要求なし
exten => vm1,n,Hangup()
;
;**** 音声再生テスト : 内線900をコールすると話した内容が、追っかけ再生される
;
exten => 900,1,Answer()
exten => 900,n,Wait(1)
exten => 900,n,Playback(demo-echotest)
exten => 900,n,Playback(beep)
exten => 900,n,Echo
exten => 900,n,Playback(hello-world)
exten => 900,n,Hangup()
; Speaking Clock
exten => ${SPEAKINGCLOCK},1,Answer()
exten => ${SPEAKINGCLOCK},n,Wait(1)
exten => ${SPEAKINGCLOCK},n,Set(FutureTime=$[${EPOCH} + 5])
exten => ${SPEAKINGCLOCK},n,SayUnixTime(${FutureTime},Japan,YbdAPHM)
exten => ${SPEAKINGCLOCK},n,Playback(jp-desu)
exten => ${SPEAKINGCLOCK},n,playback(beep)
exten => ${SPEAKINGCLOCK},n,Hangup
;
;**** ひかり電話からの発信
; +++ 10 桁, フリーダイヤルの 11 桁の形式が一致したら発信OK
; +++ 00 発信 (国際電話発信) 不可
exten => _0ZZX.,1,Set(CALLERID(num)=${MYNUMBER})
exten => _0ZZX.,n,Set(CALLERID(name)=${MYNUMBER})
exten => _0ZZX.,n,Dial(SIP/${EXTEN}@pr-400mi)
exten => _0ZZX.,n,Hangup()
;
; +++ 携帯電話 (スマホ含む) の 11 桁の形式が一致したら発信OK
exten => _0N0X.,1,Set(CALLERID(num)=${MYNUMBER})
exten => _0N0X.,n,Set(CALLERID(name)=${MYNUMBER})
exten => _0N0X.,n,Dial(SIP/${EXTEN}@pr-400mi)
exten => _0N0X.,n,Hangup()
[fax-out]
exten => _X.,1,Set(CALLERID(num)=${MYNUMBER})
exten => _X.,n,Set(CALLERID(name)=${MYNUMBER})
exten => _X.,n,Dial(SIP/${EXTEN}@pr-400mi,300)
exten => _X.,n,Hangup
exten => _X,1,Dial(SIP/${EXTEN}@pr-400mi,30)
exten => _X,n,Hangup
・/etc/hylafax/FaxDispatch
FAX届いたらメールする設定。
SENDTO=aaaa@hoehoe.ne.jp
FROMADDR=aaaa@hoehoe.ne.jp
FILETYPE=pdf;
あとは、hylafaxとasteriskのserviceをrestartしてあげれば使えた……はずw