← maurobernal.com.ar

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.

Tags

tsql (27)mssql (26)sql (20)devops (20)dotnet (18)docker (15)performance (14)contenedores (11)dotnet10 (10)linux (9)csharp (8)microservicios (7)angular (7)angular21 (7)sql server (6)issabel (6)docker-compose (6)typescript (6)mysql (5).NET (5)