How to maintain TRANSFER_CONTEXT between Attended Transfers?

Happy New Year all,

Our Attended Transfers are not maintaining the state of the original phone call. I made changes that attempt to set the transfer context to the call filename before passing the transfer context into what was originally Cisco Jabber but is now Mattermost. The previous dial plan was functioning. The dial plan with these changes is now completely broken:

 ;[mattermost-notify]
-exten   =>       _XX,1,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${CALLFILENAME}))
+exten   =>       _XX,1,Set(TRANSFER_CONTEXT=${CALLFILENAME})
+exten   =>       _XX,2,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${TRANSFER_CONTEXT}))
 exten   =>       _XX,n,Dial(SIP/${EXTEN},60,t)
-exten   =>       _1XX,1,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${CALLFILENAME}))
+exten   =>       _2XX,1,Set(TRANSFER_CONTEXT=${CALLFILENAME})
+exten   =>       _1XX,2,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${TRANSFER_CONTEXT}))
 exten   =>       _1XX,n,Dial(SIP/${EXTEN},60,t)
-exten   =>       _2XX,1,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${CALLFILENAME}))
+exten   =>       _3XX,1,Set(TRANSFER_CONTEXT=${CALLFILENAME})
+exten   =>       _2XX,2,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${TRANSFER_CONTEXT}))
 exten   =>       _2XX,n,Dial(SIP/${EXTEN},60,t)
-exten   =>       _3XX,1,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${CALLFILENAME}))
+exten   =>       _3XX,1,Set(TRANSFER_CONTEXT=${CALLFILENAME})
+exten   =>       _3XX,2,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${TRANSFER_CONTEXT}))
 exten   =>       _3XX,n,Dial(SIP/${EXTEN},60,t)
-exten   =>       _4XX,1,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${CALLFILENAME}))
+exten   =>       _4XX,1,Set(TRANSFER_CONTEXT=${CALLFILENAME})
+exten   =>       _4XX,2,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${TRANSFER_CONTEXT}))
 exten   =>       _4XX,n,Dial(SIP/${EXTEN},60,t)
-exten   =>       _5XX,1,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${CALLFILENAME}))
+exten   =>       _5XX,1,Set(TRANSFER_CONTEXT=${CALLFILENAME})
+exten   =>       _5XX,2,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${TRANSFER_CONTEXT}))
 exten   =>       _5XX,n,Dial(SIP/${EXTEN},60,t)
-exten   =>       _6XX,1,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${CALLFILENAME}))
+exten   =>       _6XX,1,Set(TRANSFER_CONTEXT=${CALLFILENAME})
+exten   =>       _6XX,2,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${TRANSFER_CONTEXT}))
 exten   =>       _6XX,n,Dial(SIP/${EXTEN},60,t)
-exten   =>       _7XX,1,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${CALLFILENAME}))
+exten   =>       _7XX,1,Set(TRANSFER_CONTEXT=${CALLFILENAME})
+exten   =>       _7XX,2,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${TRANSFER_CONTEXT}))
 exten   =>       _7XX,n,Dial(SIP/${EXTEN},60,t)
-exten   =>       _8XX,1,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${CALLFILENAME}))
+exten   =>       _8XX,1,Set(TRANSFER_CONTEXT=${CALLFILENAME})
+exten   =>       _8XX,2,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${TRANSFER_CONTEXT}))
 exten   =>       _8XX,n,Dial(SIP/${EXTEN},60,t)
-exten   =>       _9XX,1,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${CALLFILENAME}))
+exten   =>       _9XX,1,Set(TRANSFER_CONTEXT=${CALLFILENAME})
+exten   =>       _9XX,2,ExecIf($["${EXTENSION_STATE(${EXTEN}@from-internal)}"="NOT_INUSE"]?AGI(/var/lib/asterisk/agi-bin/jabber.sh,${EXTEN},${CALLERID(num)},${UNIQUEID},"${CALLERID(name)}",${TRANSFER_CONTEXT}))
 exten   =>       _9XX,n,Dial(SIP/${EXTEN},60,t)

According to our phone users, “call comes in, rings for one second, is assigned to an agent not on the call, five seconds pass, it does it again to the same agent,”

How did I set up the TRANSFER_CONTEXT wrong and how can I make it right?

Sincerely,
Patrick Seiter

You should probably show the Asterisk console output of an attempt… and further explain how TRANSFER_CONTEXT is expected to be used and what you think should happen when it is set.

Hello Joshua,

I will ask our SYS to look for logs.

This is the full context of the issue as reported in our system:

According to a previous ticket, Cold Transfers are the only way to get the expected routing of the caller’s phone number from our Asterisk links.

Conversely, an Attended Transfer instead leads to the extension of the CSR making the transfer.

These factors may also have an effect on Transcript routing.

OPS would prefer to retain the convenience of Attended transfers except they should appropriately link & transcript to the caller rather than any CSR or internal extensions.

Our goal is to set the TRANSFER_CONTEXT to the CALLFILENAME which contains the inbound phone number of the customer.

When TRANSFER_CONTEXT is set, it should maintain state between Attended Transfers so that our Customer Service Representatives do not lose the phone number of our customers.

Patrick

I’m still confused due to lack of information or detail and specific comments of your environment but I’ll state this… an attended transfer is no different than a normal phone call when initiated from the phone, until the attended transfer is actually completed.