アスタリスク1.8〜16

約10年前、当社には一口サポートのないステーションがあり、最初のAsterisk1.6はPRIストリームを介して接続されていました。その後、番号の置換とカテゴリ管理を使用したリダイレクトが必要でしたが、netforsからchan_ss7が見つかりました。これは、ファイルを提出した後、すべてを実行できます。時間が経ち、PJSIPはバージョン13のAteriskでリリースされ、chan_ss7は1.8でのみコンパイルされました。はい、そして定期的に、半年に一度、中断の問題があり、それは消える声に現れました。彼らは現れて、彼ら自身で通り過ぎました。



メインステーションが交換され、一口を学び、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を



All Articles