- Manual
2 weeks 3 days antes - Skype que permite a Asterisk
2 weeks 3 days antes - gracias
3 weeks 1 día antes - Eso lo tenes que hacer en la
3 weeks 1 día antes - Permisos
3 weeks 3 days antes - Mismo problema
3 weeks 3 days antes - Consulta de Distribuidores
4 weeks 4 days antes - IAX2
4 weeks 5 days antes - duda Cisco 7911g
4 weeks 5 days antes - Enlazar dos centrales con Asterisk
4 weeks 5 days antes
Mi experiencia con asterisk ... y mis soluciones para colas de agentes
Posted Mayo 25th, 2009 by amarquez
En la empresa para la que trabajo, monté en su día un Asterisk para intentar reemplazar a la centralita siemens de la que disponemos, pero a día de hoy todavía no lo he conseguido del todo :-(
(hacer la inversión en los teléfonos Ip o tarjetería para poder seguir utilizando los teléfonos siemens no lo ven necesario...) por tanto, tengo conectadas las dos centralitas mediante un puerto E1, el primario de telefónica en la siemens y un primario de moviles en el asterisk ;-)) ahhh! Se me olvidaba, también tengo otro Asterisk en Madrid conectado por un Trunk IAX ...
Al grano, una cosa que creo que puede ser de interés es la configuración de una cola de agentes que tengo montada para un departamento de la compañía, que os detallo a continuación:
Escenario inicial:
Grupo de personas que atienden las llamadas de los clientes, con saltos entre ellos pero sin control sobre las llamadas (bajo centralita siemens). Los teléfonos suenan constantemente, van rebotando de uno a otro y nadie los atiende (apreciación de los clientes)
Mi propuesta ejecutada:
Se adquieren teléfonos IP para dicho departamento (Grandstream GXP280 con cascos VXI passport V10 que por cierto van de lujo).
Se monta una cola de agentes en asterisk y se empiezan a controlar llamadas.
Aprovechando que los teléfonos GXP280 tienen un botón configurable desde su administración web (messages), los utilizo para realizar una función de conectado/desconectado de agente. Como no me gusta hacer muy grande el extensions.conf, hago una referencia al fichero “colas-de-agentes” y ahí escribo el dialplan correspondiente. El la configuración del botón “messages” de los teléfonos, incluyo un “*99” como función:
[colas-de-agentes]
;Accion boton Message
exten => *99,1,Background(login-agentes)
exten => *99,n,WaitExten(5)
exten => *99,n,Hangup()
exten => 1,1,Goto(*06,1)
exten => 2,1,Goto(*07,1)
exten => _*0X,1,Set(LANGUAGE()=es)
exten => *02,1,AgentCallbackLogin(||${CALLERID(num)})
exten => *06,2,Dial(Local/*04@colas-de-agentes/n,,D(${CALLERID(num)}#${CALLERID(num)}#${CALLERID(num)}#))
exten => *04,1,AgentCallbackLogin(||@internas)
exten => *07,2,Dial(Local/*02@colas-de-agentes/n,,D(${CALLERID(num)}#${CALLERID(num)}##))
;Dialplan para cola de agentes
exten => 4000,1,Answer()
exten => 4000,2,Wait(1)
exten => 4000,3,Set(LANGUAGE()=es)
exten => 4000,4,GotoIfTime(08:00-14:00|mon-fri|*|*?8:)
exten => 4000,5,PlayBack(fuera-hora-2)
exten => 4000,6,PlayBack(asistencias)
exten => 4000,7,Hangup()
exten => 4000,8,Queue(siniestros)
exten => 4000,n,PlayBack(no-operadores)
exten => 4000,n,Hangup()
Con esto consigo que cuando un usuario pulse el botón “messages” de su gxp280, le salga una locución que le indica: “Pulsa 1 para conectarte como agente o Pulsa 2 para desconectarte”...
Como se puede observar en el dialplan, tengo definido un horario para aceptar las llamadas con sus locuciones pertinentes; Si la llamada está dentro del horario definido, entra en la cola de siniestros y si no responden, salta otra locución indicando que no hay operadores disponibles en ese momento...
Con estas solución en funcionamiento, en un “callcenter” normal ya hubiera funcionada más o menos bien ... pero claro, yo no tengo esa suerte ... Ahora se junta la problematica de que los usuarios se tienen que acordar de conectarse como agentes por la mañana ... y como no todos se tienen que conectar o no entran a la misma hora, no se puede hacer de forma automática, ya que existiría el mismo problema inicial: Suenan los teléfonos y no se cojen las llamadas...
Solución: Aviso a los usuarios con una llamada automática programada con una locución... eso sí, de forma “pulcra”, es decir, solo llamo a los agentes que no están conectados y no a todos ya que si no, los usuarios me acabarían llamado diciendo que ya están conectados y les sale un mensaje que blablablabla...
He hecho un pequeño script dentro de mis posibilidades como “picateclas” que realiza lo siguiente:
extraigo la lista de los agentes que hay definidos en el fichero “agents.conf”
utilizando asterisk -r -x, ejecuto un “agent show online” y extraigo los agentes conectados.
Saco las diferencias entre un resultado y otro y obtenemos los “No Conectados”.
Por último, genero un fichero de llamada por cada agente no conectado y lo envio al “outgoing”
Lo ejecuto en una tarea programada a las 09.00 horas (cuando todo el mundo debería estar activo en la cola).
#/bin/sh
# Llamada automatica a los agentes que no están conectados
num=0
cat /etc/asterisk/agents.conf |grep 'agent =>'|cut -c10-12 > /tmp/agents.tmp
asterisk -r -x 'agent show online'|grep '('|cut -c 0-3 > /tmp/agents-online.tmp
diff -a /tmp/agents-online.tmp /tmp/agents.tmp |grep '>'|cut -c3-5 > /tmp/agents-total.tmp
cat /tmp/agents-total.tmp| while read fichero
do
echo "Channel: SIP/$fichero" > /var/spool/asterisk/outgoing/resultado$num
echo "MaxRetries: 2" >> /var/spool/asterisk/outgoing/resultado$num
echo "RetryTime: 60" >> /var/spool/asterisk/outgoing/resultado$num
echo "WaitTime: 90" >> /var/spool/asterisk/outgoing/resultado$num
echo "Context: Internas" >> /var/spool/asterisk/outgoing/resultado$num
echo "Extension: 4222" >> /var/spool/asterisk/outgoing/resultado$num
echo "Priority: 1" >> /var/spool/asterisk/outgoing/resultado$num
echo "Application: Playback" >> /var/spool/asterisk/outgoing/resultado$num
echo "Data: agente-online" >> /var/spool/asterisk/outgoing/resultado$num
num=`expr $num + 1`
done
Bueno, con esto tenemos un sistema que activa/desactiva agentes, avisa si no te conectas pero queda otro problema a solucionar ... La chica que está en la centralita general (centralita siemens), cuando recibe llamadas para este grupo de agentes no ve si comunican o no ... por lo que pasa las llamadas a la extensión de la cola de agentes aunque vayan dirigidas a una persona en concreto ...
Solución: Nuesro amigo Flash Operator Panel ... Le he pueso en el pc de la chica de centralita una tarjeta Dual para conectar dos pantallas (una para su trabajo diario y otra para que tenga una ventana con el FOP monitorizando las extensiones de ese departamento). He adaptado los ficheros op_server, op_buttons y op_style para incluir solo las extensiones de ese departamento y la verdad es que queda bastante chulo... El FOP te indica si una extensión está conectada como agente (el lugar de piloto verde lo muestra en amarillo), las gente que hay en espera en la cola del departamento, etc... y si esto lo pones delante del teléfono de la chica de centralita (en nuestro caso un siemens optipoint 500 con dos paneles adicionales), parece ya algo “profesional”.
Hasta aquí mi primer post ... espero que os sea de utilidad mi aportación o que al menos os resulte interesante ;-P
Saludos!!!!
http://misexperienciasconasterisk.blogspot.com
Alberto.
Hola Alberto..
Muy interesante tu programa de colas.. pero me gustaria saber si tienes experiencia en la ejecucion de shell scripts o commandos linux directos desde el dial plan..
he tratado de ejecutar commandos, scripts, etc, sin resultados..
pienso que debe faltar algo .. alguna autorizacion alguna libreria, etc. pero no encuentro que puede ser.
Le agredeceria mucho si pudiera ayudarme..
saludos, Milton
Alberto:
Muy instructivo tu post y realmente interesante tu proceso de pensamiento para la resolución de los problemas que has encarado.
Este es un ejemplo fehaciente del poder de las soluciones open source con Asterisk frente a las centrales tradicionales ya que podemos usar distintos recursos (dialplan, archivos .call , shell scripts, etc) para dar soluciones.
Invito a todos los integrantes que también cuenten sus experencias con Asterisk y como superaron algun reto planteado.
Saludos,
Daniel Pizarro
DCAP,Elastix Certified Engineer
Infobox