twilio に SIPクライアントを追加するときの注意(特にスマホ)
twilio で電話をクラウド化という記事の中で、SIPクライアントとしてスマホ用アプリの GS Wave と Windows用ソフトの MicroSIP の設定をご紹介しましたが、運用していく中で問題が出てきたので共有したいと思います。
この問題については、「スマホを外に持ち出す」環境で使う場合が該当します。もっぱら社内Wi-Fi だけで使ってるような場合は、ほぼ関係ありません。
今回起きた問題というのが、twilio の1つのエンドポイントに 1IPアドレスからは最大10個までしか SIP REGISTER できない、という制限です。
twilio の各種制限についてはドキュメントに書いてあります。
要約すると、
・SIP Domain は 1アカウントあたり、100個まで
・SIP Endpoint に登録できるのは 1IPアドレスにつき 10個まで
・登録できる SIP Credential List は 1 SIP Domain あたり 100個まで。かつ、各リストに登録できるユーザは 1,000ユーザまで。
となり、今回問題となっているのは 2つめの、「SIP Endpoint に登録できるのは 1IPアドレスにつき 10個まで」という内容です。
さて、SIP REGISTER はステートレスな作業のため、いつの間にかセッションが切れている、ということがおきます。たとえば、ユーザの回線が切れてしまった、ユーザ側の IPアドレスが変わって、途中の NAPTルータが NAPT変換テーブルを破棄した、などが考えられます。
そこで、SIP REGISTER には消費期限(Session Expiration)があって、定期的に SIP REGISTER を行う必要があります。Session Expiration は SIP REGISTER するときに、SIPクライアント側からリクエストします。
twilio の仕様では、この SIP REGISTER について、最小600秒(10分)から最大3,600秒(60分)の間で設定しろ、となっています。
twilio はこの 600~3,600秒の Session Expiration から外れる値のリクエストについては "423 Interval too brief" エラーを返します。
そして、このリクエストされた Session Expiration の間は、SIP REGISTER の情報を保持します。
さて、クライアント側では Session Expiration をリクエストしますが、このリクエストした Session Expiration まで待っていてはセッションが切れてしまいます。
そこで、自分がリクエストした Session Expiration より短い時間の中で、再度、SIP REGISTER を送ります。
例えば、Session Expiration を 800秒に設定した場合、400秒ごとに SIP REGISTER を送れば、途切れることなく登録し続けることが期待されます。
ただし、IPアドレスが変わった際などは、前のセッション情報はすでに意味をなしませんから、改めて SIP REGISTER を送ることになります。
ここで社内Wi-Fi などで運用している場合は、最大でも 2個程度のセッションしか残らないので問題ありません。(古いセッションは消費期限をすぎれば消されていくため)
ただ、スマホを使っているユーザは頻繁に IPアドレスが変わるなどの理由で、頻繁に SIP REGISTER が送られることがあります。
これを繰り返すと前述した、「SIP Endpoint に登録できるのは 1IPアドレスにつき 10個まで」の成約に引っかかってしまうのです。
GS Wave の場合、デフォルトの設定ではリクエストする Session Expiration は 3,600秒(60分)、SIP REGISTER は 180秒ごとに送るようになっています。
これは場合によっては 10回目のリクエスト(初登録から 30分後)には、制限に引っかかることになってしまいます。一応、SIP REGISTER を送る前に、SIP UNREGISTER(登録解除)も送るので、本来はフローを起こすはずはないのですが、前述したスマホで移動してるときなど、IPアドレスが頻繁に変わるような状況だと、SIP UNREGISTER もうまく動かず、10個以上のアクティブな SIP REGISTER が残ってしまうことがあります。
解決方法はカンタンです。GS Wave の設定を変えてしまいます。
GS Wave を開き、Settings、Account Settings、該当のSIPクライアント設定に進みます。
Unregister Before New Registration を Unregister All に変更します。
Register Expiration(m) を 10 に変更します。単位は、分です。
これだけで ok です。
twilio console の Registered SIP Endpoints から確認すると、2個程度のアクティブな SIP REGISTER だけが確認できると思います。
目次
twilio に SIPクライアントを追加するときの注意(特にスマホ) (この記事)
クラウドPBX、twilio を VoIPフォンで使う(Panasonic KX-UT248)