FreeSWITCHをひかり電話の外線通話に自動応答させられた

一月ほど前まで、「FreeSWITCHをひかり電話の外線通話に自動応答させることができない」、「その2」、「FreeSWITCHをひかり電話の外線通話に自動応答させるめどがたった…かもしれない」にあるようにWindows PC上で走らせたFreeSWITCHに、入ってくる外線通話に自動応答させようと努力していたが結局できなくて一旦は諦めた。原因の目星がついた気でいたが、結論からいうと完全に外していた

FSがひかり電話に対してDTMFをinbandに設定していなかったのがうまくいかなった理由。そういえば、Asteriskの設定の説明でそう設定するのが大事だとどっかで読んだな、などと今になって思い出す始末(遅いって)。DTMFはさしあたって自分がやろうとしていたことには関係ないので、その設定でこける可能性があるとは、想像すらしなかった。ただ、言い訳すると、FreeSWITCHのWikiは必ずしも現状を反映しておらず、そこで指示されているようにしても起こるはずのことが起こらないのが問題がどこにあるか突き止めるのを難しくしている。

Wikiによれば、dtmf-typeというparameterで、"gateway" (FS独自の用語で、通常なら"trunk")に対して、使用するDTMFの種別を指定できることになっている。ちなみに、inbandとはみなし音声ということなので、dtmf-typeの値は"none"でなければならない。Asteriskと同様"inband"という値があるのかと思い込んでいた。そんな基本的な理解すらなかったのだから、うまくいかないのは当たり前だ。

さて、そのWikiに指示通りgatewayの設定をしてもうまくいかない。同じWikiの別のページにあるように、ダイアルプラン中で、bridgeなりtransferする前に、variable (FSではparameterとはっきり区別している)dtmf_type (variableなので、FSのコンベンションでハイフンではなくアンダスコア)の値を "none" に set しないといけない。

これでとりあえず外線着信時にFSに自動応答させることはできるようになったが、IVR/AAをさせるのなら(そのつもり)answer後にstart_dtmfアプリケーションを起動させないとその後の発信者のキー入力を捕捉できない

どうしてこれに気づいたか。「Android用SIPクライアント」で書いたように、SIPクライアントがSDPで送るメディア・タイプによって、ひかり電話のVoIPアダプタは通信を拒否してしまうことがある、ということを知った。そういう観点はそれまで全くなかったので、「FreeSWITCHをひかり電話の外線通話に自動応答させることができない~その2」に掲載した、ひかり電話VoIPアダプタからのINVITEに対してFSが返すOKメッセージを再度眺めてみると、その中で特に以下の太線部が気になった。これはAsteriskが送るOKにはない。

m=audio 20298 RTP/AVP 0 101
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000

a=fmtp:101 0-16

a=silenceSupp=off – – – –
a=ptime:20

で、調べてみるとこれはDTMFのinband以外の、つまりout-of-bandの送信方法の一つを指定しているのがわかった。そこでやっと、かつて読んだAsteriskの設定方法を思い出し、もしや…、と考えるに至った。

かれこれ予定していた時間の10倍はこの件に費やしてしまったと思うが、やっとメドが立って喜ばしい。b-mobileSIM U300も注文したことだし、細かい変更点はあったが概ねではケチケチ携帯大作戦」で企んだ通りの「携帯」電話システム実現までもうあと一歩だ。

これで結局通信速度が足りなくて実用にならなかったら相当ショックだな…。

広告
カテゴリー: Computers and Internet パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中