アスタリスク Dialplan Askozia 6.発信コール

この記事では、無料のPBX Askoziaバージョン6について説明します。 電話交換を開発するとき、最初のタスクの1つは発信通話の編成でした。



どうでしたか



古いバージョンのAskoziaでは、標準の「ダイヤルプラン」 テンプレートが使用されていました。





コンテキストの例を概略的に説明できます。



[outgoing] exten => _XXXXXX!,1,NoOp(Start outgoing calling...) same => n,Dial…
      
      





このアプローチは十分に柔軟性がないように思われました。 次のルールを説明する方法はありません。





カットの下で、私たちのアプローチと開発の結果が説明されています。



現在の実装



REGEXを使用して 、この機能を異なる方法で実装することにしました。



テンプレートの例:



 79(25|26)[1-9]{7}
      
      







REGEX関数の構文は次のとおりです。



 REGEX("regular expression" string) Return '1' on regular expression match or '0' otherwise
      
      





Askozia 6での使用例:



 [outgoing] exten => _X!,1,NoOp(Start outgoing calling...) same => n,Ringing() same => n,ExecIf($["${REGEX("^[0-9]{6}$" ${EXTEN})}" == "1"]?Gosub(SIP-PR-1-out,${EXTEN},1)) same => n,ExecIf($["${REGEX("^(7|8)[0-9]{10}$" ${EXTEN})}" == "1"]?Gosub(SIP-PR-2-out,${EXTEN},1)) same => n,Hangup()
      
      





発信コールの場合、1つのエントリポイントが編成されます-「 発信 」コンテキスト、「 ExecIf 」関数が呼び出されます。



 ExecIf($["${REGEX("^[0-9]{6}$" ${EXTEN})}" == "1"]
      
      





変数「 $ {EXTEN} 」で指定された電話番号がパターンと一致する場合、「 Gosub 」機能を使用してコールがサブコンテキストにルーティングされます。



呼び出しがサブコンテキストで中断されなかった場合、セットは次の適切なルールに従って進みます。



このようにして、単一チャネル回線で問題を解決しました。 回線がビジーの場合、コールは応答されるまで次の回線を通過します。



コンテキストの例:



 [SIP-PR-1] exten => _X!,1,ExecIf($["${number}x" == "x"]?Hangup()) same => n,Dial(SIP/PR-1/${EXTEN},600,TeK)) same => n,ExecIf($["${DIALSTATUS}" = "ANSWER"]?Hangup()) same => n,return [SIP-PR-2] exten => _X!,1,ExecIf($["${number}x" == "x"]?Hangup()) same => n,Dial(SIP/PR-2/${EXTEN},600,TeK)) same => n,ExecIf($["${DIALSTATUS}" = "ANSWER"]?Hangup()) same => n,return
      
      





sub 」では必須-コンテキストは「 DIALSTATUS 」をチェックします。 通話に応答すると、会話の後、「 ハングアップ() 」機能を使用してチャネルが終了します。 これが行われない場合、クライアントによるコールの終わりに、クライアント番号の再ダイヤルが発生する場合があります。



重要な微妙な点の1つは、「 Gosub 」または「 Goto 」を使用する場合、意図的に$ {EXTEN}を変更しないことです。 電話番号を変更する必要がある場合でも(プレフィックスの追加/削除)。



実際には、 EXTENが変更されると、アスタリスクはCDR変数(dst)の値を変更し、CDRコール履歴テーブルでの予測結果が不十分になります。 歴史上、従業員がダイヤルした番号を保持することが重要だと思います。



正規表現を記述するときは注意してください。 文字「 ^ 」、行の先頭、および「 $ 」-行の末尾を使用してください。そうしないと、予期しない結果が生じる場合があります。



たとえば、パターン「 [0-9] {6} 」は、6桁以上のすべての数字に対応します。 パターン「 ^ [0-9] {6} $ 」は、6桁の数字のみに一致します。



まとめ



PBXへのアウトバウンドルーティングを記述するための柔軟なサブシステムを得ました。

ルールのリストは次のように表示されます。



画像



特定の「ルール」カードの例:



画像







All Articles