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
Usa AMI: http://www.voip-info.org/wiki/view/Asterisk+manager+API
El uso de los archivos .call no te permite tener mucho control de las cosas.
Checando pop gracias.
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
Si. conectas con un “Originate” a laextensión en el dialplan de tu Asterisk.
amigo revisa mi blog deje un script de despertador podria servirte.
http://voipasinco.wordpress.com
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.
Si solo con líneas digitales de tipo ISDN-PRI o SS7 puedes hacer eso, con R2 o análogas es dificil.
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
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.
en realidad solo en analogas no lo tienes, R2 si tiene notificacion de answer.
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.
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.
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
*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.
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.