Sternchen Wählplan Askozia 6. Ausgehende Anrufe

Der Artikel wird über die kostenlose PBX Askozia Version 6 sprechen. Bei der Entwicklung einer Telefonzentrale war eine der ersten Aufgaben die Organisation ausgehender Anrufe.

Wie war es


In der alten Version von Askozia wurden Standard-Wählplanvorlagen verwendet.

  • X! - alle Telefonnummern
  • XXX - dreistellige Zahlen
  • .! - absolut alle Telefonnummern

Ein Beispiel für einen Kontext kann schematisch beschrieben werden:

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

Es schien uns, dass dieser Ansatz nicht flexibel genug ist. Es gibt keine Möglichkeit, die folgende Regel zu beschreiben:

  • Nummer beginnt bei 79
  • Es folgt entweder 35 oder 26
  • Der Rest der Nummer besteht aus 7 Ziffern

Im Rahmen des Schnitts werden unser Ansatz und das Ergebnis der Entwicklung beschrieben.

Aktuelle Implementierung


Wir haben uns entschlossen, diese Funktionalität mit REGEX anders zu implementieren .

Vorlagenbeispiel:

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

  • (25 | 26) ist 25 ODER 26
  • [0-9] - eine Ziffer von 0 bis 9, die ab dem 1. oder mehreren Mal auftritt
  • {7} - Anzahl der Vorkommen des vorherigen Zeichens

Die Syntax für die REGEX-Funktion lautet:

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

Ein Anwendungsbeispiel in 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() 

Für ausgehende Anrufe ist ein Einstiegspunkt organisiert - der " ausgehende " Kontext, in dem die " ExecIf " -Funktion aufgerufen wird:

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

Wenn die in der Variablen „ $ {EXTEN} “ angegebene Telefonnummer mit dem Muster übereinstimmt, wird der Anruf mit der Funktion „ Gosub “ an den Unterkontext weitergeleitet.

Wenn der Anruf im Unterkontext nicht unterbrochen wurde, wird der Satz gemäß der folgenden entsprechenden Regel ausgeführt.

Auf diese Weise haben wir das Problem mit Einkanalleitungen gelöst. Wenn die Leitung besetzt ist, wird der nächste Anruf weitergeleitet, bis er beantwortet wird.

Kontextbeispiele:

 [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 

Obligatorisch in " sub " - der Kontext prüft " DIALSTATUS ". Wenn der Anruf entgegengenommen wird, wird der Kanal nach dem Gespräch mit der Funktion „ Hangup () “ beendet. Wenn dies nicht erfolgt, kann es am Ende des Anrufs durch den Client zu einem erneuten Wählen der Client-Nummer kommen.

Eine wichtige Subtilität: Wenn Sie " Gosub " oder " Goto " verwenden, ändern wir absichtlich nicht $ {EXTEN} . Auch wenn Sie die Telefonnummer ändern müssen (Präfix hinzufügen / entfernen).

Tatsache ist, dass Asterisk beim Ändern von EXTEN den Wert der CDR- Variablen (dst) ändert , was zu einem schlecht vorhergesagten Ergebnis in der CDR-Anrufverlaufstabelle führt. Ich denke, es ist in der Geschichte wichtig, die von einem Mitarbeiter gewählte Nummer beizubehalten.

Seien Sie vorsichtig, wenn Sie einen regulären Ausdruck beschreiben. Verwenden Sie die Zeichen " ^ ", den Zeilenanfang und " $ " - das Zeilenende, da sonst unerwartete Ergebnisse auftreten können.

Beispielsweise entspricht das Muster " [0-9] {6} " allen Zahlen mit 6 oder mehr Ziffern. Das Muster " ^ [0-9] {6} $ " entspricht nur 6-stelligen Zahlen.

Zusammenfassung


Wir haben ein flexibles Subsystem zur Beschreibung des ausgehenden Routings zur TK-Anlage.
Die Liste der Regeln wird wie folgt angezeigt:

Bild

Ein Beispiel für eine bestimmte "Regel" -Karte:

Bild

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


All Articles