El agi termina correctamente? Tienes habilitado el authofallthrough?
--
/Saúl
http://www.saghul.net | http://www.sipdoc.net
Fijarse en "; Actualiza bolsa de Minutos" ahi esta la h, que
efectivamente se me ejecuta al colgar - ahora cuando cuelga el que
llama - ->
---
[autentica-fijolocal]
; Discrimino lo digitado por el usuario:
exten => _#*XXXX9[2-7]XXXXXX,1,Set(NUMERO_MARCADO=${EXTEN:7})
exten => _#*XXXX9[2-7]XXXXXX,2,Set(CLAVE_MARCADA=${EXTEN:2:4})
; Mi conexión a la db para datos del usuario
exten => _#*XXXX9[2-7]XXXXXX,n,MYSQL(Connect connid localhost asterisk
asterisk dbasterisk)
exten => _#*XXXX9[2-7]XXXXXX,n,MYSQL(Query resultid ${connid} SELECT\
clave\,saldo_min\,context\,minutos_cons\ FROM\ sip\ WHERE\
clave=${CLAVE_MARCADA})
exten => _#*XXXX9[2-7]XXXXXX,n,MYSQL(Fetch fetchid ${resultid}
var_clave\ var_saldo_min\ var_contexto\ var_minutos_cons)
exten => _#*XXXX9[2-7]XXXXXX,n,MYSQL(Clear ${resultid})
exten => _#*XXXX9[2-7]XXXXXX,n,MYSQL(Disconnect ${connid})
; Decision ->
exten => _#*XXXX9[2-7]XXXXXX,n,GotoIf($[${CLAVE_MARCADA} =
${var_clave}]?vpanasonicin:dialno)
; Comprando privelegios de usuario ->
exten => _#*XXXX9[2-7]XXXXXX,n(vpanasonicin),GotoIf($[${var_contexto}=gerente]?bolsa_minutos:dialno)
; Comprobar bolsa de Minutos ->
exten => _#*XXXX9[2-7]XXXXXX,n(bolsa_minutos),GotoIf($[${var_saldo_min}
> 0]?llama-fijolocal:dialno2)
; Llamar ...
exten => _#*XXXX9[2-7]XXXXXX,n(llama-fijolocal),Dial(DAHDI/g0/${NUMERO_MARCADO},30,Ttr)
exten => _#*XXXX9[2-7]XXXXXX,n,(llama-fijolocal),Hangup()
; Actualiza bolsa de Minutos ->
exten => h,1,DeadAGI(actualiza_bolsa.php,${var_saldo_min},${var_clave},${var_minutos_cons})
; Mensajillos de error ->
exten => _#*XXXX9[2-7]XXXXXX,n(dialno),Playback(clave-incorrecta)
exten => _#*XXXX9[2-7]XXXXXX,n(dialno),Hangup()
----
He probado también invocando a una Macro y ahi hacia el Dial y la h
llamando a mi DeadAgi, pero igual, ahora por algún motivo el que llama
tiene que colgar para que se ejecute la h, el que llama es un interno
con SIP y al que llama es un DAHDI E1.
A sus comentarios ... gracias..
Ronald -
+ En la extensión h le puse el NoOp antes de ejecutar el DeadAgi, y
pues si se ejecuta...
-- Executing [h@empleado:1] NoOp("SIP/996-b5e1d658", "ALGOOO - -
- - SALDO_MIN -> 7702| CLAVE -> 1234| MINUTOS_CONSUMIDOS-> 11") in new
stack
++ Luego ya procede el DeadAgi, pero con esa advertencia de que
utilize AGI en vez de DeadAGI:
--
-- Executing [h@empleado:2] DeadAGI("SIP/996-b5e1d658",
"actualiza_bolsa.php|7702|1234|11") in new stack
[Nov 25 13:09:35] WARNING[21827]: res_agi.c:2203 deadagi_exec: Running
DeadAGI on a live channel will cause problems, please use AGI
-- Launched AGI Script /var/lib/asterisk/agi-bin/actualiza_bolsa.php
AGI Tx >> agi_request: actualiza_bolsa.php
AGI Tx >> agi_channel: SIP/996-b5e1d658
AGI Tx >> agi_language: es
AGI Tx >> agi_type: SIP
AGI Tx >> agi_uniqueid: 1259172499.3423
AGI Tx >> agi_callerid: 996
AGI Tx >> agi_calleridname: 996
AGI Tx >> agi_callingpres: 0
AGI Tx >> agi_callingani2: 0
AGI Tx >> agi_callington: 0
AGI Tx >> agi_callingtns: 0
AGI Tx >> agi_dnid: #*123491234567
AGI Tx >> agi_rdnis: unknown
AGI Tx >> agi_context: empleado
AGI Tx >> agi_extension: h
AGI Tx >> agi_priority: 2
AGI Tx >> agi_enhanced: 0.0
AGI Tx >> agi_accountcode:
AGI Tx >>
AGI Rx << GET VARIABLE ANSWEREDTIME
AGI Tx >> 200 result=1 (70)
AGI Rx << HANGUP
AGI Tx >> 200 result=1
-- AGI Script actualiza_bolsa.php completed, returning 0
--
+++ Luego mando el hangup como última prioridad de la extensión h:
--
-- Executing [h@empleado:3] Hangup("SIP/996-b5e1d658", "") in new stack
== Spawn h extension (empleado, h, 3) exited non-zero on 'SIP/996-b5e1d658'
-- Hungup 'DAHDI/1-1'
--
++++ Ahi terminó la secuencia, sin embargo para que suceda todo lo
anterior pasa 1 minuto despues que el destino llamado ha colgado.
Si el que cuelga primero es el que llamo(origen ), entonces el DeadAgi
se ejecuta inmediatamente
Acabo de sacar la extensión h .. y AHORA SUCEDE LO MISMO :-S - ahora
si que se me complicó - :-(
Solo pasa con las llamadas desde SIP hacia Dahdi que maneja el E1-PRI,
... quiza algo para cambiar en el chan_dahdi.conf ?
alguna sugerencia ?
chan_dahdi.conf:
[channels]
context=default
usecallerid=yes
hidecallerid=no
callwaiting=yes
;usecallingpres=yes
usecallingpres=no
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
facilityenable=yes
cancallforward=yes
canpark=yes
relaxdtmf=yes
callgroup=1
pickupgroup=1
immediate=no
echocancel=no
language=es
callerid=asreceived
echocancel=no
echocancelwhenbridged=no
pridialplan=unknown
prilocaldialplan=unknown
..
..
..
Ronald -
Hmm, raro... el canal ya deberia estar colgado! Puedes probar otra
version de Asterisk?
Resumo para quedar claros:
- Tengo Asterisk 1.4.26.3 ( intentaré con otra también )
- cdr.conf : endbeforehexten=yes
- El DeadAgi se ejecuta luego de 1 minuto de que colgó la persona
llamada (destino PSTN)
- Si el que cuelga primero el llamante ( origen SIP ) todo va bien...
Ya omitiendo el DeadAGI y su invocación a travez de la extensión h...
me esta sucediendo lo mismo ..
Algun parametro como para detectar ese "¿cambio de polaridad .. ? "
lo raro es que suce al minuto exacto :-S
Gracias
Ronald -
Vale, lo que pasa es que tienes 2 problemas:
- La deteccion de colgado
- Algo del DeadAGI
Solucionalos de uno en uno o te vas a liar... lo de los 60 segundos
fijo que es porque tienes el rtptimeout a 60 y la cuelga Asterisk
porque no has detectado el colgado. Busca en el archivo de la lista,
que de el colgado hemos hablado largo y tendido :)
Siendo un PRI no hay inversion... el caso es que no le esta detectando
el colgado, y lo de un minuto excato fijo que es rtptimeout=60...
--
/Saúl
http://saghul.net | http://sipdoc.net
Algunos operadores envían la señalización de ocupado/congestión por
inband (medainte primario digo) lo cuál es patético (¿leéis esto
Telefónica y Jazztel?).
Un ejemplo claro es:
- Configuras un primario en Asterisk con "priindication=outofband"
; PRI Out of band indications.
; Enable this to report Busy and Congestion on a PRI using out-of-band
; notification. Inband indication, as used by Asterisk doesn't seem to work
; with all telcos.
;
; outofband: Signal Busy/Congestion out of band with RELEASE/DISCONNECT
; inband: Signal Busy/Congestion using in-band tones
;
priindication=outofband
- Haces que Asterisk llame a un móvil por ese primario.
- El móvil suena pera rechaza la llamada. El operador del móvil
enviará notificación de "ocupado", "no disponible" o algo así (a gusto
del operador).
- Pero Asterisk no se enterará de que la llamada ha sido rechazada.
Eso sí, se escucha "pii pii pii", pero sigue siendo audio.
¿Y por qué? Porque la señalización de "ocupado" que el operador del
primario nos envía no es "outofband" sino "inband" (¡¡ los jodidos
pitidos !!) así que Asterisk tiene que interpretar esos dichosos
pitiditos para deducir que el extremo está ocupado. Igualito igualito
que con las líneas analógicas, sólo que sin excusa ya que por supuesto
el protocolo RDSI/ISUP sí dispone de códigos de señalización
correspondientes a "ocupado".
De cualquier forma no me queda claro si en este hilo sehabla de si el
móvil llamado cualga la llamada o la rechaza. Si la contesta y luego
cuelga entonces lo que he dicho no procede.
Llamo desde el primario a un analógico de la pstn... para moviles no
salgo por ahi...
Ya probé bajando el tiempo de rtptimeout en el sip.conf, pero el
problema persiste ... la llamada se corta a los 60 segundos exactos
luego que el destino ha colgado.
Ademas no solo ocurre cuando llamo desde sip, también tengo una
troncal que cuando llama a la pstn ( en el medio esta asterisk) sucede
lo mismo ...
Ya voy aterrizando en que el problema sea con el proveedor; Iñaki,
según lo que comentas, con lo del 'priindication' también pasa
similar al llamar a operadores no moviles?
Si bien lo del rtptimeout se da en sip .. no habrá algo similar para
controlar ese colgado con dahdi?
Ronald -