Utilizar CCSS en Asterisk (parte 1)

Hola,

Llevo unos días jugando con el tema del CCSS en Asterisk y me parece interesante comentar algo por aquí ya que la documentación es bastante mala.

Comenzaré con lo que viene en la documentación del wiki de Asterisk (el link de CCSS lleva allí) y a medida que vaya leyendo y aprendiendo más lo iré añadiendo para que se quede aquí guardado.

Bien.

Lo primero es saber qué es el rollo este. Esto va de que puedes implementar un servicio que cuando llamas a alguien y por lo que sea no te coge o está ocupado, te permite ejecutar una aplicación que monitorice el destino de tu llamada para que cuando se libere seas avisado.

Es decir:

  1. Alice llama a Bob.
  2. Bob no puede atender (por la razón que sea).
  3. Alice marca una numeración especial asignada a las peticiones de CCSS para que le avisen cuando Bob esté disponible.
  4. Cuando Bob está disponible Alice recibe una llamada desde Asterisk.
  5. Alice coge la llamada.
  6. Asterisk llama a Bob.
  7. Bob coge.
  8. Asterisk conecta la llamada de Alice con la de Bob para que hablen entre ellos.

Diremos que hay dos casos para que Bob no atienda (cogidos directamente del wiki de asterisk):

  • CCBS: Call Completion on Busy Subscriber. When a call fails because the recipient’s phone is busy, the caller will have the opportunity to request CCBS. When the recipient’s phone is no longer busy, the caller will be alerted. The means by which the caller is alerted is dependent upon the type of agent used by the caller.

Es decir: Que Alice reciba un “Busy” (“Ocupado”) porque Bob está hablando con alguien. Lo que hará que Asterisk avise a Alice cuando Bob cuelgue.

  • CCNR: Call Completion on No Response. When a call fails because the recipient does not answer the phone, the caller will have the opportunity to request CCNR. When the recipient’s phone becomes busy and then is no longer busy, the caller will be alerted. The means by which the caller is alerted is dependent upon the type of the agent used by the caller.

Es decir: Que Alice reciba un “No response” (“Sin respuesta”) porque Bob está ausente. Esto no hará que Asterisk llame al ver que Bob cuelga, porque Bob no está hablando, si no que esperará hasta que Bob interactue para darse cuenta de que ya ha vuelto. Por ejemplo, si Bob llama a alguien, al colgar, Asterisk llamará a Alice como se ha explicado antes.

En cualquiera de los dos casos sólo cambian los pasos 2, 3 y 4 del esquema superior ajustándose al caso concreto. Luego, si Asterisk llama a Alice y justo ésta está hablando por teléfono y no puede atender, Asterisk espera a que esté libre etc.

Para configurar esto de forma muy sencilla (directamente del wiki de asterisk):

sip.conf
[Mark]
context=phone_calls
cc_agent_policy=generic
cc_monitor_policy=generic ;We will accept defaults for the rest of the cc parameters
;We also are not concerned with other SIP details for this
;example
[Richard]
context=phone_calls
cc_agent_policy=generic
cc_monitor_policy=generic
extensions.conf
[phone_calls]
exten => 1000,1,Dial(SIP/Mark,20)
exten => 1000,n,Hangup
exten => 2000,1,Dial(SIP/Richard,20)
exten => 2000,n,Hangup
exten => 30,1,CallCompletionRequest
exten => 30,n,Hangup
exten => 31,1,CallCompletionCancel
exten => 31,n,Hangup

Editamos sip.conf, teniendo en cuenta el archivo ccss.conf. En este caso pone generic las políticas porque utiliza las genéricas que vienen explicadas en ccss.conf:

ccss.conf
;generic: A generic CC agent is one which uses no protocol-specific
;         mechanisms to offer CC to the caller. Instead, the caller
;         requests CC using a dialplan function. Due to internal
;         restrictions, you should only use a generic CC agent on
;         phones (i.e. not "trunks"). If you are using phones which
;         do not support a protocol-specific method of using CC, then
;         generic CC agents are what you should use.

Para poder hacer pruebas sin volvernos demasiado locos yo he hecho un dialplan con una extensión que simplemente reproduce el archivo de bienvenida de asterisk. Así puedo ocupar un terminal mientras que con el otro le llamo al ocupado y lo pruebo. Además he tenido que limitar el número de llamadas por terminal porque los que estaba utilizando eran capaces de manejar varias llamadas simultáneas lo que me fastidiaba la prueba de CCBS.

Tocando un poco esas cosas mi dialplan de pruebas y mi sip.conf son los siguientes:

 

extensions.conf

[servicios]
exten => 100,1,Answer() ; Para probar que funciona
same => n,Playback(demo-congrats)
same => n,Hangup()

[internas]
exten => _10[0-3],1,Dial(SIP/usuario${EXTEN}, 10, r)

exten => 30,1,CallCompletionRequest()
same => n,Hangup()

exten => 31,1,CallCompletionCancel()
same => n, Hangup()

[telf-internos]
include => servicios
include => internas

sip.conf
[usuario101]
type=friend
context=telf-internos
host=dynamic
disallow=all
defaultuser=usuario101
allow=alaw
allow=ulaw
allow=g729
secret=101
fromuser=usuario101
cc_agent_policy=generic
cc_monitor_policy=generic
callcounter=yes
call-limit=1

[usuario102]
type=friend
context=telf-internos
host=dynamic
disallow=all
defaultuser=usuario102
allow=alaw
allow=ulaw
allow=g729
secret=102
fromuser=usuario102
cc_agent_policy=generic
cc_monitor_policy=generic
callcounter=yes
call-limit=1

Y con esto podéis llamar a la extensión 100 para ocupar a un usuario y luego llamarle con el otro y hacer la prueba de CCBS o probar el CCNR llamando a la extensión 100 para simular que el usuario a vuelve a interactuar.

Id probando y ojeando. Mientrastanto yo haré lo mismo y os comentaré lo que saco en claro.

Saludos!!

Anuncios

3 pensamientos en “Utilizar CCSS en Asterisk (parte 1)

  1. Utilizar CCSS en Asterisk (parte 2) – Mis proyectos de tecnología libre.

  2. Utilizar CCSS en Asterisk (parte 3) – Mis proyectos de tecnología libre.

  3. Utilizar CCSS en Asterisk (parte 4) – Mis proyectos de tecnología libre.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s