この週末はコレにかかりっきりです。
■Windows Live Messenger
噂の1.0を台湾NOKIAのサイトで発見しました。これだとインストール時に仕様言語を尋ねられるので、Englishを選んでやればとりあえず使えます。
まだメッセージのやりとりをしてないんですが、とりあえずこちらから送ったメッセージは文字化けせずに見えています。相手側でちゃんと読めるか、相手のメッセージも読めるかは、追々検証しますが、他のブログで使えてるということだったので大丈夫でしょう。
■VoIPで問題発生(1) 発信編
Asterisk経由でひかり電話へ発信する際、どうしてもかけられない番号があることに気付きました。Asteriskのログを調べると、どうも電話帳にハイフン入りで登録された番号が、そのまま(ハイフンを抜かずに)ひかり電話ルーターに渡されてエラーになっている模様。実はE61の電話番号欄は入力時にハイフンがはじかれる(無視される)仕様になっていて、原則ハイフン無しが前提の模様。ただ今回のようにvCardからインポートした場合や、コピペなどを使うと入れられてしまいます。
結局、着信時の名前表示も不安定だったりして、結局電話帳から全部ハイフンを除去してしまったんですが、一応苦労して作ったAsterisk側で発信時に電話番号からハイフンを除去するレシピを載せておきます。
exten => _0.,1,Cut(EXTEN1=EXTEN,-,1)
exten => _0.,2,Cut(EXTEN2=EXTEN,-,2)
exten => _0.,3,Cut(EXTEN3=EXTEN,-,3)
exten => _0.,4,Dial(SIP/${EXTEN1}${EXTEN2}${EXTEN3}@ntttel,60,r)
exten => _0.,5,Congestion
Ver1.4ではFILTERという関数で任意の文字を除去できるみたいなんですが、ウチはまだ1.0。結局Cutコマンドでハイフンをデリミタに3つの変数に代入し、それを並べるという手を取っています。つまり、番号が3セグメントであること前提のややダサい方法です。第2引数がデリミタ、第3引数がどのセグメントを残すかの指定で、
exten => _0.,1,Cut(EXTEN1=EXTEN,-,1&2&3)
のように複数セグメントも指定できるんですが、この場合はデリミタも残ってしまうというやや納得の行かない仕様なので、しかたなく変数3つを使うハメになりました。
■VoIPで問題発生(2) 着信編
お次は更に深刻な問題です。Asterisk経由でSIPプロトコルで着信した場合、発信者IDは「sip:09012345678@192.168.0.1」のようになります。@以降はAsteriskサーバーのIPアドレスです。着信通知ダイアログには「”09012345678″」と出るんですが、着信履歴には「sip:09012345678@192.168.0.1」で残っており、当然のことながら、電話帳に書かれた電話番号とマッチしないため、発信者番号が名前に変換されないのです。これは致命的に不便です。
あれこれAsterisk側をいじってみましたが解決せず。というかE61のSIPクライアントとしての挙動としては正しい仕様な気がしました。かなり残念感の漂う解決策としては、電話帳に「sip:09012345678@192.168.0.1」も併記するしかないようです。ただ、普通の電話番号欄では数字以外入力できないので、SIP欄を使います。この場合、先頭の「sip:」はなくてもマッチしてくれるようです。
ここで更に問題発生。WAN側からつないだ場合には@以降がグローバルIPアドレスになってしまいます。いくらなんでも自宅無線LANで使う時とWANから使う時のそれぞれの為に電話帳に更にSIP欄を追加するのは避けたいっ!ということでこちらは解決策を発見。Asteriskのsip.confの[general]セクションに
fromdomain=tel.hoge.com
のようにホスト名を指定しておきます。これで、E61側では常に「sip:09012345678@tel.hoge.com」のように表示されます。最初「Asterisk」など適当な単語にしてみたんですが、リーチャブルなホスト名でないと履歴から発信する際にエラーになります。