匿名

差分

Pjsip 機能拡張

2,999 バイト追加, 2023年2月7日 (火) 11:26
Asterisk側での解決方法
chan_pjsipではchan_sipでは実現できなかった機能が提供されています。
==複数レジスト==
同一のユーザ名/パスワードで複数のUA(SIPクライアンSIPクライアント)トがRegisterできます。がRegisterできます。<BR>
AORのmax_contactsがこの数を制御します。endpointでRegisterするタイプのクライアント、要するに電話機等ではAORでmax_contacts = 1を指定することで、Asteriskに対してRegisterしてくるUAを1にしますが、これをmax_contacts = 4に設定すると、4つまでのUAがRegisterできるようになります。<BR>
EndppointやAORの設定は[[Asterisk pjsip]]のページを参照してください。<BR>
上記の例ではphone1はphone1@192.168.1.27:5060と:phone1@192.168.1.14:60614からRegisterされています。この返値をDialコマンドに渡せば複数のUAに対してダイヤルします。
exten => 2001,1,Dial(${PJSIP_DIAL_CONTACTS(phone1,phone1))
このように書くことでphone1に対してRegisterしている2つのUA(電話機)に対してダイヤルすることができます。<BR>ACD機能ではないので内線の複数収容には向きませんが、あるユーザにひとつのユーザIDとパスワードを発行し、デスクフォンとスマートフォンを同時に使わせるような場合には便利です。===複数レジストの副作用===同一ピアに対して複数レジストが可能なため一部電話機において副作用が発生します。<br>unregisterせずにregisterしようとする電話機ではregisterしたまま再度registerしようとするため、前のregisterと新しいregisterを「別なcontact」としてAsteriskが判断してしまいます。<br>以下の例では電話機のピア名は"FAP003"です。 [Feb 6 08:19:35] WARNING[27107] res_pjsip_registrar.c: Registration attempt from endpoint 'FAP003' (192.168.254.16:32062) to AOR 'FAP003' will exceed max contacts of 2このようなメッセージが出る場合、pjsipの同一ピアのmax contactsに達してしまっているので、それ以上のregisterができません。<br>解決方法としては再registerする(電話機が再起動したときなど)にunregisterしてからregisterするオプションを電話機で設定してください。もし、電話機でそのようなオプションがない場合には一定時間(3600秒)経つとcontactが捨てられますので、再度registerできるようになるはずですが、設定やデバッグ中などで頻繁に再起動したい場合には以下の手順でcontact情報を消すことができます。<br> *CLI> database show registrar/contactを実行します。表示から以下のようなエントリを探します。 /registrar/contact/FAP003;@fe086ca9ab600f0098c73dd73bd0487d: {"via_addr":"192.168.254.16","qualify_timeout":(略)registrar/contactの"FAP003;@fe086ca9ab600f0098c73dd73bd0487d"部分がキーになっています。"FAP003"の部分は使用している電話機のピア名なので環境にあわせて読み替えてください。このエントリを削除すればmax contactsから1つ減らすことができるので、再度registerすることができるようになります。以下の例のように削除します。 database del registrar/contact FAP003;@fe086ca9ab600f0098c73dd73bd0487d※Grandstreamの一部電話機では再register時のunregisterを実行「しない」がデフォルト設定になっているようです。(「再起動時に登録を取り消す」オプションを「すべて」に設定するとunregisterします)<br><br>====Asterisk側での解決方法====PjSIPの設定で、該当するピアのAORに remove_existing = yes を入れます。remove_existing はデフォルトでは no に設定されています。これを入れると(おそらく)同一IPからのregisterは同じものとみなして再度registerされる際に元のを削除します。<br>コピペで使う人もいるのでwizardの設定例にも書いておきました。