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ドライバーの説明ファイルを次の形式にします。
32ビットシステムの場合、ドライバーへのパスは異なります。
以前に作成したデータベースへの接続を作成します。
データベースへの接続を確認します。
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;
次のスクリプトを実行して、作成したテーブルに入力します。
ステップ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()
まあ、それがすべてのようです。 このオプションは理想とはほど遠いですが、機能します。