În timp ce îmi făceam de cap cu trixbox, mă gândeam la faptul că sunt mulți furnizori de servicii la care plata se face lunar și se mai întâmplă să uiți să ajungi să îți achiți facturile și te trezești cu serviciul respectiv suspendat. Nu ar fi mai frumos din partea lor să îți dea un telefon și să te anunțe: „Mai Gheorghe, vezi că luna asta nu ti-ai plătit factura. Hai și o plătește”.
Așa ar putea proceda providerul de internet, furnizorul de televiziune prin cablu, colosul care deține monopolul pe furnizarea energiei electrice, hoții de la asociațiile de locatari, țeparii de la firmele de asigurări și lista poate continua.
Căt de greu poate fi să implementezi un asemenea serviciu? Hmm.. păi hai să încercăm.
Pentru teste am luat un computer cu procesor Intel Pentium II la 400Mhz, cu 128MB RAM, HDD de 3GB și cu un amărât de CD-ROM. Dap, ați citit bine, este vorba de o antichitate. Din fericire păstrez câteva antichități prin casă pentru diferite teste și scenarii posibile.
Am făcut apoi un download rapid a versiunii 7.2-RELEASE a sistemului de operare FreeBSD de pe site-ul http://www.freebsd.org , am inscripționat imaginea ISO pe un CD și m-am apucat de o instalare minimală ( un singur slice, o partitie pentru swap de 256MB, restul până la 3GB lăsat pentru /, nici un pachet insatalt, configurat un user, parola de root, interfata de retea, acces SSH, timezone).
Am luat apoi rapid cu pkg_add -vr asterisk varianta precompilata a binecunoscutului Asterisk . Bineînțeles că s-a instalat fără probleme, împreună cu toate dependințele de care avea nevoie. Chiar dacă partea hardware este destul de slabă, aceste operații nu au durat mai mult de câteva minute.
A urmat partea delicată a operației, configurarea pentru a realiza ceea ce mi-am propus.
Pentru a putea apela orice număr de telefon (fix, mobil, național, internațional) am folosit un cont SIP de la Euroweb (Eurovoice). Am mai definit deasemenea o extensie cu numărul 100 pentru un softphone (Xlite) pe care să îl folosesc pentru înregistrarea mesajului.
Pentru că nu aveam nevoie de toate facilitățile oferite de asterisk ci doar să testez scenariul propus, am făcut back-up la fișierele de configurare și am început o configurare minimală.
Astfel, am început cu fișierul modules.conf, în care am lăsat doar:
[modules]
autoload=yes
noload => pbx_gtkconsole.so
noload => chan_alsa.so
Urmează editarea fișierului sip.conf, în care se trec informațiile despre trunk-ul SIP conectat la eurovoice și contul dedicat softphone-ului. În exemplul următor am înlocuit datele de autentificare ale contului VoIP eurovoice (utilizator, parola), deci trebuie să fiți atenți să le completati cu datele voastre de acces. În privința codecurilor, permit doar folosirea ulaw ( vezi G.711 – standard ITU-T)
Pentru softphone am alocat extensia cu numarul 100, iar parola de logare am setat-o „100”.
[general]
context=master
register => utilizator_eurovoice:parola_eurovoice@pp.eurovoice.ro
allowoverlap=no
bindport=5060
bindaddr=0.0.0.0
srvlookup=yes
disallow=all
allow=ulaw
[authentication]
[100]
type=friend
host=dynamic
secret=100
context=master
nat=yes
[eurovoice]
context=master
type=friend
insecure=invite
canreinvite=no
permit=193.231.78.10
secret=parola_eurovoice
username=utilizator_eurovoice
host=pp.eurovoice.ro
fromuser=utilizator_eurovoice
fromdomain=pp.eurovoice.ro
Urmează construirea fișierului extensions.conf, fișier care dictează comportamentul trunchiurilor și extensiilor. Pentru aceasta avem nevoie să ne stabilim clar cerințele. Astfel, mi-am propus ca sistemul să se comporte astfel:
– înregistrăm extensia 100;
– toate apelurile care vin pe trunchiul SIP să fie direcționate către extensia 100, cu timeout de 20 secunde;
– extensia 100 să poate transfera apelul;
– de la extensia 100 să se poate iniția apeluri folosind trunchiul SIP, dar înaintea numărului să se formeze cifra 9;
– de la extensia 100 să putem înregistra mesajul audio care trebuie transmis către clientul final;
– pentru înregistrarea mesajului audio, se va forma numărul 2051 folosind softphone-ul, sistemul va răspunde cu un beep, dupa care va înregistra ce primește de la extensia respectivă (100);
– terminarea înregistrării mesajului va fi semnalizată sistemului de către utilizator prin apăsarea tastei # (diez);
– sistemul va reda mesajul înregistrat către utilizatorul care l-a înregistrat, după care acesta poate închide convorbirea;
[ad#google-adsense]
Aceste lucruri se transpun în fișierul extensions.conf în felul următor:
[general]
static = yes
writeprotect = no
clearglobalvars = no
priorityjumping = no
[globals]
CONSOLE => Console/dsp
[master]
include => record-outboundmsgs
exten => 100,1,Dial(SIP/100,20,Ttr)
exten => numar_telefon_eurovoice,2,Dial(SIP/100,20,Ttr)
exten => _9.,1,Dial(SIP/${EXTEN:1}@eurovoice,120,Tt)
[outboundmsg1]
exten => s,1,Set(TIMEOUT(digit)=5)
exten => s,2,Set(TIMEOUT(response)=10)
exten => s,3,Answer
exten => s,4,Wait(1)
exten => s,5,Background(outboundmsgs/msg1) ; „play outbound msg”
exten => t,2,Hangup
[record-outboundmsgs]
exten => 2051,1,Wait(2)
exten => 2051,2,Record(outboundmsgs/msg1:gsm)
exten => 2051,3,Wait(2)
exten => 2051,4,Playback(outboundmsgs/msg1)
exten => 2051,5,wait(2)
exten => 2051,6,Hangup
Mesajul pe care îl înregistrăm pentru a-l trimite clienților finali va fi stocat pe hard-disc-ul acestei mașini, iar pentru aceasta trebuie să creem un director în care să îl stocăm, operație cu care o facem cu comanda:
mkdir /usr/local/share/asterisk/sounds/outboundmsgs
Proprietarul acestui director trebuie să fie utilizatorul sub care rulează asterisk pe mașină, în cazul meu este root, deci nu trebuie să acord alte permisiuni de scriere/citire.
În acest moment putem reporni serviciul asterisk cu comanda /usr/local/etc/rc.d/asterisk restart și configura softphone-ul pentru a se autentifica la serverul VoIP proaspăt configurat.
Configurarea softphone-ului X-Lite este foarte simplă, se merge în meniu la opțiunea SIP Account Settings, se dă click pe butonul Add și se completează câmpurile de acolo, cu următoarele date:
User name: 100
Password: 100
Authorization user name: 100
Domain: adresa_ip_a_masinii_pe_care_ruleaza_asterisk
Se bifează deasemenea opțiunea: Register with domain and receive incoming calls
Se poate înregistra acum mesajul, dupa cum spuneam prin formarea numărului 2051, finalizând înregistrarea prin apăsarea tastei # și ascultând apoi mesajul înregistrat. Se poate testa accesul la exterior pe trunchi, formând numărul dorit, precedat de cifra 9.
În acest moment totuși nu avem un sistem care să ofera facilitatea a suna clientii și a le transmite mesajul vocal înregistrat.
Vom simula această operație pentru un singur număr de telefon, prin creearea unui fișier /var/spool/asterisk/temporar cu următorul conținut:
Channel: SIP/numarul_la_care_sunam@eurovoice
Callerid: numarul_nostru_eurovoice
MaxRetries: 5
RetryTime: 300
WaitTime: 45
Context: outboundmsg1
Extension: s
Priority: 1
Atenție la înlocuirea numarului_la_care_sunam si numarul_nostru_eurovoice în exemplul de mai sus. Cuvăntul eurovoice din prima linie reprezintă context-ul trunchiului, așa cum este definit în fișierul sip.conf.
Acest fișier temporar trebuie plasat în directorul /var/spool/asterisk/outgoing, lucru pe care îl facem cu comanda:
mv /var/spool/asterisk/temporar /var/spool/asterisk/outgoing/
Folosim comanda mv și nu cp pentru că comanda mv mută inod-ul (pointer-ul) fișierului și acesta apare complet dintr-o dată în noua locație, eliminându-se astfel probabilitatea ca asterisk să citească doar o parte din fișier, lucru care este probabil să se întâmple dacă folosim comnda cp.
Imediat după această mutare observăm că apelul este inițiat, iar atunci când clientul răspunde va auzi mesajul preînregistrat. Dacă clientul nu răspunde la telefon, sistemul va reîncerca apelarea acestuia de 5 ori, la interval de 300 de secunde. Se observă că acești timpi se pot modifica din variabilele prezente în fișierul respectiv.
Pot considera testul reușit. Bineînțeles că exemplul trebuie dezvoltat și scalat pentru a putea fi folosit în producție, dar se vede că împlementarea soluției nu este foarte dificilă. Ca și costuri pentru eventuali furnizori care doresc să împlementeze serviciul ar fi doar costul hardware-ului și a convorbirilor telefonice, deoarece softul este free, adica gratuit,OPEN-SOURCE.
Super cute!
E bine de stiut..