Listado de la etiqueta: asterisk

AMI Commands List

AMI es la interface que tiene disponible Asterisk para permitir la integración con sistemas externos.

En esta ocasión te dejo el listado completo en Asterisk 18 de comandos disponibles para interactuar con tu PBX

AbsoluteTimeout Set absolute timeout.
AGI Add an AGI command to execute by
AOCMessage Generate an Advice of Charge mess
Atxfer Attended transfer.
BlindTransfer Blind transfer channel(s) to the
Bridge Bridge two channels already in th
BridgeDestroy Destroy a bridge.
BridgeInfo Get information about a bridge.
BridgeKick Kick a channel from a bridge.
BridgeList Get a list of bridges in the syst
BridgeTechnologyList List available bridging technolog
BridgeTechnologySuspend Suspend a bridging technology.
BridgeTechnologyUnsuspend Unsuspend a bridging technology.
CancelAtxfer Cancel an attended transfer.
Challenge Generate Challenge for MD5 Auth.
ChangeMonitor Change monitoring filename of a c
Command Execute Asterisk CLI Command.
ConfbridgeKick Kick a Confbridge user.
ConfbridgeList List participants in a conference
ConfbridgeListRooms List active conferences.
ConfbridgeLock Lock a Confbridge conference.
ConfbridgeMute Mute a Confbridge user.
ConfbridgeSetSingleVideoSrc Set a conference user as the sing
ConfbridgeStartRecord Start recording a Confbridge conf
ConfbridgeStopRecord Stop recording a Confbridge confe
ConfbridgeUnlock Unlock a Confbridge conference.
ConfbridgeUnmute Unmute a Confbridge user.
ControlPlayback Control the playback of a file be
CoreSettings Show PBX core settings (version e
CoreShowChannels List currently active channels.
CoreStatus Show PBX core status variables.
CreateConfig Creates an empty file in the conf
DAHDIDialOffhook Dial over DAHDI channel while off
DAHDIDNDoff Toggle DAHDI channel Do Not Distu
DAHDIDNDon Toggle DAHDI channel Do Not Distu
DAHDIHangup Hangup DAHDI Channel.
DAHDIRestart Fully Restart DAHDI channels (ter
DAHDIShowChannels Show status of DAHDI channels.
DAHDITransfer Transfer DAHDI Channel.
DBDel Delete DB entry.
DBDelTree Delete DB Tree.
DBGet Get DB Entry.
DBGetTree Get DB entries, optionally at a p
DBPut Put DB entry.
DeviceStateList List the current known device sta
DialplanExtensionAdd Add an extension to the dialplan
DialplanExtensionRemove Remove an extension from the dial
Events Control Event Flow.
ExtensionState Check Extension Status.
ExtensionStateList List the current known extension
FAXSession Responds with a detailed descript
FAXSessions Lists active FAX sessions
FAXStats Responds with fax statistics
Filter Dynamically add filters for the c
G729LicenseList G.729 License List
G729LicenseStatus G.729 License Status
GetConfig Retrieve configuration.
GetConfigJSON Retrieve configuration (JSON form
Getvar Gets a channel variable or functi
Hangup Hangup channel.
IAXnetstats Show IAX Netstats.
IAXpeerlist List IAX Peers.
IAXpeers List IAX peers.
IAXregistry Show IAX registrations.
ListCategories List categories in configuration
ListCommands List available manager commands.
LocalOptimizeAway Optimize away a local channel whe
LoggerRotate Reload and rotate the Asterisk lo
Login Login Manager.
Logoff Logoff Manager.
MailboxCount Check Mailbox Message Count.
MailboxStatus Check mailbox.
MeetmeList List participants in a conference
MeetmeListRooms List active conferences.
MeetmeMute Mute a Meetme user.
MeetmeUnmute Unmute a Meetme user.
MessageSend Send an out of call message to an
MessageSendInfo
MixMonitor Record a call and mix the audio d
MixMonitorMute Mute / unMute a Mixmonitor record
ModuleCheck Check if module is loaded.
ModuleLoad Module management.
Monitor Monitor a channel.
MuteAudio Mute an audio stream.
Originate Originate a call.
Park Park a channel.
ParkedCalls List parked calls.
Parkinglots Get a list of parking lots
PauseMonitor Pause monitoring of a channel.
Ping Keepalive command.
PJSIPCallIDToChannel
PJSIPNotify Send a NOTIFY to either an endpoi
PJSIPQualify Qualify a chan_pjsip endpoint.
PJSIPRegister Register an outbound registration
PJSIPShowAors Lists PJSIP AORs.
PJSIPShowAuths Lists PJSIP Auths.
PJSIPShowContacts Lists PJSIP Contacts.
PJSIPShowEndpoint Detail listing of an endpoint and
PJSIPShowEndpoints Lists PJSIP endpoints.
PJSIPShowRegistrationInboundContactStatuses Lists ContactStatuses for PJSIP i
PJSIPShowRegistrationsInbound Lists PJSIP inbound registrations
PJSIPShowRegistrationsOutbound Lists PJSIP outbound registration
PJSIPShowResourceLists Displays settings for configured
PJSIPShowSubscriptionsInbound Lists subscriptions.
PJSIPShowSubscriptionsOutbound Lists subscriptions.
PJSIPUnregister Unregister an outbound registrati
PlayDTMF Play DTMF signal on a specific ch
PlayMF Play MF digit on a specific chann
PresenceState Check Presence State
PresenceStateList List the current known presence s
PRIDebugFileSet Set the file used for PRI debug m
PRIDebugFileUnset Disables file output for PRI debu
PRIDebugSet Set PRI debug levels for a span
PRIShowSpans Show status of PRI spans.
QueueAdd Add interface to queue.
QueueChangePriorityCaller Change priority of a caller on qu
QueueLog Adds custom entry in queue_log.
QueueMemberRingInUse Set the ringinuse value for a que
QueuePause Makes a queue member temporarily
QueuePenalty Set the penalty for a queue membe
QueueReload Reload a queue, queues, or any su
QueueRemove Remove interface from queue.
QueueReset Reset queue statistics.
QueueRule Queue Rules.
QueueStatus Show queue status.
QueueSummary Show queue summary.
QueueWithdrawCaller Request to withdraw a caller from
Redirect Redirect (transfer) a call.
Reload Send a reload event.
SendText Sends a text message to channel.
Setvar Sets a channel variable or functi
ShowDialPlan Show dialplan contexts and extens
SorceryMemoryCacheExpire Expire (remove) ALL objects from
SorceryMemoryCacheExpireObject Expire (remove) an object from a
SorceryMemoryCachePopulate Expire all objects from a memory
SorceryMemoryCacheStale Marks ALL objects in a sorcery me
SorceryMemoryCacheStaleObject Mark an object in a sorcery memor
Status List channel status.
StopMixMonitor Stop recording a call through Mix
StopMonitor Stop monitoring a channel.
UnpauseMonitor Unpause monitoring of a channel.
UpdateConfig Update basic configuration.
UserEvent Send an arbitrary event.
VoicemailRefresh Tell Asterisk to poll mailboxes f
VoicemailUsersList List All Voicemail User Informati
VoicemailUserStatus Show the status of given voicemai
WaitEvent Wait for an event to occur.

No graba en las transferencias

El siguiente problema fue detectado en un Elastix 4.0 con Asterisk 11.24. No descartó que persista en Issabel, pero habría que confirmar.

El origen de la cuestión es que las grabaciones no incluía las transferencias. Para ser más claro, una llamada entrante (IN) que era dirigida hacia una cola (queue), es atendida por un coordinador. Luego este la vuelve a transferir, y en ese momento que realiza el corte (hangup), ya que alguien lo atendía del otro lado, la grabación se cortaba.

Esto puntualmente tiene que ver con una propiedad de asterisk (herencia), la cúal no estaba seteada. La forma de correguirlo es agregando la siguiente línea en el archivo: extensions_override_freepbx.conf (o extensions_override_elastix.conf)

Dependiente de tu versión deberías verificar en cúal de esos dos archivos agregar la línea

1-Haz backup de tu archivo

cp /etc/asterisk/extensions_override_freepbx.conf /etc/asterisk/extensions_override_freepbx.conf.bak

2-Busca la siguiente línea

exten => s,n(record),MixMonitor(${MIXMON_DIR}${CALLFILENAME}.${MIXMON_FORMAT},,${MIXMON_POST})

3-Agregá al final de esta (y en una nueva línea) , lo siguiente

exten => s,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)

4-Reinicia el servicio del asterisk

sudo service asterisk restart

o ingresa a la consola del asterisk y haz un reinicio por aplicación

Stopping and Restarting Asterisk From The CLI – Asterisk Project – Asterisk Project Wiki

core restart gracefully

Listo!!!

A partir de ahora, la llamada inicial, contendrá en la grabación todas las transferencias que puede haber sufrido, hasta el último corte (Tanto del cliente o del agente) que haya transcurrido.

Encuesta con Asterisk

Polls Cuestionario por IVR para Asterisk

Existen diversas formas de obtener indicadores del servicio prestado. Sin embargo la mejor retroactividad es la que puede brindarte tu propio cliente. Para ello muchas veces es necesario implementar una encuesta de calidad que permite sondear diferentes aspectos del servicio brindado.

En esta oportunidad se trabajo bajo la siguiente plataforma:

  • Elastix 4
  • Asterisk 11.24

El proceso para armarla la misma consiste en:

  • Una BD MYSQL para guardar los resultados
  • Un ID de la instancia que vamos a guardar (normalmente el ID de tu CRM, o el número de llamada ,etc)
  • DialPlan para que Asterisk interprete los pasos que debe llevar el mismo.
  • Una extensión sobre la cúal recae la encuesta (IVR)
  • Tener audios grabados de las preguntas, los saludos y los mensajes de error ante ingresos erróneos.

Primero que nada vamos a entender como funciona:

  1. Primero éxito una comunicación teléfonica entre el cliente y el personal interno.
  2. Se deja al cliente en línea (hold) y el personal interno procede a llamar a la encuesta
  3. La encuesta es un IVR que atiende automáticamente y solicita el ID para almacenar las respuestas enlazadas a este último.
  4. Una vez que el IVR confirmó que recibió bien el parámetro empieza con la encuesta
  5. Segundos antes el personal interno transfiere el cliente que estaba en línea a la extensión de la encuesta que está a punto de comenzar
  6. Toda respuesta por parte del teclado del cliente es recibida y almacenada en la BD MYSQL por parte del IVR

Como es el archivo del DIALPLAN

En la primer parte se define las variables a usar y la conexión a la BD MYSQL:

;----------------------- INICIO DE PARAMETROS DE ENCUESTA
; 2099 IVR Encuesta
; Inicio
exten => 2099,1,Answer                          ; Atiendo
;exten => 2099,n,Wait(1)                                ; Espero 1 Segundo para darle tiempo al SIP
exten => 2099,n(begin),Set(TIMEOUT(digit)=3)    ; Defino parametros de tiempo
exten => 2099,n,Set(TIMEOUT(response)=3)        ; Defino Parametros de tiempo
;exten => 2099,n,Set(CHANNEL(hangup_handler_push)=hangup-sql,2099,1);  SubRutina de Guardar en Base :: cuando el cliente corta no se puede detectar, se descarta
exten => 2099,n,MYSQL(Connect connid 172.15.15.15 usuario clave base_datos) ; Me conecto a la Base de Datos

; Asignacion de Variables
exten => 2099,n,Set(MSGN=custom/ivr-n)  ; Cargo el Mensaje de Num de Expediente
exten => 2099,n,Set(MSG0=custom/ivr-0)  ; Cargo el Mensaje de Bienvenida
exten => 2099,n,Set(MSG1=custom/ivr-1)  ; Cargo la Pregunta 1
exten => 2099,n,Set(MSG2=custom/ivr-2)  ; Cargo la Pregunta 2
exten => 2099,n,Set(MSG3=custom/ivr-3)  ; Cargo la Pregunta 3
exten => 2099,n,Set(MSG4=custom/ivr-4)  ; Cargo la Pregunta 4
exten => 2099,n,Set(MSG5=custom/ivr-5)  ; Cargo la Pregunta 5
exten => 2099,n,Set(MSG6=custom/ivr-6)  ; Cargo la Pregunta 6
exten => 2099,n,Set(MSGError0=custom/ivr-error0)  ; Cargo el error 0
exten => 2099,n,Set(MSGError1=custom/ivr-error1)  ; Cargo el error 1
exten => 2099,n,Set(MSGError2=custom/ivr-error2)  ; Cargo el error 2
exten => 2099,n,Set(MSGEnd=custom/ivr-end)  ; Cargo el Fin de la Encuesta

Luego viene la parte en donde le pregunto al personal interno el ID inicial para almacenar

;-------------- PREGUNTA N de ID ---------------------------------
;Empiezo con la Pregunta del Numero de ID
exten => 2099,n(pregN),Playback(${MSGN})        ; Reproduzco la Pregunta Num de ID
exten => 2099,n,Goto(2099,pregNresp)    ; voy a esperar la respuesta

;Esperando Respuesta1
exten => 2099,n(pregNresp),Read(NUMBEREXP,,5,1)         ; Leo lo que marca el personal Interno: Num de ID
exten => 2099,n,GotoIf($["${NUMBEREXP}" = ""]?pregN); Si la respuesta es nula entonces Pregunto de Nuevo Num de Expediente
;exten => 2099,n,SayNumber(${NUMBEREXP},f)
exten => 2099,n(pregNconf),Read(NUMBER,,1,1)            ; Leo lo que marca el operador: 1 correcto, 0 correguir
exten => 2099,n,GotoIf($[${NUMBER} = 0]?pregN:intro); Si la respuesta es 0 voy a la pregunta 1

Seguido y validado lo anterior le reproduzco la bienvenida al cliente:

; -------------- INTRO -------------------------------------
; Mensaje explicando el funcionamiento de la encuesta
exten => 2099,n(intro),Playback(beep)   ; Reproduzco un Beep
exten => 2099,n,Set(PREFIJO="2019") ; Asigno un prefijo personalizado. Ej: El año
;exten => 2099,n,Set(NUMBEREXP=$[${PREFIJO}~~${NUMBEREXP}])
exten => 2099,n,Wait(3)  ; Espero 3 Segundos
exten => 2099,n,Playback(${MSG0})       ; Reproduzco la intro
exten => 2099,n,Wait(1)
exten => 2099,n,MYSQL(Query consulta0 ${connid} insert into encuestas(ID,IDCRM,Personal,Fecha1,Fecha2,Activo) values (1,${NUMBEREXP},"Mauro",NOW(),NOW(),1)) ; Inserto la$

Luego debería seguir con las “N” preguntas que pueda tener configurado. Y al final reproducir un mensaje de FIN.

Esto es una idea de cómo se puede implementar.