FreePBXに(今更)SMARTalkを収容する話

おわりのはじまり

楽天モバイル社からの既報の通り、SMARTalkが終了する予定です。
フュージョン・コミュニケーションズ社の時代から大変お世話になりました。
とはいえ、ずっと使っていた050番号がなくなってしまうのは痛いですが。
ぶつぶつ言っていてもしょうがないので、某B社から新しい050番号を取得すべく手続き中です。

さて、問題は電話番号が変わることをどうやって周知するかです。
とりあえずSMARTalk終了の2025年2月28日までに現電話番号にかけてきた人(かつ、今後も電話をかけてもらいたい人(重要))には新たに取得した電話番号を伝えようかなと考えました。

問題は使っているGrandstream HT802が 1アナログ電話ポート当たり1SIPアカウントしか設定できないことです。
電話機を2台並べるのはちょっとばかばかしいのでFreePBXで束ねてしまいましょう。

今回のFreePBXのハマりポイント

検証用に内線を2つ用意しました。
番号が後の方の内線にどうやってもログインできません。
とりあえず原因究明は保留にして1内線だけにしました。

対象の電話番号に掛けると、ぶつくさと英語で「お掛けになった電話番号が間違っていませんか?」(ちゃんと覚えていない)的なことを録音音声で言われました。
インバウンドルートがありませんでした。
Connectivity → Inbound Routes から設定しておきましょう。

気を取り直して電話をかけなおしました。
着信音が鳴るものの、受話器を取ってもかすかにジャリジャリと音がするだけで通話を開始できません。
トランクで受け付けるコーデック設定が足りませんでした。
Edit Trunk → pjsip Settings → Codecs で 「ulaw,g722,gsm,ilbc,speex」を有効にしましょう。

気のせいでした。
電話がかかってくるのが分かってるからといって、早押しクイズのように電話を取ると通話が始まりません。
受話器はゆっくり取りましょう。(とりあえずHT802君のせいにしておく)

着信ができるようになったので発信を試してみます。
「お客様のお掛けになりました電話番号では、お繋ぎすることができません。恐れ入りますが、0から始まる市外局番よりお掛け直しください。」
…あれ、なんで日本語が流れるの???

というわけでログを調査してみると「Fusion Open MGW 1.0」と名乗るサーバとは通信で来ているらしいので、SMARTalk のサーバーには繋がっている模様。
ということは喋っているのはSMARTalkのサーバのようです。
しかしログを見てもどこが間違っているかわからない。そして上記のエラー応答メッセージでWeb検索しても有益な情報はなし。
しょうがないので、SMARTalkと直接接続して正常に発信できるGrandstream HT802のログをsyslogで送信してにらめっこして探しました。

▲▲▲▲▲▲▲:SMARTalkのID
●.●.●.●:自宅回線のIPアドレス
■■■■■■■:テスト掛電先の携帯電話
○:念のため伏せた部分

INVITE sip:▲▲▲▲▲▲▲@smart.0038.net:5060 SIP/2.0
Via: SIP/2.0/UDP ●.●.●.●:5060;rport;branch=○○○○○○○
From: <sip:▲▲▲▲▲▲▲@smart.0038.net>;tag=○○○○○○○
To: <sip:■■■■■■■@smart.0038.net>
Contact: <sip:▲▲▲▲▲▲▲@●.●.●.●:5060>
Call-ID: ○○○○○○○
CSeq: 11922 INVITE
Allow: OPTIONS, REGISTER, SUBSCRIBE, NOTIFY, PUBLISH, INVITE, ACK, BYE, CANCEL, UPDATE, PRACK, MESSAGE, REFER
Supported: 100rel, timer, replaces, norefersub, histinfo
Session-Expires: 1800
Min-SE: 90
Max-Forwards: 70
User-Agent: FPBX-16.0.33(19.8.0)
Authorization: Digest username="▲▲▲▲▲▲▲", realm="smart.0038.net", nonce="○○○○○○", uri="sip:▲▲▲▲▲▲▲@smart.0038.net:5060", response="○○○○○○", algorithm=MD5
Route: <sip:■■■■■■■@smart.0038.net:5060>
Content-Type: application/sdp
Content-Length: 359

FreePBXのログ

INVITE sip:■■■■■■■@smart.0038.net SIP/2.0
Via: SIP/2.0/UDP 172.16.○.○:5060;branch=○○○○○○○;rport
From: "FUSION IP Phone" <sip:▲▲▲▲▲▲▲@smart.0038.net>;tag=○○○○○○○
To: <sip:■■■■■■■@smart.0038.net>
Call-ID: ○○○○○○○
CSeq: 10 INVITE
Contact: "FUSION IP Phone" <sip:▲▲▲▲▲▲▲@172.16.○.○:5060>
Max-Forwards: 70
User-Agent: Grandstream HT802 1.0.53.
Privacy: none
P-Preferred-Identity: "FUSION IP Phone" <sip:▲▲▲▲▲▲▲@smart.0038.net>
P-Access-Network-Info: IEEE-EUI-48;eui-48-addr=BC-24-11-49-6E-C8
P-Emergency-Info: IEEE-EUI-48;eui-48-addr=00-0B-82-AD-E2-07
Supported: replaces, path, timer, eventlist
Allow: INVITE, ACK, OPTIONS, CANCEL, BYE, SUBSCRIBE, NOTIFY, INFO, REFER, UPDATE
Content-Type: application/sdp
Accept: application/sdp, application/dtmf-relay
Content-Length: 200

Grandstream HT802 のログ

…伏せたら余計分かりづらくなったんですが、INVITEする対象が違います。
なんで置き換わってるのかと思ったら トランクの pjsip Settings の Advancedで Outbound Proxy を設定していたせいでした。
たしかにSMARTalkのIDは0から始まってませんね。

なおさらっと書きましたが、ここまで3日かかっています。

おまけ:自動生成された pjsip.endpoint.conf (抜粋)

[smartalk]
type=endpoint
transport=0.0.0.0-udp
context=from-trunk
disallow=all
allow=ulaw,g722,gsm,ilbc,speex
aors=smartalk
rtp_keepalive=0
language=en
outbound_auth=smartalk
from_domain=smart.0038.net
from_user=○○○○○○○
user_eq_phone=no
t38_udptl=yes
t38_udptl_ec=none
fax_detect=no
trust_id_inbound=yes
t38_udptl_nat=yes
direct_media=no
rtp_symmetric=yes
dtmf_mode=auto

pjsip.endpoint.conf (抜粋)

 

おわりに

えっ、新しい050番号が取得できたらもう一回設定するんですか?もう触りたくないです。