07 mar 2008 @ 12:53 AM 

Lo so che per i programmatori veri sarebbe una cosa nefanda,ma è pur sempre il primo programma sensato che ho scritto in .NET (usando C#).
Rimanendo nel campo VoIP mi sono fatto una applicazione web che genera un file xml di una rubrica per un Grandstream GXP 2000.
Sono all’inizio della programmazione, quindi non ci sono ne finezze, ne user control o altro! (usando .NET 2.0)
Ecco il codice della pagina (ometto la parte html, che contiene 3 campi testo per nome,cognome e numero)

using System;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
XmlDocument filexml = new XmlDocument();
filexml.Load(Server.MapPath(”public\\gs_phonebook.xml”));
XmlElement contatto = filexml.CreateElement(”Contact”);
filexml.DocumentElement.PrependChild(contatto);
XmlElement nomeNodo = filexml.CreateElement(”FirstName”);
XmlElement cognomeNodo = filexml.CreateElement(”LastName”);
XmlElement tel = filexml.CreateElement(”Phone”);
XmlElement telefonoNodo = filexml.CreateElement(”phonenumber”);
XmlElement accountNodo = filexml.CreateElement(”accountindex”);
XmlText nome = filexml.CreateTextNode(Nome.Text);
XmlText cognome = filexml.CreateTextNode(Cognome.Text);
XmlText telefono = filexml.CreateTextNode(Numero.Text);
XmlText account = filexml.CreateTextNode(”0″);
contatto.AppendChild(nomeNodo);
contatto.AppendChild(cognomeNodo);
contatto.AppendChild(tel);
tel.AppendChild(telefonoNodo);
tel.AppendChild(accountNodo);
nomeNodo.AppendChild(nome);
cognomeNodo.AppendChild(cognome);
telefonoNodo.AppendChild(telefono);
accountNodo.AppendChild(account);
filexml.Save(Server.MapPath(”public\\gs_phonebook.xml”));
}
}

Provate ad usarlo e vedrete che xml vi genererà!

Tags Tags: , , ,
Categories: Programmazione
Posted By: marco
Last Edit: 07 mar 2008 @ 12 54 AM

EmailPermalinkComments (0)
 11 mag 2007 @ 1:27 PM 

Vi propongo qui un piccolo sistema, un banale “proof-of-concept”, ovvero come farsi chiamare da Asterisk attraverso una pagina web e una volta risposto sentire il menù di un IVR.
Tutto chiaro no? :-D
Questo potrebbe essere usato da un azienda per non far pagare i propri clienti, magari sprovvisti di banda larga o telefonia ip in genere.
Con un qualsiasi editor creiamo una pagina php, ad esempio chiamami.php

<html>
<head>
<title> Silog ti chiama!</title>
</head>
<body>
<?

