Hola
Iba yo a contar el viernes mis avances; al final preferí esperar a
hacer algunos tests más, pero te respondo ya para no dejarte con la
palabra en la boca :)
Por las pruebas que he realizado, Asterisk SÍ permite hacer
transferencias a dialogs que no atraviesen por él. El truco es el
parámetro "domain", que le dice a Asterisk cuáles son sus dominios
locales. Si el dominio de destino de la transferencia lo tiene
Asterisk como local (si no configuras ninguno siempre lo toma como
local), supondrá que él tiene que tener la llamada, y cuando no la
encuentra es cuando devuelve el 481.
Yo tengo Kamailio y Asterisk en la misma máquina, así que lo que hice
fue un bind de Kamailio a una IP virtual (que tengo para alta
disponibilidad) y el Asterisk a la IP física, Una vez hecho esto, hice
una prueba con una llamada a un Playback en el Asterisk, y al realizar
la transferencia me devolvió un 503, con un mensaje que dice "not
possible to transfer one-legged calls", o algo así. Me fui al código y
encontré el punto en el que se envía ese mensaje; justo antes, hay un
comentario que explica que habría que realizar una llamada y luego
puentear los canales (ver flujo de llamada más arriba), acabando con
la frase, y cito: "Put your code here :)"
Esto, claro, desmoraliza, ya me veía yo programando. Pero una llamada
solo atraviesa por ahí si no está bridgeada (one-legged call), lo que
hace que si el Asterisk se utiliza como gateway hacia otras
tecnologías no sea un problema en absoluto (por demostrar). En
principio en mi solución el caso que veo en que puede fallar es en
transferencias hacia salas de conferencias, pero solo en el caso de
que se transfiera una sala a un canal, que no es el escenario
habitual.
No he probado aún si fallan las llamadas a través de colas, que sería
el caso más preocupante, aunque intuyo que una vez esté la llamada
establecida con un agente no debería haber problemas. Me falta también
hacer pruebas con más tecnologías (por ahora he probado en entornos
todo SIP), ahora mismo le enchufo una tarjeta a la máquina y miro. IAX
que lo pruebe otro, que a mi me da pereza.
Sobre el link que indicaste, yo intenté una solución con los profiles
del módulo dialogs de manera que si había una llamada establecida con
Asterisk a/desde un teléfono, la siguiente pasase por el Asterisk.
Pero no me vale de mucho, porque si la primera llamada no atraviesa
por Asterisk y la segunda sí, se dan condiciones en que falla.
También, me parece que el escenario que están discutiendo ahí no es
exactamente el mismo que tengo yo, y hacen cosas que no me explico
para qué...
Antes de que me echéis la bronca si probáis esto y no funciona, repito
que aún no he hecho pruebas exhaustivas. Si alguien me dice una
condición de llamada puenteada en que falle, agradecido.
Saludos