Grabando llamadas con Asterisk

Pequeño macro para realizar grabación de llamadas con Asterisk.

[macro-grabarfile]
exten => s,1,Set(calltime=${STRFTIME(${EPOCH},,%C%y%m%d-%H%M%S)})
exten => s,n,Set(calldir=/var/spool/asterisk/monitor/${CALLERID(num)})
exten => s,n,System(/bin/mkdir -p ${calldir})
exten => s,n,MixMonitor(${calldir}/${calltime}-${CALLERID(num)}-${MACRO_EXTEN}.wav|av(0)V(0))
exten => s,n,Dial(${ARG1},40)
exten => s,n,Hangup()

Para grabar las llamadas hacia una extensión dada.

exten => 9261,1,Macro(grabarfile,SIP/trantor)

El macro en ejecución.

    -- Executing [9261@default:1] Macro("SIP/10.9.201.252-b6909650", "grabarfile|SIP/trantor") in new stack
    -- Executing [s@macro-grabarfile:1] Set("SIP/10.9.201.252-b6909650", "calltime=20090511-163021") in new stack
    -- Executing [s@macro-grabarfile:2] Set("SIP/10.9.201.252-b6909650", "calldir=/var/spool/asterisk/monitor/8237") in new stack
    -- Executing [s@macro-grabarfile:3] System("SIP/10.9.201.252-b6909650", "/bin/mkdir -p /var/spool/asterisk/monitor/8237") in new stack
    -- Executing [s@macro-grabarfile:4] MixMonitor("SIP/10.9.201.252-b6909650", "/var/spool/asterisk/monitor/8237/20090511-163021-8237-9261.wav|av(0)V(0)") in new stack
  == Begin MixMonitor Recording SIP/10.9.201.252-b6909650
    -- Executing [s@macro-grabarfile:5] Dial("SIP/10.9.201.252-b6909650", "SIP/trantor|40") in new stack
    -- Called trantor
    -- SIP/trantor-08242458 is ringing
    -- SIP/trantor-08242458 answered SIP/10.9.201.252-b6909650
  == Spawn extension (macro-grabarfile, s, 5) exited non-zero on 'SIP/10.9.201.252-b6909650' in macro 'grabarfile'
  == Spawn extension (macro-grabarfile, s, 5) exited non-zero on 'SIP/10.9.201.252-b6909650'
  == End MixMonitor Recording SIP/10.9.201.252-b6909650

El archivo en cuestión.

asteriskpbx:/home/gabriel# ls /var/spool/asterisk/monitor/8237/*61.wav
/var/spool/asterisk/monitor/8237/20090511-163021-8237-9261.wav

