Realizar una llamada con AMI y Java

1,615 views
Skip to first unread message

hdj

unread,
Oct 24, 2010, 9:33:10 AM10/24/10
to asterisk-es
Hola,

Estoy intentando hacer una llamada, pero no lo consigo, a ver si me
podéis orientar un poco.

Consigo logearme pero me da que no le estoy pasando bien los
parámetros.

Utilizo la librería asterisk-java-1.0.0.M3.jar y Asterisk 1.6

try {
CONTEL.servidorasterisk.initialize();

CONTEL.servidorasterisk.originateToExtension("SIP/
150-0000000e", "from-internal", "SIP/160", 1, 6000);
} catch (ManagerCommunicationException ex) {

Logger.getLogger(SACView.class.getName()).log(Level.SEVERE, null, ex);
}

Con el código de arriba se logeaa pero cuando intenta realizar la
llamada ocurre esto:
GRAVE: null
org.asteriskjava.live.ManagerCommunicationException: Timeout waiting
for events from OriginateAction
Caused by: org.asteriskjava.manager.EventTimeoutException: Timeout
waiting for response or response events to Originate


Luego he probado con otro ejemplo que encontré en la red:

import java.io.IOException;

import org.asteriskjava.manager.AuthenticationFailedException;
import org.asteriskjava.manager.ManagerConnection;
import org.asteriskjava.manager.ManagerConnectionFactory;
import org.asteriskjava.manager.TimeoutException;
import org.asteriskjava.manager.action.OriginateAction;
import org.asteriskjava.manager.response.ManagerResponse;

// Sample outgoing call
public class ExampleCallOut {
/* Cloudvox outgoing settings. If these aren't defined, create a
free account
and add an app at cloudvox.com. */
public static final String HOSTNAME = "192.168.0.199";
public static final int PORT = 5038;
public static final String USERNAME = "operadores";
public static final String PASSWORD = "elastix456";
public static final String CONTEXT = "from-internal";

private ManagerConnection managerConnection;
// Number to call (10 digits, no leading 1 or 9)
public String call = "160";

public ExampleCallOut() throws IOException {
// Cloudvox outgoing settings
ManagerConnectionFactory factory = new ManagerConnectionFactory (
HOSTNAME, PORT, USERNAME, PASSWORD);

this.managerConnection = factory.createManagerConnection();
}

public void run() throws IOException, AuthenticationFailedException,
TimeoutException {
OriginateAction originateAction;
ManagerResponse originateResponse;

originateAction = new OriginateAction();
/* Format the call for dialing
Channel example: Local/12065551234@outgoing-42 */
originateAction.setChannel("SIP/150" + call + "@" + CONTEXT);

/* What should happen when the phone is answered?
Send it to an Asterisk application that can reside anywhere
(AGI):
//originateAction.setApplication("AGI");
//originateAction.setData("agi://my.server.com/myscript.agi");

/* .. or, instead, to a specific single pre-made application (Swift
text-to-speech): */
originateAction.setApplication("Swift");
originateAction.setData("\"I'm calling from Cloudvox to wish you a
very happy birthday. This message could say anything, interact with
the caller, play sounds, MP3s, voices, connect them to another call,
or do pretty much anything your heart desires.\"");

// Caller ID as a Cloudvox number
originateAction.setCallerId("2063576220");
originateAction.setTimeout(new Long(30000));

/* Set variables that a script can access when the phone call is
answered, such as
a user or message ID, tracking code, or other state */
//originateAction.setVariables(new Hashtable(...))

// connect to Asterisk and log in
managerConnection.login();

/* send the originate action and wait for a maximum of 30 seconds
for Asterisk
to send a reply */
originateResponse = managerConnection.sendAction(originateAction,
30000);

// print out whether the originate succeeded or not
System.out.println(originateResponse.getResponse());

// and finally log off and disconnect
managerConnection.logoff();
}

public static void main(String[] args) throws Exception {
ExampleCallOut callout;

callout = new ExampleCallOut();
callout.run();
}
}

Pero este código me devuelve otro error después de logearse:

run:
24-oct-2010 14:27:13
org.asteriskjava.manager.internal.ManagerConnectionImpl connect
INFO: Connecting to 192.168.0.199:5038
24-oct-2010 14:27:13
org.asteriskjava.manager.internal.ManagerConnectionImpl
setProtocolIdentifier
INFO: Connected via Asterisk Call Manager/1.1
24-oct-2010 14:27:13
org.asteriskjava.manager.internal.ManagerConnectionImpl doLogin
INFO: Successfully logged in
24-oct-2010 14:27:13
org.asteriskjava.manager.internal.ManagerConnectionImpl doLogin
INFO: Determined Asterisk version: Asterisk 1.6
Error
24-oct-2010 14:27:13
org.asteriskjava.manager.internal.ManagerConnectionImpl disconnect
INFO: Closing socket.
24-oct-2010 14:27:13
org.asteriskjava.manager.internal.ManagerReaderImpl run
INFO: Terminating reader thread: No more lines available: Scanner
closed
GENERACIÓN CORRECTA (total time: 1 second)

¿Me podéis orientar un poco? ¿Algún hilo/blog dónde muestren ejemplos?

Saludos

Joan Herrera

unread,
Oct 25, 2010, 8:06:04 AM10/25/10
to aster...@googlegroups.com
Hola, no he trabajado con Java en este tipo de conexiones lo que te puedo asegurar es que el AMI funciona correctamente, informacion sobre el comando Originate http://www.voip-info.org/wiki/view/Asterisk+Manager+API+Action+Originate y algo de los comandos disponibles http://www.voip-info.org/wiki/view/Asterisk+manager+API (En este mismo enlace obtienes algunos ejemplos de interconexion usando variados lenguajes) adicional puedes usar en la consola del asterisk CLI> manager show commands o CLI> manager show command originate.

el formato para enviarle los datos al AMI respecto al comando originate es (marco con asteriscos los obligatorios):

       *Channel: A donde te vas a comunicar (ejm: DAHDI/g0/6505050, SIP/150, SIP/proveedorsip/00345437788669)
        *Exten: Extension dentro del dialplan a la que te quieres comunicar ejm. s
        *Context: Contexto donde esta ubicada la extension anterior ejm. default
        *Priority: Prioridad dentro del dialplan de la extension y contexto anterior. ejm. 1
        Application: Application to use
        Data: Data to use (requires 'Application')
        Timeout: How long to wait for call to be answered (in ms. Default: 30000)
        CallerID: Caller ID to be set on the outgoing channel
        Variable: Si deseas definir variables dentro del dialplan durante la marcacion.
        Account: Cuenta a usar
        *Async: colocar en 'true' para originar multiples llamados.

Espero te funcione. Usa telnet para realizar pruebas a mano.

telnet ip-asterisk-ami 5038

saludos


2010/10/24 hdj <javd...@gmail.com>
--
Este email pertenece a la lista de Asterisk-ES (http://www.asterisk-es.org)

Entra ahora en el canal de irc de Asterisk-ES para charlar en directo sobre VoIP y
Asterisk: http://www.asterisk-es.org/

~~~~~ Normas de la lista Asterisk-ES: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asterisk-es
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Para anular la suscripción: asterisk-es...@googlegroups.com



--
______________________________

Coordialmente: Joan Sebastian Herrera Torres

josefu

unread,
Oct 25, 2010, 10:20:25 AM10/25/10
to asterisk-es
El ejemplo[1] de la web de asterisk-java funciona perfectamente, te
funciona ese?

Veo que usas la api "live", has probado simplemente con la normal del
manager que es a más bajo nivel (el ejemplo que te indico es así)?

[1] http://asterisk-java.org/development/tutorial.html

hdj

unread,
Oct 25, 2010, 9:47:02 AM10/25/10
to asterisk-es
Muchas gracias Joan,

Estos días he estado leyendo esos link, pero aún tengo algunas dudas,
me he fijado en la salida de u ringing(180) entre SFLphone del pc al
SFLphone del Netbook y es algo así:

asterisk -r

-- Executing [160@from-internal:1] Set("SIP/150-00000002",
"__RINGTIMER=3") in new stack
-- Executing [160@from-internal:2] Macro("SIP/150-00000002",
"exten-vm,novm,160") in new stack
-- Executing [s@macro-exten-vm:1] Macro("SIP/150-00000002", "user-
callerid,") in new stack
-- Executing [s@macro-user-callerid:1] Set("SIP/150-00000002",
"AMPUSER=150") in new stack
-- Executing [s@macro-user-callerid:2] GotoIf("SIP/150-00000002",
"0?report") in new stack
-- Executing [s@macro-user-callerid:3] ExecIf("SIP/150-00000002",
"1?Set(REALCALLERIDNUM=150)") in new stack
-- Executing [s@macro-user-callerid:4] Set("SIP/150-00000002",
"AMPUSER=150") in new stack
-- Executing [s@macro-user-callerid:5] Set("SIP/150-00000002",
"AMPUSERCIDNAME=Javier") in new stack
-- Executing [s@macro-user-callerid:6] GotoIf("SIP/150-00000002",
"0?report") in new stack
-- Executing [s@macro-user-callerid:7] Set("SIP/150-00000002",
"AMPUSERCID=150") in new stack
-- Executing [s@macro-user-callerid:8] Set("SIP/150-00000002",
"CALLERID(all)="Javier" <150>") in new stack
-- Executing [s@macro-user-callerid:9] ExecIf("SIP/150-00000002",
"1?Set(CHANNEL(language)=es)") in new stack
-- Executing [s@macro-user-callerid:10] GotoIf("SIP/150-00000002",
"0?continue") in new stack
-- Executing [s@macro-user-callerid:11] Set("SIP/150-00000002",
"__TTL=64") in new stack
-- Executing [s@macro-user-callerid:12] GotoIf("SIP/150-00000002",
"1?continue") in new stack
-- Goto (macro-user-callerid,s,19)
-- Executing [s@macro-user-callerid:19] NoOp("SIP/150-00000002",
"Using CallerID "Javier" <150>") in new stack
-- Executing [s@macro-exten-vm:2] Set("SIP/150-00000002",
"RingGroupMethod=none") in new stack
-- Executing [s@macro-exten-vm:3] Set("SIP/150-00000002",
"VMBOX=novm") in new stack
-- Executing [s@macro-exten-vm:4] Set("SIP/150-00000002",
"EXTTOCALL=160") in new stack
-- Executing [s@macro-exten-vm:5] Set("SIP/150-00000002",
"CFUEXT=") in new stack
-- Executing [s@macro-exten-vm:6] Set("SIP/150-00000002",
"CFBEXT=") in new stack
-- Executing [s@macro-exten-vm:7] Set("SIP/150-00000002", "RT=""")
in new stack
-- Executing [s@macro-exten-vm:8] Macro("SIP/150-00000002",
"record-enable,160,IN") in new stack
-- Executing [s@macro-record-enable:1] GotoIf("SIP/150-00000002",
"1?check") in new stack
-- Goto (macro-record-enable,s,4)
-- Executing [s@macro-record-enable:4] ExecIf("SIP/150-00000002",
"0?MacroExit()") in new stack
-- Executing [s@macro-record-enable:5] GotoIf("SIP/150-00000002",
"0?Group:OUT") in new stack
-- Goto (macro-record-enable,s,15)
-- Executing [s@macro-record-enable:15] GotoIf("SIP/150-00000002",
"1?IN") in new stack
-- Goto (macro-record-enable,s,20)
-- Executing [s@macro-record-enable:20] ExecIf("SIP/150-00000002",
"0?MacroExit()") in new stack
-- Executing [s@macro-record-enable:21] NoOp("SIP/150-00000002",
"Recording enable for 160") in new stack
-- Executing [s@macro-record-enable:22] Set("SIP/150-00000002",
"CALLFILENAME=20101025-131451-1288005291.2") in new stack
-- Executing [s@macro-record-enable:23] MixMonitor("SIP/
150-00000002", "20101025-131451-1288005291.2.wav,,") in new stack
-- Executing [s@macro-record-enable:24] Set("SIP/150-00000002",
"CDR(userfield)=audio:20101025-131451-1288005291.2.wav") in new stack
-- Executing [s@macro-record-enable:25] MacroExit("SIP/
150-00000002", "") in new stack
-- Executing [s@macro-exten-vm:9] Macro("SIP/150-00000002",
"dial,,trTwW,160") in new stack
-- Executing [s@macro-dial:1] GotoIf("SIP/150-00000002", "1?dial")
in new stack
-- Goto (macro-dial,s,3)
-- Executing [s@macro-dial:3] AGI("SIP/150-00000002",
"dialparties.agi") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/dialparties.agi
dialparties.agi: Starting New Dialparties.agi
dialparties.agi: Caller ID name is 'Javier' number is '150'
dialparties.agi: Methodology of ring is 'none'
-- dialparties.agi: Added extension 160 to extension map
-- dialparties.agi: Extension 160 cf is disabled
-- dialparties.agi: Extension 160 do not disturb is disabled
dialparties.agi: EXTENSION_STATE: 0 (NOT_INUSE)
dialparties.agi: Extension 160 has ExtensionState: 0
-- dialparties.agi: Checking CW and CFB status for extension 160
== Begin MixMonitor Recording SIP/150-00000002
-- dialparties.agi: dbset CALLTRACE/160 to 150
-- dialparties.agi: Filtered ARG3: 160
-- <SIP/150-00000002>AGI Script dialparties.agi completed,
returning 0
-- Executing [s@macro-dial:7] Dial("SIP/150-00000002", "SIP/
160,,trTwW") in new stack



He intentado con esto:

Action: Originate
Channel: SIP/150
Exten:SIP/160
Cntext:from-internal
Priority: 1
Timeout:3000

pero el mensaje es Originate failed:

Response: Error
Message: Originate failed

Event: RTPReceiverStat
Privilege: reporting,all
SSRC: 0
ReceivedPackets: 0
LostPackets: 0
Jitter: 0.0000
Transit: 0.0000
RRCount: 0

Event: RTPSenderStat
Privilege: reporting,all
SSRC: 360728835
SentPackets: 0
LostPackets: 0
Jitter: 0
SRCount: 0
RTT: 0.000000


-----------------------------------------
En Java he puesto el canal y demás así:

CONTEL.servidorasterisk .originateToExtension("SIP/150", "from-
internal", "SIP/160", 1, 6000);

y me dice:

Exception in thread "AWT-EventQueue-0"
org.asteriskjava.live.NoSuchChannelException: Channel 'SIP/150' is not
available

Y en la consola la salida fue esta (cuando corrí la aplicación java,
por lo que logearse se logea):
== Manager 'operadores' logged on from 192.168.0.10
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5



¿Qué canal utilizo? ¿Dónde puedo ver sus nombres?

Lo he intentado desde Java con .getChannels(), pero la salida es es
"[]", vamos vacío.

y en Consola con "sip shows channels", pero la salida es esta:
Peer User/ANR Call ID Format
Hold Last Message Expiry
0 active SIP dialogs


Como ves ando más perdido con Asterisk, que Adán en el día de la
madre :)

Te agradecería una aclaración.

Saludos

Javier

PaulMB

unread,
Oct 25, 2010, 12:23:16 PM10/25/10
to asterisk-es
Buenos días,

Como pregunto el compañero anterior, ya corriste el "Hola Mundo" que
aparece en la pagina web de Asterisk-Java, y que código probaste en
especial.

hdj

unread,
Oct 25, 2010, 1:03:51 PM10/25/10
to asterisk-es
Hola,

Disculpen, pero el comentario lo debía de estar haciendo cuando josefu
publicó el suyo, y luego tarda un rato en publicarse.

Ya he probado el ejemplo 1, se me queda así:

25-oct-2010 18:01:52 org.asteriskjava.fastagi.DefaultAgiServer startup
INFO: Listening on *:4573.

Ahora como llamo a la extensión 1300? ¿dónde se supone que recibiré el
mansaje "Welcome", en la consola?

Saludos

hdj

unread,
Oct 25, 2010, 1:09:14 PM10/25/10
to asterisk-es
Un dato: no tengo teléfono IP físico. Tengo unos softphones
(SFLphone).

Y marcarlo desde consola aún no se.



On 25 oct, 17:23, PaulMB <pmblat...@gmail.com> wrote:

Joan Herrera

unread,
Oct 25, 2010, 1:11:41 PM10/25/10
to aster...@googlegroups.com
Veo muchas salidas y la verdad parecen no tener nada que ver con el originate en cuanto al envio que le haces al AMI tienes un error en exten, recuerda que extension no es el device.... debes poner en exten: 160 no SIP/160... has mas pruebas ya casi te funciona...


Action: Originate
Channel: SIP/150
Exten:SIP/160
Cntext:from-internal
Priority: 1
Timeout:3000


2010/10/25 hdj <javd...@gmail.com>

--
Este email pertenece a la lista de Asterisk-ES (http://www.asterisk-es.org)

Entra ahora en el canal de irc de Asterisk-ES para charlar en directo sobre VoIP y
Asterisk: http://www.asterisk-es.org/

~~~~~ Normas de la lista Asterisk-ES: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asterisk-es
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Para anular la suscripción: asterisk-es...@googlegroups.com

hdj

unread,
Oct 25, 2010, 1:53:55 PM10/25/10
to asterisk-es
Hola de nuevo,

Me ha funcionado el HelloManager así:

OriginateAction originateAction;
ManagerResponse originateResponse;

originateAction = new OriginateAction();
originateAction.setChannel("SIP/150");
originateAction.setContext("from-internal");
originateAction.setExten("160");
originateAction.setPriority(new Integer(1));
originateAction.setTimeout(new Integer(30000))

Pero la aplicación java llama al softphone 150, este suena y tengo que
aceptar la llamada, pasados unos segundos comienza a sonar el
softphone 160. ¿Cómo puedo hacer para que la aplicación java sea el
softphone 150? para que llame directamente al softphone 160, sin tener
que pasar por el 150.

Saludos y gracias

hdj

unread,
Oct 25, 2010, 1:17:29 PM10/25/10
to asterisk-es
Añadí esta extensión al archivo /etc/asterisk/extensions.conf

[default]
...
exten => 1300,1,Agi(agi://192.168.0.199/hello.agi

e intento realizar una llamada desde el softphone a la extension 1300,
pero me aparece una locución que dice que "su llamada no se puede
realizar tal como la ha marcado, por favor compruebe el número y
marque nuevamente."

¿qué hago mal?

Saludos

Paco Gil

unread,
Oct 25, 2010, 6:40:14 PM10/25/10
to aster...@googlegroups.com


2010/10/25 hdj <javd...@gmail.com>
exec
 

Saludos y gracias

Iñaki Baz Castillo

unread,
Oct 25, 2010, 7:05:54 PM10/25/10
to aster...@googlegroups.com
El día 25 de octubre de 2010 19:17, hdj <javd...@gmail.com> escribió:
> e intento realizar una llamada desde el softphone a la extension 1300,
> pero me aparece una locución que dice que "su llamada no se puede
> realizar tal como la ha marcado, por favor compruebe el número y
> marque nuevamente."

Esa locución obviamente no viene con Asterisk, tal vez con algún
enlatado (tipo AsteriskNow). Decir que "Asterisk" te suelta esa
locución es información incorrecta.
Al igual que el churro de dialplan que has pegado en otro correo de
este hilo, que no es más que el dialplan infinito que ejecuta
AsteriskNow para cursar cualquier llamada. Con tanto dialplan es
imposible debuggear nada concreto.

AsteriskNow *NO* es Asterisk. No puedes reportar problemas o dudas
argumentando que "Asterisk" (refiriéndote en realidad a AsteriskNow)
suelta una locución o ejecuta un dialplan de 30 líneas.

Como sugerencia, si estás probando temas de AMI (con Java o cualquier
otro lenguaje) es infinitamente mejor que hagas las pruebas sobre un
Asterisk "pelado", con un dialplan mínimo en el que sea fácil analizar
la salida de los logs y la consola de Asterisk. Si no, estás en un
entorno "envenenado".

--
Iñaki Baz Castillo
<i...@aliax.net>

Paco Gil

unread,
Oct 26, 2010, 2:48:39 AM10/26/10
to aster...@googlegroups.com


2010/10/26 Iñaki Baz Castillo <i...@aliax.net>
 no le hagas caso a Iñaki... llama envenenado a cualquier cosa... usar FreePBX es de machotes XDDD
 



--
Iñaki Baz Castillo
<i...@aliax.net>

113 Seattle

unread,
Oct 26, 2010, 2:31:11 AM10/26/10
to aster...@googlegroups.com
Buenos dias:

Java se conecta por socket y le dice a asterisk que la extension 150 quiere llamar a la 160, pero para poder llamar a la 160, la 150 tiene que tener un canal ya activo con el que poder hacer el bridge (según creo yo). Es por eso por lo que asterisk llama primero a la extension de origina la llamada. Como va a llamar la extension 150 a la 160 si la 150 no la esta usando nadie?

Si por el contrario lo que quieres es "dar un toque" a la 160, usa un canal local y listo.

Tal y como viene en el ejemplo funciona, yo lo tengo así en producción, y sin ningún problema, eso si, un consejo es que si quieres hacer varias llamadas a la vez, desde distintos lugares, uses metodos de Originate asíncronos, o multiples conexiones a Asterisk, sino si alguien que realiza una llamada, no descuelga, no hará otra llamada en tanto no llegue el timeout.

Un saludo.

2010/10/26 Paco Gil <pag...@gmail.com>



--

113 Seattle

hdj

unread,
Oct 26, 2010, 9:00:25 AM10/26/10
to asterisk-es
Gracias señores,

He conseguido hacer algunas llamadas desde la consola y desde java,
estoy haciendo un dialplan en una instalación limpia para ir haciendo
pruebas con lo aprendido.

Saludos


Note: Instalé varias distribuciones para probarlas y ver que tienen y
que no (no creo que haya nada de malo en eso).

Y sobre las preguntas, me he limitado a hablar de Asterisk.




On 26 oct, 07:31, 113 Seattle <113.seat...@gmail.com> wrote:
> Buenos dias:
>
> Java se conecta por socket y le dice a asterisk que la extension 150 quiere
> llamar a la 160, pero para poder llamar a la 160, la 150 tiene que tener un
> canal ya activo con el que poder hacer el bridge (según creo yo). Es por eso
> por lo que asterisk llama primero a la extension de origina la llamada.
> Como va a llamar la extension 150 a la 160 si la 150 no la esta usando
> nadie?
>
> Si por el contrario lo que quieres es "dar un toque" a la 160, usa un canal
> local y listo.
>
> Tal y como viene en el ejemplo funciona, yo lo tengo así en producción, y
> sin ningún problema, eso si, un consejo es que si quieres hacer varias
> llamadas a la vez, desde distintos lugares, uses metodos de
> Originate asíncronos, o multiples conexiones a Asterisk, sino si alguien que
> realiza una llamada, no descuelga, no hará otra llamada en tanto no llegue
> el timeout.
>
> Un saludo.
>
> 2010/10/26 Paco Gil <pag...@gmail.com>
>
>
>
>
>
>
>
>
>
>
>
> > 2010/10/25 hdj <javdr...@gmail.com>
>
> >> Hola de nuevo,
>
> >> Me ha funcionado el HelloManager así:
>
> >>  OriginateAction originateAction;
> >>        ManagerResponse originateResponse;
>
> >>        originateAction = new OriginateAction();
> >>         originateAction.setChannel("SIP/150");
> >>        originateAction.setContext("from-internal");
> >>        originateAction.setExten("160");
> >>        originateAction.setPriority(new Integer(1));
> >>        originateAction.setTimeout(new Integer(30000))
>
> >> Pero la aplicación java llama al softphone 150, este suena y tengo que
> >> aceptar la llamada, pasados unos segundos comienza a sonar el
> >> softphone 160. ¿Cómo puedo hacer para que la aplicación java sea el
> >> softphone 150? para que llame directamente al softphone 160, sin tener
> >> que pasar por el 150.
>
> > exec
>
> >> Saludos y gracias
>
> >> --
> >> Este email pertenece a la lista de Asterisk-ES (
> >>http://www.asterisk-es.org)
>
> >> Entra ahora en el canal de irc de Asterisk-ES para charlar en directo
> >> sobre VoIP y
> >> Asterisk:http://www.asterisk-es.org/
>
> >> ~~~~~ Normas de la lista Asterisk-ES: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >>http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asteris...
> >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >> - Para anular la suscripción: asterisk-es...@googlegroups.com
>
> >  --
> > Este email pertenece a la lista de Asterisk-ES (http://www.asterisk-es.org
> > )
>
> > Entra ahora en el canal de irc de Asterisk-ES para charlar en directo sobre
> > VoIP y
> > Asterisk:http://www.asterisk-es.org/
>
> > ~~~~~ Normas de la lista Asterisk-ES: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asteris...
Reply all
Reply to author
Forward
0 new messages