Transfering call to ConfBridge drops customer call

Hi, I have this situation :

  1. Customer A from the outside calls asterisk, goes trough a queue and then gets his call answered by an operator B
  2. When B wants to do a conference with another operator C and the customer, he clicks a button in our interace
  3. A and B get redirected over a ConfBridge room, C gets originated to the same ConfBridge room

This is my extensions.conf :

[queue_base]
exten => 78,1,Answer
exten => 78,2,MixMonitor(${CALLERID(num)}-${UNIQUEID}-${EPOCH}-${STRFTIME(${EPOCH},%Y%m%d-%H%M%S)}.wav,b)
exten => 78,3,Set(incoming=1)
exten => 78,n,Queue(centralino-low)
exten => 78,n,Hangup
exten => 78,n,StopMixMonitor()

[to_conference]
exten => _.X,1,Answer
exten => _.X,n,ConfBridge(${EXTEN},1q)
exten => h,n,Hangup

[add_to_conference]
exten => _.X,1,Answer
exten => _.X,n,ConfBridge(${EXTEN},1q)
exten => h,n,Hangup

And what I do over AMI command is this :

  1. First send an originate to have C called and put into add_to_conference context, with these parameters
    "Originate", “Channel” => SIP/2001,
    “Context” => “add_to_conference”,
    “Exten” => “468”,
    “Priority” => “1”

  2. Then send a redirect to have A and B redirected to the to_conference context, with these parameters

“Redirect”,
“Channel” => “SIP/2000-00000002”,
“ExtraChannel” => “SIP/noverca-out-00000000”,
“Context” => “to_conference”,
“ExtraContext” => “to_conference”,
“Exten” => “468”,
“ExtraExten” => “468”,
“Priority” => “1”,
“ExtraPriority” => “1”

It all goes well for B and C, the operators, but A, the customer gets his phone hangup.

This is what I get in asterisk console :
– Executing [78@queue_base:1] Answer(“SIP/noverca-out-00000000”, “”) in new stack
– Executing [78@queue_base:2] MixMonitor(“SIP/noverca-out-00000000”, “00393355286159-1304695086.0-1304695087-20110506-171807.wav,b”) in new stack
– Executing [78@queue_base:3] Set(“SIP/noverca-out-00000000”, “incoming=1”) in new stack
– Executing [78@queue_base:4] Queue(“SIP/noverca-out-00000000”, “centralino-low”) in new stack
– Music class default requested but no musiconhold loaded.
== Using SIP RTP CoS mark 5
== Begin MixMonitor Recording SIP/noverca-out-00000000
– SIP/2001-00000001 is ringing
> doing dnsmgr_lookup for ‘noverca.com
> ast_get_srv: SRV lookup for ‘_sip._udp.noverca.com’ mapped to host voip5.noverca.com, port 443
> doing dnsmgr_lookup for ‘noverca.com
> ast_get_srv: SRV lookup for ‘_sip._udp.noverca.com’ mapped to host voip1.noverca.com, port 5060
– SIP/2001-00000001 answered SIP/noverca-out-00000000
== Using SIP RTP CoS mark 5
> Channel SIP/2000-00000002 was answered.
– Executing [468@add_to_conference:1] Answer(“SIP/2000-00000002”, “”) in new stack
– Executing [468@add_to_conference:2] ConfBridge(“SIP/2000-00000002”, “468,1q”) in new stack
– Executing [468@to_conference:1] Answer(“SIP/2001-00000001”, “”) in new stack
– Executing [468@to_conference:2] ConfBridge(“SIP/2001-00000001”, “468,1q”) in new stack
== Spawn extension (to_conference, 468, 1) exited non-zero on ‘SIP/noverca-out-00000000’
– Executing [468@to_conference:1] Answer(“SIP/noverca-out-00000000”, “”) in new stack
– Executing [468@to_conference:2] ConfBridge(“SIP/noverca-out-00000000”, “468,1q”) in new stack
– Executing [h@to_conference:1] Answer(“SIP/noverca-out-00000000”, “”) in new stack
== Spawn extension (to_conference, h, 1) exited non-zero on ‘SIP/noverca-out-00000000’

== MixMonitor close filestream
== End MixMonitor Recording SIP/noverca-out-00000000

I can’t understand what I’m doing wrong. I tried swapping redirect with originate, swapping redirect channels… it just drops the call. It just works randomly sometimes, but like 1 in a 100 times…
Can someone help me pls? Thanks.

Just now I tried another scenario, Operator B calls Customer A and then starts the conference with Operator C. This seems to work, until I voluntarily hangup :

   > Channel SIP/2000-00000005 was answered.
-- Executing [470@add_to_conference:1] Answer("SIP/2000-00000005", "") in new stack
-- Executing [470@add_to_conference:2] ConfBridge("SIP/2000-00000005", "470,1q") in new stack
-- Executing [470@to_conference:1] Answer("SIP/noverca-out-00000004", "") in new stack
-- Executing [470@to_conference:2] ConfBridge("SIP/noverca-out-00000004", "470,1q") in new stack
-- <SIP/2001-00000003>AGI Script [agi://127.0.0.1](agi://127.0.0.1) completed, returning -1
-- Executing [470@to_conference:1] Answer("SIP/2001-00000003", "") in new stack
-- Executing [470@to_conference:2] ConfBridge("SIP/2001-00000003", "470,1q") in new stack

-- Executing [h@to_conference:1] Answer("SIP/noverca-out-00000004", "") in new stack
-- Executing [h@to_conference:2] ConfBridge("SIP/noverca-out-00000004", "h,1q") in new stack
-- Executing [h@to_conference:1] Answer("SIP/2001-00000003", "") in new stack
-- Executing [h@to_conference:2] ConfBridge("SIP/2001-00000003", "h,1q") in new stack

== MixMonitor close filestream
== End MixMonitor Recording SIP/2001-00000003
[May 6 17:35:18] WARNING[7095]: translate.c:162 framein: no samples for gsmtolin
– Executing [h@add_to_conference:1] Answer(“SIP/2000-00000005”, “”) in new stack
– Executing [h@add_to_conference:2] ConfBridge(“SIP/2000-00000005”, “h,1q”) in new stack

I also tried once again the scenario in the opening post and noted that customer call gets hangup just as operator C answers his phone…