ひかり電話では、ISDNの時のように、回線1本で電話番号を2つとることができるマイナンバーというオプションがあります。
カードではありません。
企業では、電話とFAXを番号分けて利用していることが多いのであれを自宅+Asteriskで実現してみます。
後、家にはfaxが複合機しかありませんし、通常のアナログ電話機もありません。
回線は1本なので、FAX受信中に通話はできませんし、着信もできません。ですが、個人宅なので全く問題ありません。
FAX複合機は、Brother製MFC-L3770CDW。
SIP自体は実装されていますが、NTTのもつNGN網だけでやり取りが可能なデータコネクトのみがサポートされていて
ひかり電話には接続できません。
仕方がないので、GrandStream社製のHT801というVoIPアダプタを挟んで変換します。
Amazonでは7000円ぐらいで売られていて高い。中古を探すも割とニッチな商品のようで見つからない。
見つかっても高い。
結局、Aliexpressで中古品は怖かったけど探して購入しました。2101円でした。
1/3ぐらいの価格で入手でき、ちゃんと動いたので良かった。
HT801はUSBで動く優れものです。
LinkSysのものも5V2AなのでUSBでも動かせそうですが、本体側の端子が〇型です。
届いたHT801を初期化して、LINEを複合機へ、LANはSWへつなぎ、DHCPでアドレスをとってweb経由で設定。
IPアドレスを特定するために、電話機側から***をダイヤルした後、02とするとIPアドレスを英語でしゃべります。
それをメモしてもいいのですが、DHCPの設定でmacアドレスによる固定IP配布にしてもいいし、switchへログインして
arpをみるのも特定する方法の一つかと。
asteriskはバージョン13を使用、NTTへ直接接続しているため、HGW向けのパッチなどはあてることなく使えました。
HT801と外線発信向けのsip.conf
register => 048xxxxxxx:@ntt-east.ne.jp/048xxxxxxx
;NTTのひかり電話網へ接続する設定
[ntt]
type=peer
host=118.177.125.1
nat=never
;fromdomain=118.177.125.114
canreinvite=no
caninvite=no
session-expires=300
defaultexpiry=3600
;dtmfmode=rfc2833
dtmfmode=inband
context=pstnin
qualify=yes
;HT801との接続をした設定
[902]
type=friend
username=902
secret=xxxxxxxx
canreinvite=no
host=dynamic
dtmfmode=rfc2833
context=pstnfaxout
qualify=yes
extentions.conf
faxに関連する部分のみ抜粋
MAINNUMBER=048xxxxxxx
SUBNUMBER=048yyyyyyy
[pstnfaxout]
exten => _0.,1,Set(CALLERID(num)=${SUBNUMBER})
exten => _0.,n,Set(CALLERID(name)=${SUBNUMBER})
exten => _0.,n,SIPAddHeader(P-Preferred-Identity:<sip:${SUBNUMBER}@ntt-east.ne.jp>)
exten => _0.,n,Dial(SIP/${EXTEN}@ntt)
SIPAddHeaderの、P-Preferred-Identityを追記して、SUBNUMBERを指定すると発信することができました。
このヘッダは、ひかり電話の仕様書に書いてあったり、voip-info.jpのサイトの最下部にも書いてあったのですが、
PBXに知見が全くないため設定を見つけるのに苦労しました。
着信が来た時の振り分け処理
[pstnin]
; 発信先電話番号を取得
exten => ${MAINNUMBER},1,Set(TO_DIAL=${SIP_HEADER(TO):5})
exten => ${MAINNUMBER},2,Set(TO_DIAL=${CUT(TO_DIAL,@,1)})
; 振り分け処理
exten => ${MAINNUMBER},3,GotoIf($[${TO_DIAL} = ${MAINNUMBER}]?dial1)
exten => ${MAINNUMBER},4,GotoIf($[${TO_DIAL} = ${SUBNUMBER}]?dial2)
;
; メイン回線の場合、通話録音をセット
exten => ${MAINNUMBER},5(dial1),Set(CALLFILENAME=${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-IN-${EXTEN})
exten => ${MAINNUMBER},6(dial1),Monitor(wav,${CALLFILENAME},m)
; 901着信
exten => ${MAINNUMBER},7(dial1),Dial(SIP/901,25)
; 留守電応答
exten => ${MAINNUMBER},8(dial1),Wait(1)
exten => ${MAINNUMBER},9(dial1),Voicemail(901)
exten => ${MAINNUMBER},n,Hangup()
; サブ回線の場合、FAX受信
exten => ${MAINNUMBER},n(dial2),Dial(SIP/902,25)
exten => ${MAINNUMBER},n,Hangup()
sip set debug on
をいれて着信番号をテストした結果、SIP_HEADERの5に着信番号が載っていたのでそれをもとにfaxである902に直接転送。
動作テストでは、いちいち複合機の電話番号を入れるのが面倒なので、内線番号903を作ってAGEPhoneアプリから発信して
確認していました。
外線は、この設定で3年は使えているので仕様変更が入らないことを祈ります。