メインステーションが交換され、一口を学び、Asteriskを16にアップグレードすることが決定されました。
インストールはクリーンなdebian10で実行されました。リポジトリのバージョンは16.2.1なので、ソースからビルドします。最新のAsterisk16をダウンロードします。16.12.0で入手しました。
cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz
フォルダーに解凍して移動します。
tar xzvf asterisk-16-current.tar.gz
cd asterisk-16.*
次に、必要なすべての依存関係をdebianにインストールしましょう。それらを手動で繰り返す必要はありません。すべての依存関係は、実行する必要のあるスクリプトに収集されます。
contrib/scripts/install_prereq install
次に、mp3モジュールのビルドに必要なmp3ソースをダウンロードします。
contrib/scripts/get_mp3_source.sh
すべての依存関係がインストールされ、アセンブリに進むことができます。
./configure
make menuselect
デフォルトでインストールされるものに、私は追加します:
- 最初のタブで、format_mp3。
- コアサウンドパッケージでは、ロシアのRU-WAVサウンドを示しています。
- エクストラサウンドパッケージでは、英語のEN-WAVを選択しますが、残念ながらロシア語はありません。
[保存して終了]をクリックして、設定を受け入れた後、続行します。コンパイル:
./configure
make
次に、checkinstallを使用してパッケージをビルドしてインストールします。
checkinstall
バージョン、パッケージ名などを記入します。リポジトリ内のパッケージ名と競合しないように、パッケージ名にアスタリスク-16を記述します。
checkinstall
Asteriskを実行し、フォルダーのアクセス許可を付与するユーザーを追加します。
adduser --system --group --home /var/lib/asterisk --no-create-home --gecos "Asterisk" asterisk
usermod -a -G dialout,audio asterisk
chown -R asterisk: /var/{lib,log,run,spool}/asterisk /usr/lib/asterisk /etc/asterisk
このユーザーの下で実行するようにAsteriskを構成します。これを行うには、/ etc / default / asteriskconfigにパラメーターを追加します。
AST_USER="asterisk"
AST_GROUP="asterisk"
/etc/asterisk/modules.confを編集した後。たとえば、不要なものを削除します。
noload => chan_sip.so
コンソールでアスタリスクを開始し、エラーがないことを確認します。
asterisk -cvvv
すべてが正常な場合は、サービスを起動に追加して実行します。
systemctl enable asterisk
systemctl start asterisk
これでインストールが完了し、セットアップに進みます。
PJSIPでは、構文が根本的に変更されており、構成をコピーするだけでは機能しません。ソースフォルダcontrib / scripts / sip_to_pjsip / sip_to_pjsip.pyに設定コンバータがありますが、個別のaor、identifyなどの形式です。便利ではなく、pjsip_wizardで出口が見つかりました。/etc/asterisk/pjsip.confにトランスポートを作成する必要があります。
[transport-udp]
type = transport
protocol = udp
bind = x.x.x.x
external_media_address = x.x.x.x
external_signaling_address = x.x.x.x
xxxxをリッスンするIPアドレスに変更します。
ユーザー用のテンプレートを作成します。
[main-template](!)
type=wizard
transport=transport-udp
accepts_auth = yes
accepts_registrations = yes
aor/qualify_frequency = 100
aor/max_contacts = 1
aor/remove_existing = yes
inbound_auth/auth_type = userpass
endpoint/disallow = all
endpoint/allow = alaw
endpoint/dtmf_mode = rfc4733
endpoint/deny = 0.0.0.0/0
endpoint/context = city_out
endpoint/direct_media = no
endpoint/device_state_busy_at = 1
endpoint/language = ru
endpoint/sdp_session = MySDp
そして、通常のユーザーはすでに設定を持っています:
[100](main-template)
endpoint/permit=192.168.100.1
inbound_auth/username=100
inbound_auth/password=P@$$Word123
endpoint/callerid='' <100>
そして、これはすでにchan_sip形式と非常によく似ており、単語を置き換えることでエディターのパラメーターの名前を変更します。
natの背後にあるクライアントの場合、nat = yesの代わりに、次の行を追加してホテルテンプレートを作成します。
endpoint/rtp_symmetric=yes
endpoint/force_rport=yes
endpoint/rewrite_contact=yes
pjsipがchan_sipのように動作するため、つまり 1つのピアと1つのデバイスを追加します。一部の中国の電話は、最初のポートが有効なときに、何らかの理由で別のポートから2番目の登録を送信することがあります。これにより、このバグを回避できます。
aor/max_contacts = 1
aor/remove_existing = yes
PJSIPの機能の1つは複数登録ですが、これはchan_sipではサポートされていませんでした。aor / max_contactsを必要な量に変更し、ダイヤルプランで呼び出します。
exten => _XXX,1,Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})})
以前のように番号ではなく名前でインターセプトグループを指定できると非常に便利になりました。
endpoint/named_call_group = aveks
endpoint/named_pickup_group = aveks
古いchan_sipには、ピア会話の数を制限するcall-limitパラメーターがありました。新しいchan_pjsipにはこれがありません。すべてのチャットで、GROUPパラメーターによって呼び出しを制限することをお勧めします。何らかの理由で、マニュアルのどこにもendpoint / device_state_busy_atパラメーターを使用せず、extensions.confの着信および発信コンテキストに追加していません。
exten => _X.,1,GoSub(subDeviceBusy,s,1(${EXTEN},${CALLERID(num)}))
[subDeviceBusy]
exten => s,1,NoOp(PJSIP/${ARG1} has state ${DEVICE_STATE(PJSIP/${ARG1})})
exten => s,n,NoOp(CallerId is ${ARG2})
exten => s,n,ExecIf($["${DEVICE_STATE(PJSIP/${ARG1})}" = "BUSY"]?Hangup(17))
exten => s,n,Return
Asteriskコンソールで行を表示できます。
pjsip show endpoint 100
Endpoint: 100/100 Not in use 0 of 1
InAuth: 100-iauth/100
Aor: 100 3
Contact: 100/sip:100@192.168.0.10:5062 c34b4c2d4d Avail 7.981
Transport: transport-udp udp 0 0 192.168.0.1:5060
ここで、0 of 1は、可能な回線からビジーな回線の数を示しています。
16アスタリスクでは、マクロが廃止されたため、Gosubでマクロを書き直す必要がありました。
呼び出し時に発信者の番号を送信するには、呼び出し時にDiversionヘッダーをINVITEに追加します。
exten => 2222222,n,Dial(PJSIP/8XXXXXXXXXX@trunk,,tTb(add_diversion^${EXTEN}^1)
[add_diversion]
exten => _XXXXXXX,1,Set(PJSIP_HEADER(add,Diversion)=<sip:XXX${EXTEN}@x.x.x.x>\;reason=unconditional\;screen=yes\;privacy=off)
exten => _XXXXXXX,n,Return()
これは、リダイレクトの対象となる都市番号2222222です。8XXXXXXXXXXは転送先の番号です。必要に応じて、XXXsipの代わりに市外局番を追加します。XXX$ {EXTEN} @xxxx>
キュー構成ファイルに特に問題はなく、メンバーをSIPからPJSIPに変更するだけです。
ドキュメントを使用することを忘れないでください
pjsip_wizard.confの
pjsip.confを