$strHost = “127.0.0.1″;
$strUser = “admin”;
$strSecret = “amp111″;
$strContext = “from-internal”;
$strWaitTime = “30″;
$strPriority = “1″;
$strMaxRetry = “2″;
$strExten = $_POST['txtphonenumber'];
$callNumber = $strExten;
$strCallerId = “Web Call <$callNumber> “;
$length = strlen($strExten);
if ($length == 10 && is_numeric($strExten))
{
$oSocket = fsockopen($strHost, 5038, $errnum, $errdesc) or die(”Connection to host failed”);
fputs($oSocket, “Action: login\r\n”);
fputs($oSocket, “Events: off\r\n”);
fputs($oSocket, “Username: $strUser\r\n”);
fputs($oSocket, “Secret: $strSecret\r\n\r\n”);
fputs($oSocket, “Action: originate\r\n”);
fputs($oSocket, “Channel: Local/$callNumber@from-internal\r\n”);
fputs($oSocket, “WaitTime: $strWaitTime\r\n”);
fputs($oSocket, “CallerId: $strCallerId\r\n”);
fputs($oSocket, “Exten: 699\r\n”);
fputs($oSocket, “Context: $strContext\r\n”);
fputs($oSocket, “Priority: 1\r\n\r\n”);
fputs($oSocket, “Action: Logoff\r\n\r\n”);
sleep(3);
fclose($oSocket);
?>
<p>
<table width=”300″ border=”1″ bordercolor=”#0f0f0f” cellpadding=”3″ cellspacing=”0″>

<tr>
<td> <p> <font color=”#000000″ size=”2″ face=”verdana,georgia”> Stiamo processando
la tua chiamata, entro pochi secondi squillerà il telefono al numero
che hai inserito.<br>
Sarai messo in contatto con il nostro call center gratuitamente!</font> </p>
<p> <font color=”#000000″ size=”2″ face=”verdana,georgia”> Silog Srl. – Divisione
VoIP <br>
<a xhref=”javascript:history.go(-1)” mce_href=”javascript:history.go(-1)” > riprova.</a> </font> </p> </td>
</tr>
</table>
<p>
<h3> <a xhref=”javascript:history.go(-1)” mce_href=”javascript:history.go(-1)” > Indietro</a> </h3>
</p>

<?
}
else
{
?>
<p>
<table width=”300″ border=”1″ bordercolor=”#0f0f0f” cellpadding=”3″ cellspacing=”0″>
<tr>
<td> <font size=”2″ face=”verdana,arial,georgia”
color=”#000000″> Inserisci il tuo numero di telefono, comprensivo di prefisso (es.
0577XXXXXX) sul quale vuoi ricevere la chiamata dal nostro sistema automatico.</font>
<form action=”<? echo $_SERVER['PHP_SELF'] ?> ” method=”post”>

<input type=”text” size=”20″ maxlength=”10″ name=”txtphonenumber”> <br>
<input type=”submit”
value=”Telefonami”>
</form>
</td> </tr>
</table>
</p>
<?
}
?>
</body>
</html>

Il codice praticamente si spiega da solo, andranno customizzati i parametri per il manager.conf, in questo caso admin ed amp111 (una classica Trixbox) e la voce Extension, che nel mio caso 669 rappresenta il numero, nel contesto from-internal, dell’IVR.
Direi di una semplicità estrema!
PS. Silog è l’azienda dove attualmente lavoro, un pò pubblicità gratis ci vuole!

Tags Tags: , , , ,
Categories: Asterisk, Trixbox
Posted By: marco
Last Edit: 11 mag 2007 @ 02 38 PM

EmailPermalinkComments (0)
 30 nov 2006 @ 11:01 PM 

Non sapevo come intitolare questo post, sono andato sulla banalità! :-)
Per un progetto che stiamo portando avanti con un’Università, sto facendo varie prove, tra cui “interconessione” tra 2 PBX, utilizzo pratico di ENUM, fallback delle linee e tante amenità simili.
Alla base della mia demo ci sono 2 server Asterisk, uno di front-end puramente IP, un altro di back-end con una scheda Zaptel a cui è collegato un gateway gsm.
Il sistema riceve telefonate sia SIP che IAX, telefonando direttamente via questi indirizzi al PBX, oppure facendo risolvere questi servizi da ENUM (vedi qualche mio post precedente).
Innanzittutto il context di default in sip.conf e iax.conf sarà from-internet, intercettando così tutto il traffico che proviene “dall’esterno”.
In extensions.conf avremo:

