どうでしたか
古いバージョンのAskoziaでは、標準の「ダイヤルプラン」 テンプレートが使用されていました。
- X! -すべての電話番号
- XXX -3桁の数字
- 。! -絶対にすべての電話番号
コンテキストの例を概略的に説明できます。
[outgoing] exten => _XXXXXX!,1,NoOp(Start outgoing calling...) same => n,Dial…
このアプローチは十分に柔軟性がないように思われました。 次のルールを説明する方法はありません。
- 番号は79から始まります
- 35または26のいずれかに続きます
- 残りの数字は7桁です
カットの下で、私たちのアプローチと開発の結果が説明されています。
現在の実装
REGEXを使用して 、この機能を異なる方法で実装することにしました。
テンプレートの例:
79(25|26)[1-9]{7}
- (25 | 26)は25 OR 26
- [0-9]-0〜9の数字、1回以上の出現
- {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へのアウトバウンドルーティングを記述するための柔軟なサブシステムを得ました。
ルールのリストは次のように表示されます。
特定の「ルール」カードの例: