Ayuda con robot en Asterisk

Hola a todos los cofrades resulta que estoy haciendo un proyecto para mi escuela el cual consiste en un robot que marque a ciertos numeros telefonicos para darle mensajes recordatorios, tengo un pbx con asterisk y tarjetas zap con las cuales salgo a la PSTN, estoy usando archivos .call para esto, el unico problema es que no me detecta cuando la persona descuelga el telefono sino que se ejecuta de corridito, mi contexto es el siguiente:

[robot]
include => default
#exten => 77,1,Answer()
exten => 77,1,Wait(2)
exten => 77,n,Playback(bienvenida)
exten => 77,n,AGI(prueba.agi)
exten => 77,n,Playback(despedida)
exten => 77,n,Wait(2)
exten => 77,n,Hangup

ya probe con Answer al principio y sin el como se ve comentado en el contexto y mi archivo .call es el siguiente

Channel: Zap/1/019XXXXXXXXX
Callerid: Daniel Andrade <999999999>
MaxRetries: 1
RetryTime: 1800
WaitTime: 45
Context: robot
Extension: 77
Priority: 1

espero alguien haya tenido alguna experiencia con esto y me pueda apoyar o indicar el xq y como solucionarlo, de ante mano gracias

Saludos

15 thoughts on “Ayuda con robot en Asterisk”

    1. Pop AMI me permitira ejecutar mi script cuando contesten el telefono? lo q no detecto es cuando del otro lado descuelgan el telefono, para ejecutar mi contexto de forma adecuada, la bienvenida, el agi y la despedida

  1. Si es que entiendo bien tu pregunta, aqui la cuestion en realidad tiene mas que ver con las lineas analogas. Tanto el Originate del manager como los call files usan la misma API interna de Asterisk para originar la llamada y contestarla etc, por lo que no hay diferencia en el manejo interno de la llamada (cuando se decide que ya esta contestada).

    El problema es que las lineas analogicas son circuitos bastante simples, cuando Asterisk llama, pone la linea offhook (descuelgas el telefono), manda digitos, y luego que Dios te ayude :), esto debido a que usualmente es un humano el que llama y un humano sabe cuando escucha a otro humano y sabe cuando escucha el tono de marcado u ocupado (tu tu tu tu tu …)

    A menos de que uses alguna forma de call progress para detectar cuando hay actividad de voz humana (y no una contestadora, tono de progreso, ocupado etc) Asterisk no tiene forma de saber si el otro lado ya contesto, entonces en cuanto la linea se va offhook, . Tengo entendido que algunos paises mandan un polarity reversal al contestar y al colgar, sin embargo no se si Mexico sea uno de esos paises.

    Te sugiero que busques en google call progress analysis para Asterisk. Este post http://www.mail-archive.com/asterisk-users@lists.digium.com/msg144668.html es claro al respecto pero no muy alentador, para ser el 2006, pero puede ser que el estado de las cosas siga siendo el mismo a la fecha.

  2. Ok gracias a todos por sus comentarios, en conclusion he visto por ahi que en mexico no manejan la reversion de polaridad para detectar cuando la persona ya descolgo osea mandar la polaridad de descolgado, he intentado con callprogress pero no funciona, mi duda es, creen que usando un proveedor de servicio SIP pueda hacer funcionar el sistema? a diferencia de usar la salidas por ZAP ??, mi pregunta tmb es como es que las demas compañias hacen este tipo de sistemas?.

    Saludos

    1. Si usas troncales con ISDN-PRI tienes una señal conocida como “Answer supervision”, en R2 y en análogas no hay esto. en SIP tienes los codigos de contestación, pero no estados de línea (Número no existente, fuera de servicio, etc.) COmo lo tienes en ISDN-PRI o SS7.

      Complementando lo que dice Moy, es posible hacer un truco de ingenieria social usando la aplicación “BackgroundDetect”, mandas unos “Bueno bueno” en un archivo de audio y si reconoce algo aproximado a la frecuencia de voz humana te manda a una extensión “talk” y de allí haces tu lógica de control.

  3. Si usas SIP no tienes ningun problema, los mensajes de progreso y answer estan perfectamente definidos. En realidad, las lineas analogas son una excepcion y no deberias tener problema con ningun otro protocolo sea voip o pstn para lo que quieres hacer.

    como sabes que las demas usan lineas analogicas? de ser asi, debe ser mediante cpa.

  4. otra opcion es mandar la llamada a un menu que simplemente repita, presione uno para escuchar su recordatorio, y lo repita constantemente. De ese modo cuando alguien realmente conteste escuchara el mensaje o parte del mensaje y luego el mensaje completo y ya podra presionar 1 y recuperar su recordatorio.

  5. Muy buenas opciones por parte de Pop y de moy, actualmente contacte con un carrier SIP estoy esperando su respuesta para no descartar esta opcion, pero lo que ya no deseo es invertir, y estoy haciendo unas pruebas con backgrounddetect si alguien tiene un ejemplo implementado me seria de gran ayuda, mientras sigo leyendo en las wikis, gracias de ante mano

  6. *CLI> show application BackgroundDetect

    -= Info about application ‘BackgroundDetect’ =-

    [Synopsis]
    Background a file with talk detect

    [Description]
    BackgroundDetect(filename[|sil[|min|[max]]]): Plays back a given
    filename, waiting for interruption from a given digit (the digit must
    start the beginning of a valid extension, or it will be ignored).
    During the playback of the file, audio is monitored in the receive
    direction, and if a period of non-silence which is greater than ‘min’ ms
    yet less than ‘max’ ms is followed by silence for at least ‘sil’ ms then
    the audio playback is aborted and processing jumps to the ‘talk’ extension
    if available. If unspecified, sil, min, and max default to 1000, 100, and
    infinity respectively.

  7. Como indica el pop arriba usando el comando originate de ami puedes programar llamadas a realizar, y mediante status channel puedes saber cuál es el estado de canal, también si ejecutas en un php-agi la función dial te devuelve un estado de la llamada realizada como contestada, colgada, ocupada, etc., para saber si una llamada fué contestada requieres un FXO con detección de polaridad inversa olvídate aquí de un SPA3102 o un X100p, si es una troncal SIP o IAX también te puede devolver el estado de una llamada.

Leave a Reply