[from-internet]
exten=>390577xxxxxx,1,Dial(SIP/xlite,30)
exten=>390577xxxxxx,2,GotoIf(($[${DIALSTATUS}=CHANNELUNAVAIL]?3:4)
exten=>390577xxxxxx,3,Goto(switch_to_backend,MIOCELLULARE,1)
exten=>390577xxxxxx,4,Goto(102)
exten=>390577xxxxxx,102,Hangup

Nella prima linea abbiamo che tutte le telefonate a quel numero telefonico saranno indirizzate verso l’estenzione xlite, il mio softphone.
Se questo non è collegato, la variabile DIALSTATUS assumerà valore CHANNELUNAVAIL e la chiamata (alla linea 3) sarà switchata verso il server di back-end.
La funzione switch permette di effettuare il forwarding delle chiamate verso un altro server , loggandosi con un utente di quel server e “dirottando” la chiamata in un contesto del dialplan del server remoto.
In generale switch ha questa sintassi

switch => IAX2/user:[key]@server/context

Quindi nell’extensions.conf del server di front-end avremo:

[switch_to_backend]
switch => IAX2/user:password@ip_server_backend/from-internal

Nel contesto from-internal del server di back-end ovviamente c’è un pattern che “intercetta” le chiamate verso i cellulari, quindi la chiamata sarà dirottata verso i gateway GSM (sono due porte FXO, gruppo 3, a ricerca ciclica)

exten=>_3XXX.,1,Dial(ZAP/r3/${EXTEN})

Complesso? ;-)
Non troppo!!In vostro soccorso può giungere il grandissimo voip-info.org, sia per extensions.conf che per la connessione tra due server Asterisk (e mi ci metto anche io)

Tags Tags: , , , , ,
Categories: Asterisk, Enum, Telefonia
Posted By: marco
Last Edit: 03 dic 2006 @ 04 47 PM

EmailPermalinkComments (0)
 23 nov 2006 @ 10:24 PM 

…di usare ENUM! :-)
Qualche giorno fa parlai di ENUM, ovvero la convergenza tra la classica telefonia ed il mondo IP (ma non solo!!). Date un occhio qua.
Adesso è il momento di usarlo, magari con Asterisk!
Prima di tutto c’è da registrarsi ad un tree e164, quello che conosco io è e164.org, gratis ovviamente.
Una volta registrato il nostro numero telefonico ed associato il vari servizi (SIP,IAX2,TEL,MAIL etc..etc..) possiamo configurare un Asterisk e provare a chiamarci (va benissimo X-lite che ha due linee).
Prima di tutto dovrete prendere un pò di dimestichezza con la funzione ENUMLOOKUP (qui).
Cosa fa in breve questa funzione? Praticamente risolve un numero telefonico, con il prefisso internazionale nella dicitura DNS di e164 ed i servizi associati.
Uno degli usi più classici di questa funzione è quello di risolvere il primo servizio sip e usarlo per chiamare il corrispondente. (X è nel formato 39xxxxxxxxxxx)

[prova-enum]
exten=>_X.,1,Set(ENUMMY=${ENUMLOOKUP(+${EXTEN},sip,1,e164.org)}
exten=>_X.,2,Dial(SIP/${ENUMMY},30)

Ci sono però varie macro che permettono di automatizzare “l’estrapolazione” dei vari servizi censiti con e164 ed effetture una Dial. Una buona macro è disponibile qui.  

Tags Tags: , , ,
Categories: Asterisk, Enum, Telefonia
Posted By: marco
Last Edit: 03 dic 2006 @ 04 52 PM

EmailPermalinkComments (0)
 16 nov 2006 @ 10:55 PM 

Volete fare un centralino Asterisk ma senza tutti i fronzoli di Trixbox? Volete un centralino puramente IP, senza supporti per schede hardware o semplicemente per farlo girare su una virtual machine?
Allora installate una Debian!
Non entrerò nei meriti dell’installazione di GNU/Linux anche perchè ci sono ottime guide per questo, mentre per avere il nostro centralino puramente IP potete scaricare il sorgente dal sito www.asterisk.org.
Poi è necessario installare tre pacchetti .deb, ovvero libncurses5-dev, zlib1g-dev e libssl-dev con il solito comando apt-get install NOME PACCHETTO.
Il pacchetto può essere scompattato in /usr/src e compilato in 3 semplicissime mosse

make
make install
make samples (per le indispensabili configurazioni di base)

Se tutto si svolgerà senza errori, basterà eseguire il comando asterisk -vv (2 gradi di verbosità) per ottenere una schermata simile 

== Registered custom function CALLERID
[func_enum.so] => (ENUM Related Functions)
== Registered custom function ENUMLOOKUP
== Registered custom function TXTCIDNAME
[func_uri.so] => (URI encode/decode functions)
== Registered custom function URIDECODE
== Registered custom function URIENCODE
[format_mp3.so] => (MP3 format [Any rate but 8000hz mono optimal])
== Registered file format mp3, extension(s) mp3
[app_saycountpl.so] => (Say polish counting words)
== Registered application ‘SayCountPL’
Asterisk Ready.

(Ultime righe)

A questo punto CTRL+Z e poi bg (che sposterà l’esecuzione in background).
Semplice no?
Adesso potete configurarlo!! :-) (magari farò un breve tutorial in futuro proprio sulla configurazione base).

