アスタリスクのコールバック+ DIDを使用した自明ではないタスク

親愛なるハブラビテスとアスタリスク愛好家の皆さん、こんにちは!
興味深いタスクとその解決策を共有したいと思います。 だから、ここに問題の条件があります。
私たちが持っています:
-変更されたディストリビューションElastix 2.3
-アスタリスク1.8.13.1
-FreePBX 2.8.1
-SIPと30チャネルを介して接続する24の番号
-持株の一部として〜40種類のLLC
現在のタスク:
-DID番号ごとにコールバックサービスを作成します(それに応じて、各LLCからも)

「freePBXで、すべてマウスを使って行われます」と思われます。 これは完全に真実ではありません。

最初のステップ。 問題の認識。


elastix Webインターフェースを使用して構成します。 私は彼が本当に好きです。
PBX-> PBX Configuration-> Callbackに移動し、コールバックのデータを入力します。
IVRセクションに移動し、目的のメニューを選択して、たとえばコールバック「9」を設定します。
私はチェック-すべてが動作します。 28-xx-yyから呼び出しました-呼び出しは28-xx-yyから返されました
28-xx-xxのIVRでも同じでした-呼び出しは28-xx-yyから返されました
同意します。製品を注文するために電話をかけるのは非論理的で、工場番号から電話がかかります。 そして、そのような組織はかなりあります。
ここから現在のタスクが流れました。28-xx-xxを呼び出すことにより、28-xx-xxからコールが返される必要があります。

ステップ2 elastix / FreePBX Webインターフェースからソリューションを見つける


すぐに言います。 たぶんそうですが、見つけられませんでした。

ステップ3 構成ファイルを直接調べる


コールバックのコンテキストはextensions_additional.confファイルにあります
[callback] include => callback-custom exten => 1,1,Set(CALL=${CALLERID(number)}) exten => 1,n,Set(DESTINATION=ivr-5.s.1) exten => 1,n,Set(SLEEP=1) exten => 1,n,System(/var/lib/asterisk/bin/callback ${CALL} ${DESTINATION} ${SLEEP} &) exten => 1,n,Hangup 

呼び出しはphpスクリプト/ var / lib /アスタリスク/ bin /コールバックから行われることがわかります
スクロールすると、呼び出しがローカルチャネルから行われ、発信ルート(発信ルート)のルールに従って発信されることがわかります。
そして、1日考えた後、コールバックからダイヤルするときにプレフィックスに基づいて目的のDIDを作成するというアイデアが訪れました。

4番目のステップ。 問題解決


明確にするために、次のロジックを示します。


技術面は非常に「複雑」であることが判明しました。 ご存じのように、FreePBXは保存されるたびにextensions_additional.confを再読み取りします。 Web経由で新しいユーザーを追加しました-現在のコンテキストを適用します。
これに対する解決策は、extensions_override_freepbx.confファイルを使用することですが、それはうまくいきませんでした。 主な問題の解決策はすでに空中のどこかに飛んでいたので、私は1時間以上勉強しませんでした。 私は本能的に、最も可能性の高い理由は、サーバー上で多くの部分が書き直されていることに気づきました。

コンテキストを見る[コールバック]
DIDをCALL変数に渡す必要があります。 callback-customを使用してこれを行うことは無意味です-とにかく、変数はメインコンテキストの下位で再割り当てされます。 そして、 役に立つ記事を思い出しました。
extensions_custom.confの[callback]をコピーして作成された[callback-az]コンテキストを追加し、CALL変数にFROM_DIDを追加します
 [callback-az] exten => 1,1,Set(CALL=${FROM_DID}${CALLERID(number)}) exten => 1,n,Set(DESTINATION=ivr-5.s.1) exten => 1,n,Set(SLEEP=1) exten => 1,n,Set(DESC='callb_CRT') exten => 1,n,System(/var/lib/asterisk/bin/callback ${CALL} ${DESTINATION} ${SLEEP} ${DESC} &) 

電話のオペレーターの場合、発信者は単純に表示されます-「 コールバック
私は先に進みます、それはパニックを引き起こしました-結局のところ、彼らは多くの組織に仕え、彼らはどこに電話が来たのかを見たいです。 論理的には、議論することはできません。
したがって、上記のコンテキストでは、DESC変数、テキストを追加し、コールバックスクリプトに送信しました。 みんなに合った。

次に、スクリプト/ var / lib /アスタリスク/ bin /コールバック自体を変更します-既に述べたように、これは単純なphpスクリプトです。
誰もが次に何が起こるかをすでに理解していると思います。
探している
 $callback_number = $args[0]; $callback_destination = $args[1]; $pause_seconds = $args[2]; 

下に貼り付け
 $callback_desc = $args[3]; 

探している
 $callerid = "Callback" 

に置き換える
 $callerid = $callback_desc; 

できた 次に、コンテキストを正しく呼び出す必要があります。
上記の有用な記事と写真を思い出します。
Elastixにはカスタム宛先モジュールがないため、FreePBXに直接登ります。 次の場所にあります。
ip-add/admin
ログインとパスワードは標準で、Googleで簡単に操作できます。

このようにします:

説明します。 行callback-azの最初の「1」 、1,1はコンテキスト[callback-az]からのコールバック番号です-コンテキストで複数のコールバックを取得します(各DIDに1つ)。 2番目の「1」は優先順位番号です。

さて、最後の仕上げ-DIDのIVRに番号9を示します-カスタム宛先

そして、それは各DIDとコールバックのためです

アウトバウンドルートにプレフィックスを追加することを忘れないでください! これについてはお話ししませんが、これはまさにマウスで簡単にできることです。

おわりに


私は自分をアスタリスクの第一人者とは考えていません。 誰かがより良く、より正確に行う方法を知っていると確信しています。 自分の道を見つけて、コミュニティと共有したい。
どうもありがとう。

Source: https://habr.com/ru/post/J176751/


All Articles