Plan de numerotare
Planul de numerotare este un șir de caractere care descrie setul de numere care pot fi formate de utilizatorul unui telefon la un moment dat.
Implementări în MGCP și Megaco
Megaco activează descriptorul Digit Map într-o comandă Add, Modify sau Subtract pentru a configura planul de numerotație dintr-un MG pentru ca acesta să detecteze și să raporteze cifrele recepționate la o terminație. Descriptorul Digit Map conține numele și valoarea pentru Digit Map (Planul de Numerotație) care să fie aplicat in acel moment. Planul de numerotație este activat dacă descriptorul de evenimente este aplicat pe MG.
MGCP activează parametrul pentru planul de numerotație prin intermediul unei solicitări de notificare expresă sau încapsulată într-o comandă Create Connection, Modify Connection sau o comandă Delete Connection, care poartă definiția Digit Map. Parametrul de Digit Map reprezintă numai o valoare sau chiar planul de numerotație care să fie implementat.
Atât în MEGACO cât și MGCP, MG așteaptă evenimente le formare de cifre să se întâmple și detectează mai departe o potrivire parțială sau una completă, sau una care a depășit deja pragul de potrivire. In oricare dintre aceste cazuri, șirul de cifre formate este raportat MGC-ului. Atât MGCP cât și Megaco suportă aplicare unui timp maxim între cifre în timp ce colectează cifrele.
Call Agentul poate cere gateway-ului să colecteze cifrele formate de către utilizator. Această facilitate este menită pentru a fi folosită de către gateway-urile rezidențiale pentru a colecta numerele pe care un utilizator le formează; poate de asemenea să fi folosită în cazul trunking gateways și access gateways, pentru a colecta codurile de acces, numerele de cărți de credit și alte numere cerute de diferite aplicații.
O procedură care poate fi utilizată este aceea ca gateway-ul să notifice Call Agentul cu fiecare cifră, de îndată ce a fost formată. Totuși, o astfel de procedură generează un număr mare de interacțiuni. Este de preferat să se acumuleze cifrele formate într-un buffer și să fie transmise într-un singur mesaj.
Problema tratării acestei acumulări este aceea că este greu pentru un gateway să prevadă câte cifre trebuie să acumuleze până să transmită. De exemplu, folosind telefonul de pe biroul nostru, am putea forma următoarele numere:
Număr | Descriere |
---|---|
0 | Operatorul local |
00 | Operatorul de distanță lungă |
xxxx | Numărul de extensie locală |
9xxxxxxx | Număr local |
#xxxxxxx | Scurtătură către un număr local |
#xx | Alte locații ale firmei |
90xxxxxxxxxx | Număr interurban |
900+până la 15 cifre | Număr internațional |
Soluția acestei probleme este ca MGC să încarce pe gateway un plan de numerotație. Această hartă de cifre este formulată folosind o sintaxă derivată din sistemele Unix, egrep. De exemplu, din planul de numerotație descris anterior rezultă următorul plan de numerotație:
(0T|00T|[1-7]xxx|9xxxxxxx|#xxxxxxx|*xx|90xxxxxxxxxx|900x.T)
Sintaxa formală pentru planul de numerotație este descrisă de regula DigitMap în sintaxa formală de descriere a protocolului – suportul pentru litere primare ale planului de numerotație este obligatoriu, în timp ce suportul pentru literele extinse ale hărții de cifre este opțională. Un gateway care a recepționat un planul de numerotație cu o literele extinse și care nu suportă acest lucru trebuie să răspundă cu codul de eroare 537 (extensie a planului de numerotație necunoscută).
Un plan de numerotație, în conformitate cu această sintaxă este definită fie printr-un „șir” (case insensitive) fie printr-o listă de șiruri. Fiecare șir din listă este o schemă alternativa de numerotație, fiind specificată fie ca un set de cifre sau timere, fie ca o expresie peste care gateway-ul va încerca să găsească cea mai scurtă potrivire posibilă. Următoarea construcție poate fi utilizată în fiecare schemă de numerotare:
- Cifră: O cifră de la "0" la "9".
- Timer: Un simbol "T" ce reprezintă expirarea unui timer.
- DTMF: O cifră, un timer sau unul din simbolurile "A", "B","C", "D", "#" sau "*". Se pot defini extensii.
- Multiselecție: Simbolul "x" care se potrivește oricărei cifre, ("0" la "9").
- Interval: Unul sau mai multe simboluri DTMF între paranteze pătrate ("[" și "]").
- Subinterval: Două cifre separate prin minus ("-") care se potrivește oricărei cifre între și incluzându-le pe cele două. Construirea subintervalul poate fi făcută numai în interiorul unei construcții de tip interval, exemplu, între "[" și "]".
- Poziție: Un punct (".") care se potrivește unui număr arbitrare, incluzând zero, de apariții a construcției anterioare.
Un gateway care detectează evenimente care se potrivesc cu planul de numerotație TREBUIE să facă următoarele:
- Adaugă codul evenimentului drept token la sfârșitul variabilei de stări internă pentru endpoint-ul apelat pentru " șirul curent de cifre formate".
- Aplică „șirul curent de cifre formate” hărții de cifre, încercând să găsească o potrivire pentru fiecare expresie din planul de numerotație.
- Dacă rezultatul nu se califică (potrivire parțială pentru cel puțin o cifră din planul de numerotație și nu se potrivește complet cu altă intrare din listă), nu mai face nimic.
Dacă rezultatul se potrivește cu o intrare din listă sau este supra-calificat (exemplu: următoarele cifre nu au cum să mai producă o potrivire), trimite lista de evenimente acumulate Call Agentului. O potrivire, în această specificație, poate să fie deci fie o „potrivire perfectă”, în care se potrivește perfect o alternativă specificată, fie o potrivire imposibilă, care se întâmplă când șirul format nu se potrivește cu nici o alternativă.
Expirările neașteptate, de exemplu, pot provoca „potriviri imposibile”. Atât potrivirile perfecte cât și potrivirile imposibile declanșează notificări cu cifrele acumulate.
Următorul exemplu ilustrează cele de mai sus. Presupunând planul de numerotație:
(xxxxxxx|x11)
și șirul curent de cifre formate "41". Dacă se introduce "1" șirul curent de cifre formate devine "411". Avem o potrivire parțială cu "xxxxxxx", dar avem o potrivire completă cu "x11", și deci vom transmite "411" către Call Agent.
Următoarea hartă de cifre, data ca exemplu, este mai subtilă:
(0[12].|00|1[12].1|2x.#)
Dată fiind introducerea lui "0", o potrivire completă se va produce imediat pentru că poziția(".") permite zero apariții ale construcției precedente. Intrarea "00" nu va putea, în consecință, să se producă niciodată conform acestui planul de numerotație.
Dată fiind introducerea lui "1", avem numai o potrivire parțială. Introducerea "12" este de asemenea o potrivire parțială, totuși și "11" și "121" sunt potriviri.
Dată fiind introducerea lui "2", există o potrivire parțială. O potrivire parțială există de asemenea pentru inputul "23", "234", "2345", etc. O potrivire completă nu se va întâmpla aici până nu va fi generat un "#"(exemplu: "2345#"). Inputul "2#" ar fi de asemenea o potrivire.
De remarcat că planurile de numerotație definesc simple secvențe de potrivire pentru secvențele de evenimente conform unei gramatici. Deși planurile de numerotație sunt definite aici pentru intrări de tip DTMF, package-uri de extensie pot fi definite astfel încât planurile de numerotație să poată fi utilizate și pentru alte tipuri inputuri reprezentate prin coduri de evenimente care aderă la sintaxa hărții de cifre definite pentru aceste coduri (exemplu: "1" sau "T"). În astfel de utilizări, definiția unui/unor evenimente particulare ar trebui să fie precizată în definiția package-ului.
Din cauză că planurile de numerotație nu sunt limitate la anumite dimensiuni, este recomandat ca gateway-urile să suporte hărți de cifre de cel puțin 2048 bytes per endpoint.
Recomandări
Citiți de asemenea despre Voce pe IP, MGCP și Megaco pentru a înțelege mai bine contextul în care se folosesc aceste noțiuni.
Alte protocoale de Voce pe IP
Legături externe
- ro Noul Plan Național de Numerotare al României valabil din august 2008