Asteriskに接続している一部のクライアントはIAX2で通信するようにしたのだが、 もう1台はZoiPerではなくbaresip+を使っているので、 IAX2にすることはできない。 そこで、この端末についてもchan_sipではなくPJSIPに乗り換えることにした。
PJSIP自体は、既にひかり電話のホームゲートウェイに接続するのに利用しているので、それも合わせて、以下のように設定すれば良い。
PJSIPでAsteriskにregisterするには、Asterisk 16はデータベースを使えるようになっている必要がある。
pkgsrc/comms/asterisk16の場合には、標準ではSQLite3が利用され、/var/db/asterisk/astdb.sqlite3
にデータベースファイル
が置かれている。
今回は、なぜかこのデータベースファイルの所有者が別ユーザーになっており、SQL errorが起きていたのを無視していたため、
端末がAsteriskにregisterできなかった。ユーザーIDとパスワードの認証までは通過できるのだが、着信できない状態になってしまった。
pjsip.conf
は、以下のようにした。
[general] match_auth_username = yes [system] type = system disable_rport = yes [transport-udp] type = transport protocol = udp bind = 0.0.0.0 ; 外線: ひかり電話 [hikari-denwa] type = registration transport = transport-udp outbound_auth = hikari-trunk server_uri = sip:10.81.0.1 client_uri = sip:3@10.81.0.1 retry_interval = 60 [hikari-trunk] type = auth auth_type = userpass username = 0003 password = 0003_password [hikari-trunk] type = aor contact = sip:3@10.81.0.1 [hikari-trunk] type = endpoint transport = transport-udp context = default disallow = all allow = ulaw outbound_auth = hikari-trunk aors = hikari-trunk direct_media = no from_user = 3 from_domain = 10.81.0.1 dtmf_mode = inband [hikari-trunk] type = identify endpoint = hikari-trunk match = 10.81.0.1 ; 内線: baresip+ on Amazon Kindle Fire HD 8 gen10 [fire8] type = aor max_contacts = 1 qualify_frequency = 60 remove_existing = yes [fire8] type = auth auth_type = userpass username = fire8 password = user3_password [fire8] type = endpoint transport = transport-udp context = default disallow = all allow = ilbc,ulaw,alaw,gsm,g729,g723 aors = fire8 auth = fire8 ;outbound_auth = fire8 dtmf_mode = rfc4733 force_rport = yes ice_support = no rtp_symmetric = yes direct_media = no rewrite_contact = yes device_state_busy_at = 1
これに合わせて、extensions.confも変更し、発信・着信できるようにする。
[default] ;include => stdexten ; 着信 ;; 内線 ;;; 自動応答 exten => 1290,1,Playback(demo-congrats) ; 動作チェック用 ;;; 各端末 exten => 101,1,Dial(IAX2/user1,20,rt) exten => 103,1,Dial(IAX2/user2,20,rt) exten => 104,1,Dial(PJSIP/fire8,20,rt) ;; 外線 exten => 55863768,1,Dial(IAX2/user1&IAX2/user2&PJSIP/fire8,20,rt) exten => 53077771,1,Dial(IAX2/user1&lIAX2/user2&PJSIP/fire8,20,rt) exten => s,1,Dial(IAX2/user1&IAX2/user2&PJSIP/fire8) ; 発信 ;; Fusion SMARTalkの場合には9で発信する。 exten => _9.,1,NoOp(Fusion発信9) exten => _9.,n,Set(CALLERID(num)=${MYNUMBER}) exten => _9.,n,Set(CALLERID(name)=${MYNUMBER}) exten => _9.,n,Dial(PJSIP/${EXTEN:1}@fusion1,120,T) exten => _9.,n,Hangup() ;; Fusion SMARTalkの場合には8で発信する。 exten => _8.,1,NoOp(Fusion発信8) exten => _8.,n,Set(CALLERID(num)=${MYNUMBER}) exten => _8.,n,Set(CALLERID(name)=${MYNUMBER}) exten => _8.,n,Dial(PJSIP/${EXTEN:1}@fusion2,120,T) exten => _9.,n,Hangup() ;; ひかり電話の場合には7で発信する。 exten => _7.,1,NoOp(ひかり電話で発信7) exten => _7.,n,Set(CALLERID(num)=${MYNUMBER}) exten => _7.,n,Set(CALLERID(name)=${MYNUMBER}) exten => _7.,n,Dial(PJSIP/${EXTEN:1}@hikari-trunk) exten => _7.,n,Hangup()