Tags Tags: , , , ,
Categories: Asterisk, Debian
Posted By: marco
Last Edit: 03 dic 2006 @ 05 18 PM

EmailPermalinkComments (0)
 13 nov 2006 @ 1:21 PM 

…questa è la frase che presto potremo dire ai nostri corrispondenti!
ENUM è un protocollo che permetterà la convergenza di due mondo attualmente separati, ovvero il mondo del DNS (risoluzioni dei nomi “Internet” in indirizzi IP) e la numerazione telefonica globale (E.164 ITU).
In altre parole con ENUM consentirà di associare ad un numero di telefono E.164 indirizzi relativi a diversi servizi di comunicazione, che potranno essere posta elettronica, telefonia fissa, mobile, navigazione internet ed ovviamente telefonia IP.
Alla base di tutto ci sarà la rappresentazione di un numero telefonico come fosse un indirizzo DNS, usando questa convezione

TEL. es +39.0577.xxxxxx
Prefisso DNS scelto per ENUM e164.arpaindirizzo enum completo x.x.x.x.x.x.7.7.5.0.9.3.e614.arpa

Semplice no? ;-)
Chi ha dimestichezza con indirizzi inversi IPv6 toterà una rassomiglianza nella rappresentazione.
E in una ipotetica interrograzione al DNS avremo ad esempio 

$ORIGIN x.x.x.x.x.x.7.7.5.0.9.3.e164.arpa.
IN NAPTR 100 10 “u” “SIP+E2U” “!^.*$!sip:pippo@pluto.it” .
IN NAPTR 102 10 “u” “MAILTO+E2U” “!^.*$!mailto:pippo@pluto.it”

Dove 100 e 102 è l’ordine di indirizzamento (preferenza), prima si teneterà di raggiungere l’utente via SIP e secondariamente attraverso al posta elettronica.
Mentre con E2U si intende E.164 to URI, inoltre in NAPTR sono i cosiddetti Naming Authority Pointer Resource Record (vedi RFC 2915)
Quindi riassumendo avremo che l’indirizzo ENUM sarà [NN].[CC].e614.arpa, dove NN sarà il nostro numero telefonico, CC il country code, e614 il tier-0 (dominio Enum) e arpa il top level domain (non è comune ai più, ma ha le stesse funzioni di .com .net .org .it e così via)
Per maggiori info su ENUM qui
Inoltre a breve avremo un incontro dove saranno conosceremo i risultati della sperimentazione ENUM nella Rete GARR.
Stay tuned!

Tags Tags: , ,
Categories: Enum, Internet, Telefonia, Varie
Posted By: marco
Last Edit: 03 dic 2006 @ 05 21 PM

EmailPermalinkComments (0)
\/ More Options ...
Cambia sfondo...
  • Users » 67
  • Posts/Pages » 299
  • Comments » 70
Change Theme...
  • VoidVoid « Default
  • LifeLife
  • EarthEarth
  • WindWind
  • WaterWater
  • FireFire
  • LightLight

Chi Sono?



    No Child Pages.

Consulenze



    No Child Pages.

Note Legali



    No Child Pages.

CV



    No Child Pages.