Estoy usando un clicktocall para originar llamadas desde un servidor web. Abro un socket y le mando el comando Originate del manager con los siguientes parámetros: un canal y número para originar un extemo de la llamada y una extensión y su contexto para el otro extremo.
Action: Originate
Channel: Zap/g1/0952563723
Context: alcatel
Exten: 646554554
Puedes mandar más parámetros. Se pueden consultar aqui
Una vez que se contesta un extremo de la llamada, se origina la segunda llamada y si es contestada asterisk las une haciendo bridging.
a) Asterisk -> NumeroA
b) Asterisk -> NumeroB
c) NumeroA <- AsteriskBridge -> NúmeroB
El problema que he tenido es a la hora de la tarificación. Para saber el coste real de la llamada necesito saber cuantos segundos dura ‘a’ y cuántos ‘b’. Pero en el Master.csv solo refleja el registro del cdr para ‘c’.
Esto lo he usado usando las funciones ResetCDR() y ForkCDR().
En mi ejemplo, en el contexto ‘alcatel’, por ejemplo para las llamadas a móbiles nacionales, dejaría la configuración del contexto de la siguiente manera.
exten => _6XXXXXXXX,n,ResetCDR()
exten => _6XXXXXXXX,n,Dial(zap/g1/0${EXTEN},90,TtA(c2c/grabación))
exten => _6XXXXXXXX,n,ForkCDR()
ResetCDR resetearía algunos valores para el registro cdr de la llamada actual y lo almacenaría.
ForkCDR generaría un nuevo registro cdr con el que podríamos distinguir la duración de la llamada que acabamos de establecer de la de la duración global de la llamada.
No creo que sea la mejor forma para hacerlo pero es la única con la que he podido. Si alguien sabe como hacer esto está invitado a comentarlo.