はじめに
楽天モバイル(Fusion) SMARTalkの電話番号が2つあって、これを固定電話で利用したいと考えていた。 もちろん、SIPに対応した固定電話機を購入すれば、2回線を収容するものはそこまで 高くはない。 だが、使わなくなったYamaha RT58iというRJ11で電話機を接続できるルーターを 持っているので、これのSIPクライアント機能を使いたいと思っていた。
また、フレッツ光ネクストのひかり電話を使っているが、微妙に使い勝手の悪い位置に 固定電話機を設置しなくてはいけないのも気に入らなかった。
使わなくなったAndroidのスマートフォンでこれらをまとめて使うことができれば 便利になると考えた。 Androidには標準のSIPクライアント機能は存在しているし、サードパーティーの ソフトフォンのアプリも数多くあるので、それを組み合わせれば 良いと考えて試してみた。 しかし、これはそれぞれ以下のような理由でうまく行かなかった。
- ひかり電話については、我が家のホームゲートウェイであるPR-500MI (ファームウェアバージョン07.00.0010)では、 Androidスマートフォンの標準電話アプリのSIPクライアント機能でもZoiPerでも、 flets.comで推奨されているAGEphoneでも、着信が安定してできなかった。
- SMARTalkの公式クライアントは、1回線しか収容できない。
- SMARTalkは固定電話機にもAndroidスマートフォンと同時に着信して欲しかった。
と言うことで、NetBSDサーバーにAsterisk 16.10.0を導入して、そこに対して Yamaha RT58iとAndroidスマートフォンのZoiPerを接続することで解決させた。 しかし、PR-500MIでの内線通話は安定して実現はできなかった。 これはソフトフォンの種類やAsteriskの導入の有無によらないので、 PR-500MIに問題があるのかもしれない。あまり使う機能ではないので気にしないことにする。
ウェブを検索してみると、Asteriskの標準であるchan_sip
ドライバー
では、ひかり電話のホームゲートウェイには接続できないらしい。
Asterisk 13以降で標準で提供されるpjsip
ドライバーであれば
問題なく接続できるらしい。
SMARTalkの方は、chan_sip
で接続できるようだ。
そこで、以下のような方針で構築することにした。
- ひかり電話のためのホームゲートウェイとの接続は
pjsip
を利用する - SMARTalkとの接続は
chan_sip
を利用する - Yamaha RT58iとZoiPerとの接続は
chan_sip
を利用する
Asterisk 16.10.0は、以下のようにインストールした。
# cd /usr/pkgsrc/comms/asterisk16 # make install
ひかり電話接続用の設定
pjsip
の設定ファイルは、/usr/pkg/etc/asterisk/pjsip.conf
であるので、既存のファイルをバックアップして以下のように作成した。
ここで、
10.XX.0.1
はホームゲートウェイのLAN側のIPアドレスであり、
ホームゲートウェイの内線3番を事前に有効化してある。その内線3番への接続パスワードが
PASSWORD
である。
[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0:5070 ; 5060 portはchan_sipと競合する。
[hikari-denwa]
type = registration
transport = transport-udp
outbound_auth = hikari-trunk
server_uri = sip:10.XX.0.1
client_uri = sip:3@10.XX.0.1 ; 内線3番
retry_interval = 60
[hikari-trunk]
type = auth
auth_type = userpass
username = 0003 ; 内線3番
password = PASSWORD
[hikari-trunk]
type = aor
contact = sip:10.XX.0.1
[hikari-trunk]
type = endpoint
transport = transport-udp
context = default
disallow = all
allow = ulaw
outbound_auth = hikari-trunk
aors = hikari-trunk
direct_media = no
from_user = 3 ; 内線3番
from_domain = 10.XX.0.1
dtmf_mode = inband
[hikari-trunk]
type = identify
endpoint = hikari-trunk
match = 10.XX.0.1
SMARTalk 2回線接続用の設定
chan_sip
の設定ファイルは、
/usr/pkg/etc/asterisk/sip.conf
である。
既存のファイルはバックアップして、以下のように作成した。
ここで、5XXXXXXX
と5YYYYYYY
が
2回線分のユーザーIDであり、電話番号の050を除いた部分と一致する。
それぞれのパスワードがpassword1
とpassword2
である。
[general] match_auth_username=yes ; 同じsmart.0038.netに複数のアカウントを持っているので。 ; 着信のため register => 5XXXXXXX:password1@fusion1/5XXXXXXX register => 5YYYYYYY:password2@fusion2/5YYYYYYY ; 外線 [fusion1] type=friend username=5XXXXXXX fromuser=5XXXXXXX secret=password1 host=smart.0038.net fromdomain=smart.0038.net context=default insecure=port,invite canreinvite=no dtmfmode=inband qualify=yes allow=!all,ilbc,g729,gsm,g723,ulaw,alaw allowguest=no host=dynamic [fusion2] type=friend username=5YYYYYYY fromuser=5YYYYYYY secret=password2 host=smart.0038.net fromdomain=smart.0038.net context=default insecure=port,invite canreinvite=no dtmfmode=inband qualify=yes allow=!all,ilbc,g729,gsm,g723,ulaw,alaw allowguest=no host=dynamicこれにはYamaha RT58iとZoiPer用の設定も追加していく。
内線電話機接続用の設定
内線電話機であるYamaha RT58iとZoiPerから接続を受けるために、
/usr/pkg/etc/asterisk/sip.conf
に以下のように追加した。
それぞれ、ユーザーIDはandroid
とrt58i
であり、
パスワードはそれぞれpassword3
とpassword4
である。
; 電話機との接続 [android] ; Androidスマートフォン type=friend username=android secret=password3 context=default canreinvite=no host=dynamic dtmfmode=rfc2833 qualify=no [rt58i] ; Yamaha RT58i type=friend username=rt58i secret=password4 context=default canreinvite=no host=dynamic dtmfmode=rfc2833 qualify=no ; Yamaha RT58iから接続するのに必須。
発着信の設定
発着信の設定は、/usr/pkg/etc/asterisk/extensions.conf
に設定する。
既存ファイルはバックアップして、新規に以下の内容で作成した。
[default] ; 着信 ;; 内線 exten => 1290,1,Playback(demo-congrats) ; 動作チェック用の自動音声。内線で1290へ掛けるとお祝いのメッセージを聞ける。動作確認済み。 exten => 101,1,Dial(SIP/android,20,rt) ; 内線番号は設定しただけで動作確認していない。 exten => 102,1,Dial(SIP/rt58i,20,rt) ; 内線番号は設定しただけで動作確認していない。 ;; 外線 exten => 5XXXXXXX,1,Dial(SIP/android&SIP/rt58i,20,rt) ; SMARTalkの2回線はYamaha RT58iとZoiPerに着信する、 exten => 5YYYYYYY,1,Dial(SIP/android&SIP/rt58i,20,rt) exten => s,1,Dial(SIP/android) ; ひかり電話はZoiPerにのみ着信する (実際にはホームゲートウェイに直結された固定電話機にも着信する)。 ; 発信 ;; SMARTalk1の場合には9で発信する。 exten => _9.,1,Set(CALLERID(num)=${MYNUMBER}) exten => _9.,n,Set(CALLERID(name)=${MYNUMBER}) exten => _9.,n,Dial(SIP/${EXTEN:1}@fusion1,120,T) ; 最初に9をダイアルした場合に9を取って外線へ回す。 ;; SMARTalk2の場合には8で発信する。 exten => _8.,1,Set(CALLERID(num)=${MYNUMBER}) exten => _8.,n,Set(CALLERID(name)=${MYNUMBER}) exten => _8.,n,Dial(SIP/${EXTEN:1}@fusion2,120,T) ; 最初に7をダイアルした場合に8を取って外線へ回す。 ;; ひかり電話の場合には7で発信する。 exten => _7.,1,Set(CALLERID(num)=${MYNUMBER}) exten => _7.,n,Set(CALLERID(name)=${MYNUMBER}) exten => _7.,n,Dial(PJSIP/${EXTEN:1}@hikari-trunk) ; 最初に7をダイアルした場合に7を取って外線へ回す。
起動させ使用開始する
これで、Asteriskを以下のように起動すれば、それぞれ使えるようになる。
# cp /usr/pkg/share/examples/rc.d/asterisk /etc/rc.d # echo asterisk=YES >> /etc/rc.conf # /etc/rc.d/asterisk start問題はめったにこれら3回線を利用する機会がないということだ。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。