21 thoughts on “Grabando llamadas con Asterisk

  1. Buenas tardes,

    Estoy aprendiendo con Asterisk 1.8 y en el tema de grabaciones de llamadas tengo una duda y es si se pueden programar grabaciones aleatorias a los agentes de una cola. Es decir, poder programar que al día se graben de cada agente de una cola dos llamadas recibidas de forma aleatoria.
    No se si me podrías dar algo de luz en este tema.
    Muchas gracias por tu ayuda.

    Like

  2. Estimado,

    No queda mas que felicitar esta increible solucion para quienes siempre buscamos como sacar el maximo de rendimiento a asterisk…

    Te consulto si bien puedo grabar las llamadas salientes, ¿como puedo aplicarlo con las entrantes?

    muchas gracias

    Marcelo Jara.

    Like

    1. Hola.

      De igual manera usando el macro pero aplicándolo a tu contexto de entrantes, por ejemplo así:

      Este es parte de un contexto de llamadas entrantes para un enlace digital, 4 DID que envía la telefónica y lo demás lo recibe la operadora.

      [entrantes]
      include => ivr
      include => internal

      exten => _X.,1,NoOP(${EXTEN})
      exten => _X.,n,NoOP(${CALLERID})
      exten => _X.,n,Set(CALLERID(all)=”Llamada”)
      exten => _X.,n,Background(custom/ivrcentro)
      exten => _X.,n,WaitExten(8)
      exten => _X.,n,Macro(grabarfile,SIP/3100)

      exten => i,1,Macro(grabarfile,SIP/3100)
      exten => t,1,Macro(grabarfile,SIP/3100)

      exten => 3102,1,Macro(grabarfile,SIP/${EXTEN})
      exten => 3105,1,Macro(grabarfile,SIP/${EXTEN})
      exten => 3106,1,Macro(grabarfile,SIP/${EXTEN})
      exten => 3107,1,Macro(grabarfile,SIP/${EXTEN})

      Aquí en ejecución:

      [Jun 4 09:32:58] NOTICE[22579]: chan_unicall.c:2518 handle_uc_event: Unicall/1 event Detected
      [Jun 4 09:33:00] NOTICE[22579]: chan_unicall.c:2518 handle_uc_event: Unicall/1 event Offered
      [Jun 4 09:33:00] NOTICE[22579]: chan_unicall.c:2642 handle_uc_event: CRN 39183 – Offered on channel 0 (ANI: , DNIS: 3107, Cat: 1)
      [Jun 4 09:33:00] NOTICE[22579]: chan_unicall.c:2518 handle_uc_event: Unicall/1 event Accepted
      — Executing [2107@entrantescentro:1] Macro(“UniCall/1-1”, “grabarfile|SIP/3107”) in new stack
      — Executing [s@macro-grabarfile:1] Set(“UniCall/1-1”, “calltime=20130604-093300”) in new stack
      — Executing [s@macro-grabarfile:2] Set(“UniCall/1-1”, “calldir=/var/spool/asterisk/monitor/”) in new stack
      — Executing [s@macro-grabarfile:3] System(“UniCall/1-1”, “/bin/mkdir -p /var/spool/asterisk/monitor/”) in new stack
      — Executing [s@macro-grabarfile:4] MixMonitor(“UniCall/1-1”, “/var/spool/asterisk/monitor//20130604-093300–3107.wav|av(0)V(0)”) in new stack
      — Executing [s@macro-grabarfile:5] Dial(“UniCall/1-1”, “SIP/3107|40”) in new stack
      — Called 3107>
      == Begin MixMonitor Recording UniCall/1-1
      — SIP/3107-092f61b8 is ringing

      Saludos.

      Like

  3. mmmm no funca….

    mira esto es lo que tengo

    [grabar]
    exten => _XX..,1,Macro(grabarfile,${EXTEN})

    [macro-grabarfile]
    exten => s,1,Answer
    exten => s,n,Set(calltime=${STRFTIME(${},,%d%m%Y-%Hh%Mm%Ss)})
    exten => s,n,MixMonitor(${calltime}-${MACRO_EXTEN}.wav,W(3))
    exten => s,n,Goto(users,${ARG1},1)
    exten => s,n,Hangup()
    ;—————————————————————————

    exten => _X.,1,Answer
    exten => _X.,n,Set(calltime=${STRFTIME(${},,%d%m%Y-%Hh%Mm%Ss)})
    exten => _X.,n,MixMonitor(${calltime}-${MACRO_EXTEN}.wav,W(3))
    exten => _X.,n,Goto(users,${ARG1},1)
    exten => _X.,n,Hangup()

    esto lo coloco despues de features

    y antes del include => features coloco esto

    ;Grabacion de LLamados
    exten => _XXXXXXXX,1,Macro(grabarfile,${EXTEN})
    exten => _XXXXXXXX,n,Dial(${EXTEN})

    y con eso a la extension la coloco en el contexto = grabar y me graba las salientes

    Si me das otra manito muchas gracias.

    Like

    1. Hola,

      Alcanzo a ver lo siguiente:

      En la parte donde pones la “Grabación de llamados” no veo que adiciones el tipo de canal que se utilizar (SIP/IAX2 o DAHDI), solo pones la variable para la extensión.

      Al macro le debes no solo pasar la extensión sino a que tipo de canal esta asociada esa extensión, puedes poner por ejemplo que es lo que te muestra en la consola de Asterisk.

      Saludos.

      Like

  4. Estimado;

    Muchas Gracias por tu ayuda..

    te comento que actualmente lo tengo asi y solo grabo las llamadas salientes..

    las entrante al parecer es algo más dificil …

    una ayudita más jejeje

    gracias amigo.

    Like

  5. Tengo un asterisk version 11.14 y tengo dificultades para grabar mis extensiones y he copiado la linea que sugieres en el extension.conf y no me funciona se debe modificar otro archivo?

    Like

    1. Hola,

      Es un ejemplo sencillo el que pongo pero debe funcionar, ¿que mensaje te arroja en el CLI de Asterisk?, ¿si se genera un archivo o no?

      Gracias por visitar el blog.

      Like

  6. Hola lo hice y si se genera el archivo, pero lo genera afuera de la carpeta de la extensión y lo pone con un nombre generico. 1439312629.1.wav, no se que estoy haciendo mal, este es mi codigo.

    [macro-grabarfile]
    exten => s,1,Set(calltime=${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)})
    exten => s,n,Set(calldir=/var/spool/asterisk/monitor/1917)
    exten => s,n,System(/bin/mkdir -p 1917)
    exten => s,n,MixMonitor(1917/${calltime}-${CALLERID(num)}-1903.wav|av(0)V(0))
    exten => s,n,Dial(${ARG1},40)
    exten => s,n,Queue(0900)
    exten => s,n,Hangup()

    Like

    1. Hola herwin.

      Puse el codigo que mencionas a probar y se ejecuta correctamente, salvo por la linea cuando entras a una cola que quite este es el comportamiento que tengo al aplicarlo al realizar una llamada.

      — Executing [9271@MCM-Out:1] Macro(“SIP/mitel-00009512”, “grabarfileblog,SIP/9999”) in new stack
      — Executing [s@macro-grabarfileblog:1] Set(“SIP/mitel-00009512”, “calltime=2015-08-14 12:26:08”) in new stack
      — Executing [s@macro-grabarfileblog:2] Set(“SIP/mitel-00009512”, “calldir=/var/spool/asterisk/monitor/1917”) in new stack
      — Executing [s@macro-grabarfileblog:3] System(“SIP/mitel-00009512”, “/bin/mkdir -p 1917”) in new stack
      — Executing [s@macro-grabarfileblog:4] MixMonitor(“SIP/mitel-00009512”, “1917/2015-08-14 12:26:08-8237-1903.wav,av(0)V(0)”) in new stack
      — Executing [s@macro-grabarfileblog:5] Dial(“SIP/mitel-00009512”, “SIP/9999,40”) in new stack

      Y lo esta guardando en la carpeta de /var/spool/asterisk/monitor/1971

      root@asteriskvm:/var/spool/asterisk/monitor/1917# pwd
      /var/spool/asterisk/monitor/1917
      root@asteriskvm:/var/spool/asterisk/monitor/1917# ls -l
      total 72
      -rw-r–r– 1 root root 45804 Aug 14 12:20 2015-08-14 12:20:19-8237-1903.wav
      -rw-r–r– 1 root root 22444 Aug 14 12:26 2015-08-14 12:26:08-8237-1903.wav

      Puedes poner lo que sucede en el CLI de Asterisk cuando realizas la llamada.

      Saludos y gracias por visitar el blog.

      Like

  7. Esta solución la aplique anteriormente y medio resultados claro sin hacer la macro directo al dial, pero dime ahora me surge una nueva cosa como grabar solo algunas extensiones en especifico ??

    Me podrias ayudar..

    Like

    1. Hola, normalmente aplico la macro en las extensiones que quiero grabar, si tengo un grupo de extensiones puedes aplicar la macro y aplicando en la sintaxis algún comodín para englobar todas las extensiones que empiecen con 98xx por ejemplo, si no es lo que buscas puedes ampliar un poco mas el ejemplo que pones.

      Saludos.

      Like

    1. Hola, supongo que sí, al final toda llamada pasara por el plan de marcado y grabara, habría que adecuar la variable de la extensión para tu base de datos.

      Saludos.

      Like

    1. Hola,

      Normalmente esta macro te puede servir si lo incluyes en todo el plan de marcado, sobre todo si haces transferencias de llamadas desde una troncal SIP, un E1 o lineas analógicas, incluso en soluciones profesionales de otras marcas he oído el problema que mencionas.

      Te pongo un link de un blog muy bueno: https://www.sinologic.net/blog/2011-07/soluciones-de-grabacion-profesional-para-callcenters-silencio-se-graba.html

      Igual te puede servir para que te des una idea.

      Saludos, gracias por visitar y comentar.

      Like

  8. una consulta, como podria hacer que esta macro lea las extensiones desde un archivo quedo atento, Saludos y muchas gracias por la información.

    Like

  9. Hola Gabriel, tengo un Asterix 13. Mi intención no sería grabar todas las llamadas, si no que el operador pudiera grabar alguna cuando lo desee, por ejemplo presionando una tecla o una cominación de ellas.
    Se podrá hacer?
    Gracias de antemano

    Like

Leave a Reply to Christian Cancel reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: