Hi%username%!
アスタリスクPBXを管理するプロセスでは、遅かれ早かれコールを宛先にルーティングする必要があります。ほとんどの場合、都市、MN、エリア内通信、MGです。 最初の2つでは、すべてが明確です。 しかし、最後の2つは...さて、ここで大したことは何ですか? DEFとABCコードの正規表現の準備については、キャリッジと記事とスクリプトの小さなカートが既に書かれていますが、これらのすべての正規表現を更新する必要がある場合があります。 そして、思考が生まれ、それを自動化できるかどうかが決まりました。 残念ながら、準備ができていて最も重要なものは見つかりませんでした。 そこで、自転車を再発明します。
これを行うには、以下を実行する必要があります。
- アスタリスクデータベース接続を構成する
- DEFおよびABCリージョンコードを使用してテーブルを作成および設定する
- アスタリスクの追加機能を説明する機能
- 必要な方向のコンテキストを記述します
手順1.データベースとのアスタリスク接続を構成する
データベースが既にインストールおよび構成されていると想定しています。 私はpostgresqlデータベースを使用するリアルタイムメカニズムを使用しているため、説明されているすべてのアクションはpostgresqlで有効です。他のデータベースでは、マイナーな変更が必要になる場合があります。
アスタリスクのあるサーバーに、unixodbcと、すべての依存関係を持つodbc用のpostgresqlドライバーをインストールします。 Debian / Ubuntuの場合、これは次のコマンドで実行されます。
#apt-get install unixodbc odbc-postgresql
odbcドライバーの説明ファイルを次の形式にします。
#cat /etc/odbcini.ini [PostgreSQL ANSI] Description = PostgreSQL ODBC driver (ANSI version) Driver = /usr/lib/x86_64-linux-gnu/odbc/psqlodbca.so Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcpsqlS.so Debug = 0 CommLog = 1 UsageCount = 1 [PostgreSQL Unicode] Description = PostgreSQL ODBC driver (Unicode version) Driver = /usr/lib/x86_64-linux-gnu/odbc/psqlodbcw.so Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcpsqlS.so Debug = 0 CommLog = 1 UsageCount = 1
32ビットシステムの場合、ドライバーへのパスは異なります。
以前に作成したデータベースへの接続を作成します。
# cat /etc/odbc.ini [config] Description = PostgreSQL connection to 'asterisk' database Driver = PostgreSQL ANSI Database = asterisk Servername = 192.168.204.167 UserName = asterisk Password = Uidj$5tuYF Port = 5432 Protocol = 9.1 KSQO = No ReadOnly = No RowVersioning = No ShowSystemTables = No ShowOidColumn = No FakeOidIndex = No ConnSettings =
データベースへの接続を確認します。
isql config
次のプロンプトが表示された場合:
+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
接続が正常に機能していることを意味します。
この接続を/etc/asterisk/res_odbc.confに登録します。
[asterisk] enabled => yes dsn => config username => asterisk password => Uidj$5tuYF pre-connect => yes
ステップ2. DEFおよびABCリージョンコードを使用してテーブルを作成し、入力する
データベースサーバーで、内部にアスタリスクデータベースを作成します。このデータベースには、おおよそ次の表を作成します(最低限必要な列数を指定します)。
CREATE TABLE zones ( def smallint NOT NULL, start integer NOT NULL, finish integer NOT NULL) WITHOUT OIDS;
次のスクリプトを実行して、作成したテーブルに入力します。
#!/bin/bash REGION='' echo "COPY zones FROM stdin;" > zones.sql wget -q http://www.rossvyaz.ru/docs/articles/DEF-9x.html -O DEF-9x.html cat DEF-9x.html|iconv -f cp1251 -t utf8|grep -i $REGION|awk '{print($3"\t"$6"\t"$9)}' >> zones.sql rm DEF-9x.html wget -q http://rossvyaz.ru/docs/articles/ABC-3x.html -O ABC-3x.html cat ABC-3x.html |iconv -f cp1251 -t utf8|grep -i $REGION|awk '{print($3"\t"$6"\t"$9)}' >> zones.sql rm ABC-3x.html wget -q http://rossvyaz.ru/docs/articles/ABC-4x.html -O ABC-4x.html cat ABC-4x.html |iconv -f cp1251 -t utf8|grep -i $REGION|awk '{print($3"\t"$6"\t"$9)}' >> zones.sql rm ABC-4x.html wget -q http://rossvyaz.ru/docs/articles/ABC-8x.html -O ABC-8x.html cat ABC-8x.html |iconv -f cp1251 -t utf8|grep -i $REGION|awk '{print($3"\t"$6"\t"$9)}' >> zones.sql rm ABC-8x.html echo "\." >> zones.sql psql -U asterisk -d asterisk -c 'DELETE FROM zones' psql -U asterisk -d asterisk -f zones.sql rm zones.sql
ステップ3.アスタリスクの追加機能の機能を説明する
/etc/asterisk/func_odbc.confで説明する追加の関数が必要になります
[ZONES] prefix=CHECK dsn=asterisk readhandle=asterisk readsql=SELECT count(*) from zones where def='${ARG1:1:3}' and start<='${ARG1:4}' and finish>='${ARG1:4}'
ステップ4:必要な指示のコンテキストを書く
最後のステップ:コンテキストを説明します。
最初のコンテキストは、ゾーン内コールのみが許可されているサブスクライバ向けです。
[zones] include => template
長距離電話が許可されている人の2番目:
[meggorod] include => template
はい、それらは同じです:
[template] exten => _8XXXXXXXXXX,1,GotoIf($["${CHECK_ZONES(${EXTEN})}" = "1"]?4) same => 2,GotoIf($["${CONTEXT}" = "meggorod"]?6:error,1) same => 3,Hangup() same => 4,Dial(SIP/prov1/${EXTEN},30,tTS(3600)gxX) same => 5,Hangup() same => 6,Dial(SIP/prov2/${EXTEN},30,tTS(3600)gxX) exten => error,1,Playback(an-error-has-occured) exten => error,n,Hangup()
まあ、それがすべてのようです。 このオプションは理想とはほど遠いですが、機能します。