Asteriskの設定

先ず、ひかり電話ルーターにSIPクライアントの情報を登録します。
ひかり電話ルーターに対してはAsteriskがSIPクライアントになります。

RTS300SEの設定画面

今回はひかり電話ルーターRTS300SEの内線番号3を使いました。
端末属性は「音声専用端末」にします。MACアドレスにはAsteriskが動いているサーバーのNICのそれを記入します。
ユーザーIDは一応任意ですが、今回は内線番号と同じ数字を登録。
パスワードは上の図ではアレですが、ランダムな英数字で短過ぎないものを登録します。

このひかり電話ルーターに接続するための設定をasteriskに追加します。
/usr/local/etc/asterisk/sip.confの[general]の下の方に以下の行を追加。

;HIKARI-denwa RT-S300SE register setting
register => 3:himitsuhimitsuhimitsu:3@192.168.0.128/s

上の例の192.168.0.128の部分はRT-S300SEのIPアドレス、スラッシュを挟んでその後の5001は次に紹介するスマートフォンの内線番号になります。(末尾の/5001は今だけ取り敢えずの設定です。)
これでひかり電話の番号に電話がかかってくるとSIP内線5001を呼び出すようになります。

更にsip.confの一番最後に以下を追加。

[192.168.0.128]
type=friend
secret=himitsuhimitsuhimitsu
port=5060
defaultuser=3
fromuser=3
host=192.168.0.128
fromdomain=192.168.0.128
context=default
canreinvite=no
callgroup=1

[5001]
type=friend
username=my_name
secret=secretsecretsecret
context=default
canreinvite=no
host=dynamic
mailbox=mymail@example.com
nat=yes
directmedia=no
qualify=5000

[192.168.0.128]からがひかり電話ルーターの内線設定。[5001]からがスマートフォン用の内線設定。
nat=yesにしているのはモバイルのインターネット接続サービスの場合(多くが)NAT環境であるので。(この記事では携帯電話会社が提供しているインターネット環境のNAT環境で動作するように書いています。)
なお、asterisk11ではnat=yesと書くとログにnat=yesの代わりにnat=force_rport,comediaと書けというメッセージが出ますが、2013年4月現在その通りに変更すると通信できない場合があるのでnat=yesのままにすることをオススメします。
qualift=5000にしているのはWi-Fi環境で遅延があることを考慮して。


次に/usr/local/etc/asterisk/extensions.confを編集します。
[globals]に以下の1行を追加

MYNUMBER=031234**** ;ひかり電話で契約している電話番号10桁

[defalut]の下の方に以下を追記

外線発信 内線5000~6000に0から始まる番号を許可 それ以外はbang
exten => _0.,1,GotoIf($[ ${CALLERID(number)} < 5000 ]?bang)
exten => _0.,n,GotoIf($[ ${CALLERID(number)} > 6000 ]?bang)
exten => _0.,n,Set(CALLERID(num)=${MYNUMBER})
exten => _0.,n,Set(CALLERID(name)=${MYNUMBER})
exten => _0.,n,Dial(SIP/${EXTEN}@192.168.0.128,120,T)
exten => _0.,n,Hangup
exten => _0.,n(bang),Answer()
exten => _0.,n,Playback(privacy-incorrect) ;外線発信できないメッセージ
exten => _0.,n,Hangup

;外線発信の処理 117(時報だけ許可する場合)
exten => 117,1,GotoIf($[ ${CALLERID(number)} < 5000 ]?bang)
exten => 117,n,GotoIf($[ ${CALLERID(number)} > 6000 ]?bang)
exten => 117,n,Set(CALLERID(num)=${MYNUMBER})
exten => 117,n,Set(CALLERID(name)=${MYNUMBER})
exten => 117,n,Dial(SIP/${EXTEN}@192.168.0.128,120,T)
exten => 117,n,Hangup
exten => 117,n(bang),Answer()
exten => 117,n,Playback(privacy-incorrect)
exten => 117,n,Hangup

;ひかり電話(番号壱)に着信した場合は内線5000の電話機に着信させる
exten => 電話番号壱,1,Dial(SIP/5000,60,tT)
exten => 電話番号壱,n,Hangup

;ひかり電話(番号弐)に着信した場合は内線5001の電話機に着信させる
exten => 電話番号弐,1,Dial(SIP/5001,60,tT)
exten => 電話番号弐,n,Hangup

;内線電話5000に着信した場合
exten => 5000,1,Dial(SIP/5000,,tT)
exten => 5000,n,NoOp( Dial Status: ${DIALSTATUS})
exten => 5000,n,Goto(DO-${DIALSTATUS},1) ;後処理

;内線電話5001に着信した場合
exten => 5001,1,Dial(SIP/5001,,tT)
exten => 5001,n,NoOp( Dial Status: ${DIALSTATUS})
exten => 5001,n,Goto(DO-${DIALSTATUS},1) ;後処理

;後処理
exten => DO-NOANSWER,1,Hangup
exten => DO-CONGESTION,1,Congestion(10)
exten => DO-CONGESTION,2,Hangup
exten => DO-CANCEL,1,Congestion(10)
exten => DO-CANCEL,2,Hangup
exten => DO-BUSY,1,Busy(10)
exten => DO-BUSY,2,Hangup
exten => DO-CHANUNAVAIL,1,Playback(denpanotodokanai)
exten => DO-CHANUNAVAIL,2,Congestion(10)
exten => DO-CHANUNAVAIL,3,Hangup

; 未使用1桁入力と内線該当無し
exten => _X,1,Answer()
exten => _X,n,Wait(1)
exten => _X,n,Playback(pbx-invalid)
exten => _X,n,Congestion(10)
exten => _X,n,Hangup
exten => _X.,1,Answer()
exten => _X.,n,Wait(1)
exten => _X.,n,Playback(pbx-invalid)
exten => _X.,n,Congestion(10)
exten => _X.,n,Hangup

発信者の内線番号が5000より小さい場合と6000以上の場合は「その番号はご利用いただけません」というメッセージを流して切断する。
内線番号が5000以上6000以下なら発信者の番号として自分のひかり電話契約番号をセット。
ひかり電話ルーターからダイヤル。

下9行はその前とほぼ同じですが、電話のかけ先が117(時報)の場合など番号決め打ちの例。
Playback(denpanotodokanai)は「おかけになった電話は電源が入っていないか電波の届かない場所にある為かかりません」というメッセージをSVOXで自作して置いています。内線電話をスマホのSIP電話にするので電池切れ/電波切れを考慮しています。

とりあえずこれでSIP内線番号5000と5001は内線同士でもひかり電話発着信もできます。
設定ファイルを書き換えただけでは設定が反映されないのでasteriskを再起動するか若しくはAsteriskのCLIからダイヤルプランをリロードさませます。 dialplan reload

ちなみにAsterisk11からは例えば_1.と117の両方書く場合のような番号かぶりがあると起動時のログに警告が記録されるようになったようです。

# asterisk -vvvvr  (AsteriskのCLIを起動)
*CLI> sip reload  (sip.confの設定をリロード)
*CLI> dialplan reload (extensions.confの設定をリロード)
*CLI> quit (AsteriskのCLIを終了)
(行頭の#や*CLI>は入力しません)

次はスマートフォンの設定です。

関連記事: