Here is my Scenario:
When call comes in to my voicegateway, normally they go to CUCM then UCCX, and people hear the prompt and the rest of story. Now, if I redirect call to third party company from my UCCX script, two call legs are active during a call, and I loose two B channel while call is active.
Now, I talked to my career, and they can do TBCT, but this needs some TCL scripting on my voicegateway to release a call after redirection to third party company.
This is supposed to happen just if customer reaches specific phone number. So, basically if called number is for example "4444444" play a prompt to customer: " For order status press 1, For other query press 2." So if customer press 1, redirect call to another third party phone number then release call from our voicegateway, and if they press 2, normally send call to CUCM and the rest of story.
First, is there any sample script that I can look to get an idea.
Second, how do I apply this app to my dial-peer that can do the job correctly.
Any help would be appreciated.
Thank you,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
There are many ways to do TBCT. In yous case looks like the trigger is pulled by customer.
Call first reach the GW, Tcl script play prompt if caller press 1 the TBCT will be triggered, otherwise will go to CUCM.
There is no TBCT script flowing around. I think mainly is due to the transfer scenarios can be so different.
You configure TBCT Tcl script just like normal Tcl IVR script but you do need to do some IOS config for TBCT service.
I think it may be worth to open a DevNet support ticket if you are not sure about Tcl script.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you for respond.
Is it possible to open a DevNet support just for one case, or we need to have a DevNet support contract?
Thank you,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Yes, now is case by by case. Cisco DevNet Support
Before you open the ticket you may want to confirm your call scenario is what bed I have described. And think about when do yo want to release B channel ? 1. When transfer to party is ringing ? Or 2. When transfer to party answered ?
What if transfer to party is unable to answer for whatever reason, what would you like to do ? (How t handle the exception ?)
Voice Gateway API is the technology you will use for opening ticket.
Thanks.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
One more thing. How resource consuming will be this script to run, since this is a main number that we get 90 percent of our calls on it? So, basically this script will be running almost all the time.
Also I found a template scrip on this link : TBCT TCL Script template
Is this where TBCT happening in this script or to clarify when the script initiate TBCT request:
proc act_CallSetupDone { } {
global beep
set status [infotag get evt_status]
if { $status == "ls_000"} {
puts " call has been hairpinned "
puts "CLI_3:END:FAIL "
} elseif {$status == "ls_040" } {
puts "call transfer sucessful status is $status "
puts "CLI_3:ENDASSED "
act_Cleanup
} else {
puts " transfer status is $status "
Let's say customer calls 4444 which is DID, then under Dial-Peer that I make exactly for that called number I send call to external number. Now at this point script receives Ls_040 as a status then call get closed.
Is this how TBCT work. Or I am not understanding this correctly?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
There are REDIRECT_AT_ALERT and REDIRECT_AT_CONNECT, commonly used for TBCT.
REDIRECT_AT_ALERT -- if doing TBCT, PSTN switch will disconnect transfer by leg and trying to connect to transfer to leg. (there is a chance that transfer to leg won't get connected but transfer by leg disconnected already)
REDIRECT_AT_CONNECT transfer by leg is disconnected only when the transfer to leg is connect.
Apart from TCL script , you also need to configure IOS side for TBCT.
Thanks,
Raghavendra
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you for respond
Ok, here is my scenario: User call to 941-441-4659 number, number gets redirected to my voicegateway, and there is a DID setup for 4659. Now, I have dial-peer incoming called-number 4659. Call hits Dial-peer, then I play prompt to say " for order status press 1", and I will redirect call to external number and TBCT should happen, and " for other query press 2" then if they press 2 I send call to CUCM for the rest of stuff.
Here is the script I put together, can you please take a look and tell me if I am way off the track, or I am in a right track.
Any help would be appreciated.
proc init { } {
global param
set param(interruptPrompt) true
set param(terminationKey) #
}
proc act_Setup {} {
global select
leg proceeding leg_incoming
leg connect leg_incoming
set callInfo(mode) redirect_at_connect
set callInfo(notifyEvents) "ev_transfer_status ev_connected ev_progress"
media play leg_incoming _welcome.au
set pattern(select) .
leg collectdigits leg_incoming params pattern
proc act_GotPrompt{} {
set status [infotag get evt_status]
if { status == "cd_005" }
set select [ infotag get evt_dcdigits]
if { select == "1" } {
leg proceeding leg_incomong
leg setup 819414444444 callInfo leg_incoming
}
elseif { select == "2" } {
leg proceeding leg_incomong
leg setup 4659 callInfo leg_incoming
}
else {
call close
}
else {
call close
}
}
}
proc act_CallSetupDone{} {
set status [infotag get evt_status]
if {$status == "ls_000"}
puts "call has been hairpinned"
}elseif {$status == "ls_040"} {
puts "call transfer sucessful statusis $status"
act_Cleanup
} else {
puts "transfer status is %status"
}
}
#state Machine
set fsm(any_state,ev_disconnected) "act_Cleanup same_state"
set fsm(CALL_INIT,ev_setup_indication) "act_setup GETPROMPT"
set fsm(GETPROMPT,ev_collectdigits_done) "act_GorPrompt PLACECALL"
set fsm( PLACECALL,ev_setup_done) "act_CallSetupDone CALLACTIVE"
set fsm( PLACECALL,ev_transfer_status) "act_CallSetupDone same_state"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You need to set callInfo before leg setup command, consider raising a Dev Net support case if you have any issues with the script.
Thanks,
Raghavendra
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you,
I simplified my script in a way that if someone call 941-441-**** in which **** is a DID, call hits VoceGateway then gets redirected to 88888888. Now, what is happening is call rings to that external phone, but as soon as I answer, call gets ended with this error. here is a debug when call takes place:
1750164: Jul 22 16:19:12.463: //11185160//TCL :/tcl_LegObjCmd: leg proceeding leg_incoming
1750165: Jul 22 16:19:12.463: //11185160//TCL :/tcl_LegProceedObjCmd: proceeding leg_incoming
1750166: Jul 22 16:19:12.463: //11185160//AFW_:/vtd_lg_incoming: argc 2
1750167: Jul 22 16:19:12.463: //11185160//AFW_:/vtd_lg_incoming: Legs [11185160 ]
1750168: Jul 22 16:19:12.463: //11185160//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
1750169: Jul 22 16:19:12: %VOICE_IEC-3-GW: TCL_IVR: Internal Error (Invalid action in script): IEC=1.1.180.2.25.6 on callID 11185160 GUID=B8C91F002FE511E5B8E440553986D010
1750170: Jul 22 16:19:12.463: //11185160//AFW_:/AFW_FSM_Drive: Tcl_Eval to drive FSM inside Tcl modulespace. code=1 code=ERROR
1750171: Jul 22 16:19:12.467: TCL script failure
Result:
Illegal Operation: Leg not incoming or in wrong state
1750172: Jul 22 16:19:12.467: TCL script failure errorInfo:
Illegal Operation: Leg not incoming or in wrong state
while executing
"leg proceeding leg_incoming
(procedure "act_setup" line 3)
invoked from within
"act_setup"
And here is my simplified script:
global param
set param(interruptPrompt) true
set param(terminationKey) #
}
proc act_setup {} {
leg proceeding leg_incoming
leg connect leg_incoming
set callInfo(mode) redirect_at_connect
set callInfo(notifyEvents) "ev_transfer_status ev_connected ev_progress"
set callInfo(newguid) true
leg setup 88888888 callInfo leg_incoming
}
proc act_Cleanup {} {
call close
}
init
#State Machine
set fsm(any_state,ev_disconnected) "act_Cleanup same_state"
set fsm(CALL_INIT,ev_setup_indication) "act_setup PLACECALL"
set fsm(PLACECALL,ev_setup_done) "act_setup CALLACTIVE"
set fsm(PLACECALL,ev_transfer_status) "act_setup CALLACTIVE"
set fsm(CALLACTIVE,ev_disconnected) "act_Cleanup CALLDISCONNECT"
set fsm(CALLDISCONNECT,ev_disconnected) "act_Cleanup same_state"
fsm define fsm CALL_INIT
Please help me understand what is that error about?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The error because you are calling act_setup again once call is established.
set fsm(PLACECALL,ev_setup_done) "act_setup CALLACTIVE"
Please refer TCL IVR programming guide and our samples in below location. You can also refer our videos.
Thanks,
Raghavendra
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you again, I fixed it and now call gets connected. I added this part :
proc act_SetupDone {} {
set status [infotag get evt_status]
if {$status == "ls_040"} {
puts "call transfer sucessful statusis $status"
} else {
puts "transfer status is %status"
}
and expect to see " call transfer successful statusis $status" ,but what I see is the else part which say " puts "transfer status is %status" .
I want to make sure that I am transferring call correctly before turn on TBCT on IOS.
Am I doing right thing to transfer call? if yes why I do not see status of call as transferred. And here is a corrected script:
If not, how can I transfer ( or better say redirect )call from VoiceGateway to another external number.
proc init {} {
global param
set param(interruptPrompt) true
set param(terminationKey) #
}
proc act_setup {} {
leg proceeding leg_incoming
leg connect leg_incoming
set callInfo(mode) redirect_at_connect
set callInfo(notifyEvents) "ev_transfer_status ev_connected ev_progress"
set callInfo(newguid) true
leg setup 88888888 callInfo leg_incoming
}
proc act_SetupDone {} {
set status [infotag get evt_status]
if {$status == "ls_040"} {
puts "call transfer sucessful statusis $status"
} else {
puts "transfer status is %status"
}
}
proc act_Cleanup {} {
call close
}
init
#State Machine
set fsm(any_state,ev_disconnected) "act_Cleanup same_state"
set fsm(CALL_INIT,ev_setup_indication) "act_setup PLACECALL"
set fsm(PLACECALL,ev_setup_done) "act_SetupDone CALLACTIVE"
set fsm(PLACECALL,ev_transfer_status) "act_SetupDone CALLACTIVE"
set fsm(CALLACTIVE,ev_disconnected) "act_Cleanup CALLDISCONNECT"
set fsm(CALLDISCONNECT,ev_disconnected) "act_Cleanup same_state"
fsm define fsm CALL_INIT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
What is the status code you got is it ls_000, if so call is hair pinned. You Need to configure TBCT on IOS side and also make sure TBCT enabled from service provider side.
Thanks,
Raghavendra
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you Raghavendra ,
Yes, the status code I get is ls_000, and call is hair pinned. I have not configure TBCT yet, but I thought I should get ls_040 as call is being transferred although I do not have configure TBCT. That is because I thought TBCT just help to release the channel and I should see ls_040 as status code regardless.
So, you are saying the way I am transferring is correct, I just need to enable TBCT. Honestly I was thinking because I am redirecting call before It gets answer, I see ls_000.
It will be appreciated if you clarify, I want to make sure I understand this correctly. Thank you again.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
I think you are doing correct way, you can enable TBCT feature and test.
Thanks,
Raghavendra
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you again.
While I am waiting for my career to enable TBCT, I am trying to finalized my script as I want it to be at the end.
I put this together, I hear prompt asking to enter number then as soon as I put " 1 " call gets disconnected. Her is the script:
proc init {} {
global param
set param(interruptPrompt) true
set param(terminationKey) #
}
proc act_Setup {} {
leg proceeding leg_incoming
leg connect leg_incoming
media play leg_incoming tftp://10.172.28.134/en_enter_your_choice.au
}
proc act_MediaDone {} {
global param
global select
set pattern(select) .
set callinfo(alertTime) 30
leg collectdigits leg_incoming param pattern
}
proc act_GotPrompt {} {
global select
set status [infotag get evt_status]
if {$status == "cd_005"} {
set select [infotag get evt_dcdigits]
if {$select == "1"} {
set callInfo(mode) redirect_at_connect
set callInfo(notifyEvents) "ev_transfer_status ev_connected ev_progress"
set callInfo(newguid) true
leg setup 89990748 callInfo leg_incoming
}
elseif {$select == "2"} {
leg setup 4659 callInfo leg_incoming
}
else {
call close
}
else {
call close
}
}
}
proc act_CallSetupDone {} {
set status [infotag get evt_status]
if {$status == "ls_000"} {
puts "call has been hairpinned"
}elseif {$status == "ls_040"} {
puts "call transfer sucessful statusis $status"
act_Cleanup
}else {
puts "transfer status is %status"
}
}
proc act_Cleanup {} {
call close
}
init
#state Machine
set fsm(any_state,ev_disconnected) "act_Cleanup same_state"
set fsm(CALL_INIT,ev_setup_indication) "act_Setup MEDIAPLAY"
set fsm(MEDIAPLAY,ev_media_done) "act_MediaDone MEDIAPLAY"
set fsm(MEDIAPLAY,ev_collectdigits_done) "act_GotPrompt PLACECALL"
set fsm(PLACECALL,ev_setup_done) "act_CallSetupDone CALLACTIVE"
set fsm(PLACECALL,ev_transfer_status) "act_CallSetupDone same_state"
set fsm(CALLACTIVE,ev_disconnected) "act_Cleanup CALLDISCONNECT"
set fsm(CALLDISCONNECT,ev_disconnected) "act_Cleanup same_state"
fsm define fsm CALL_INIT
And here is a debug when I call the script:
1762685: Jul 27 13:06:36.814: //11221592//TCL :/tcl_LegObjCmd: leg proceeding leg_incoming
1762686: Jul 27 13:06:36.814: //11221592//TCL :/tcl_LegProceedObjCmd: proceeding leg_incoming
1762687: Jul 27 13:06:36.814: //11221592//AFW_:/vtd_lg_incoming: argc 2
1762688: Jul 27 13:06:36.814: //11221592//AFW_:/vtd_lg_incoming: Legs [11221592 ]
1762689: Jul 27 13:06:36.814: //11221592//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
1762690: Jul 27 13:06:36.814: //11221592//TCL :/tcl_LegObjCmd: leg connect leg_incoming
1762691: Jul 27 13:06:36.814: //11221592//TCL :/tcl_LegConnectObjCmd: connect leg_incoming
1762692: Jul 27 13:06:36.814: //11221592//AFW_:/vtd_lg_incoming: argc 2
1762693: Jul 27 13:06:36.814: //11221592//AFW_:/vtd_lg_incoming: Legs [11221592 ]
1762694: Jul 27 13:06:36.814: //11221592//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
1762695: Jul 27 13:06:36.814: //11221592//PACK:/tcl_MediaObjCmd: media play leg_incoming tftp://10.172.28.134/en_enter_dest.au
1762696: Jul 27 13:06:36.814: //11221592//PACK:/tcl_MediaPlayObjCmd: play leg_incoming tftp://10.172.28.134/en_enter_dest.au
1762697: Jul 27 13:06:36.814: //11221592//AFW_:/vtd_lg_incoming: argc 3
1762698: Jul 27 13:06:36.814: //11221592//AFW_:/vtd_lg_incoming: Legs [11221592 ]
1762699: Jul 27 13:06:36.814: //11221592//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
1762700: Jul 27 13:06:36.814: //11221592//PACK:/Media_Play_Start:
1762701: Jul 27 13:06:36: %ISDN-6-CONNECT: Interface Serial0/0/0:5 is now connected to 9419990748 N/A
1762702: Jul 27 13:06:39.258: //11221592//TCL :/tcl_LegObjCmd: leg collectdigits leg_incoming param pattern
1762703: Jul 27 13:06:39.258: //11221592//AFW_:/vtd_lg_incoming: argc 4
1762704: Jul 27 13:06:39.258: //11221592//AFW_:/vtd_lg_incoming: Legs [11221592 ]
1762705: Jul 27 13:06:39.258: //11221592//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
1762706: Jul 27 13:06:40.206: //11221592//TCL :/tcl_InfotagObjCmd: infotag get evt_status
1762707: Jul 27 13:06:40.210: //11221592//TCL :/tcl_InfotagGetObjCmd: infotag get evt_status
1762708: Jul 27 13:06:40.210: //11221592//AFW_:/vtr_ev_status: argc 2 argindex 2
1762709: Jul 27 13:06:40.210: //11221592//TCL :/tcl_InfotagObjCmd: infotag get evt_dcdigits
1762710: Jul 27 13:06:40.210: //11221592//TCL :/tcl_InfotagGetObjCmd: infotag get evt_dcdigits
1762711: Jul 27 13:06:40.210: //11221592//AFW_:/vtr_ev_dcdigits: argc 2
1762712: Jul 27 13:06:40.210: //11221592//AFW_:/vtr_ev_dcdigits: DCDIGITS [1]
1762713: Jul 27 13:06:40.210: //11221592//TCL :/tcl_LegObjCmd: leg setup 89990748 callInfo leg_incoming
1762714: Jul 27 13:06:40.210: //11221592//AFW_:/vtd_lg_incoming: argc 4
1762715: Jul 27 13:06:40.210: //11221592//AFW_:/vtd_lg_incoming: Legs [11221592 ]
1762716: Jul 27 13:06:40.210: //11221592//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
1762717: Jul 27 13:06:40.210: //-1//CSPK:/tclSetControlParams: mode(7) = redirect_at_connect
1762718: Jul 27 13:06:40.210: //-1//CSPK:/tclSetControlParams: set new guid
1762719: Jul 27 13:06:40.210: //-1//CSPK:/tclSetControlParams: Notify Signaling Mask=148
1762720: Jul 27 13:06:40.210: //11221592//TCL :/tcl_FSMObjCmd: fsm setstate PLACECALL
1762721: Jul 27 13:06:40.210: //11221592//TCL :/tcl_FSMSetStateObjCmd: setstate setstate PLACECALL
1762722: Jul 27 13:06:40.214: //11221592//AFW_:/AFW_FSM_Drive: Tcl_Eval to drive FSM inside Tcl modulespace. code=1 code=ERROR
1762723: Jul 27 13:06:40.214: TCL script failure
Result:
invalid command name "elseif"
1762724: Jul 27 13:06:40.214: TCL script failure errorInfo:
invalid command name "elseif"
while executing
"elseif {$select == "2"} {
leg proceeding leg_incoming
leg setup 4659 callInfo leg_incoming
" }
(procedure "act_GotPrompt" line 19)
invoked from within
"act_GotPrompt"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
From your debug you can see there is an error.
1762722: Jul 27 13:06:40.214: //11221592//AFW_:/AFW_FSM_Drive: Tcl_Eval to drive FSM inside Tcl modulespace. code=1 code=ERROR
1762723: Jul 27 13:06:40.214: TCL script failure
Result:
invalid command name "elseif"
1762724: Jul 27 13:06:40.214: TCL script failure errorInfo:
invalid command name "elseif"
while executing
"elseif {$select == "2"} {
leg proceeding leg_incoming
leg setup 4659 callInfo leg_incoming
" }
(procedure "act_GotPrompt" line 19)
invoked from within
"act_GotPrompt"
Check out your "if" "else" "elseif" pairing
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you for respond. But here is the thing, I do choose "1" after prompt plays, how even script gets to that part to errors out. Unless I am not understanding this corredctly.
elseif {$select == "2"} {
leg proceeding leg_incoming
leg setup 4659 callInfo leg_incoming
This part should be run if I choose "2" from prompt.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
I think it will go through script once to check the syntax when loading the script. Also check if there is any hidden character.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
I think you might have extra "}"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
I count them one more time they are even. But I am still wondering why when I put "1" as my choice to prompt, why it goes to elseif as if I chose "2".
Also, when I load the script I see it gets registered successfully.
Thank you,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Check for the control character call is disconnected because of that ERROR in debug.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
It did go to "1" selection
according to debug
1762713: Jul 27 13:06:40.210: //11221592//TCL :/tcl_LegObjCmd: leg setup 89990748 callInfo leg_incoming
Then somehow it doesn't recognize "elseif" and prompt the error
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
So, as you said it goes to "1" selection, then it should make a call to that external number, why even it goes to "elseif" when the first part of "if" matches. Unless this is the way TCL script works.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
No,
It doesn't recognize it as "elseif" and then think it is a command that's why you got
invalid command name "elseif"
why don't you remove the space or change "elseif" to "if" see if you can pass that error
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you,
It was my if/then issue with placing one of the "}" in a wrong spot.Now the script is working,but still waiting for my career to enable TBCT.
I have one more thing here.In the script, if caller do not enter any option like 1 to transfer or 2 to get to internal extension, at this point I am waiting for 10 seconds ( which is the default), then I close the call.
Is there a way to replay the prompt ( which I can do this part) and give caller second chance to enter any options.Basically in the script, I want say if caller did not enter any number, play the prompt again, which I do but then what, how should I send caller to the part of the script that gets number and the rest of actions.
Here is the completed script :
proc init {} {
global param
set param(interruptPrompt) true
set param(terminationKey) #
}
proc act_Setup {} {
leg proceeding leg_incoming
leg connect leg_incoming
media play leg_incoming en_enter_dest.au
}
proc act_MediaDone {} {
global param
global select
set pattern(select) .
set callinfo(alertTime) 30
leg collectdigits leg_incoming param pattern
}
proc act_GotPrompt {} {
global select
set status [infotag get evt_status]
if {$status == "cd_005"} {
set select [infotag get evt_dcdigits]
if {$select == "1"} {
set callInfo(mode) redirect_at_connect
set callInfo(notifyEvents) "ev_transfer_status ev_connected ev_progress"
set callInfo(newguid) true
leg setup 8444444444 callInfo leg_incoming
} elseif {$select == "2"} {
leg setup 4444 callInfo leg_incoming
} else {
puts "you enter wrong number"
}
} else {
puts "you did not enter any number"
# here is what I am pointing to, I want to replay the prompt, and caller have another chance to enter their option, instead of just closing call.
act_Cleanup
}
}
proc act_CallSetupDone {} {
set status [infotag get evt_status]
if {$status == "ls_000"} {
puts "call has been hairpinned"
} elseif {$status == "ls_040"} {
puts "call transfer sucessful statusis $status"
act_Cleanup
} else {
puts "transfer status is %status"
}
}
proc act_Cleanup {} {
call close
}
init
#state Machine
set fsm(any_state,ev_disconnected) "act_Cleanup same_state"
set fsm(CALL_INIT,ev_setup_indication) "act_Setup MEDIAPLAY"
set fsm(MEDIAPLAY,ev_media_done) "act_MediaDone MEDIAPLAY"
set fsm(MEDIAPLAY,ev_collectdigits_done) "act_GotPrompt PLACECALL"
set fsm(PLACECALL,ev_setup_done) "act_CallSetupDone CALLACTIVE"
set fsm(PLACECALL,ev_transfer_status) "act_CallSetupDone same_state"
set fsm(CALLACTIVE,ev_disconnected) "act_Cleanup CALLDISCONNECT"
set fsm(CALLDISCONNECT,ev_disconnected) "act_Cleanup same_state"
fsm define fsm CALL_INIT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You check if there is digit entered, if not you can repeat the same step -- play prompt and collect digit.
There is a sample
in https://developer.cisco.com/site/voice-gateway/documentation/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you, It worked.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TBCT is enabled, and am testing this but still call gets haippinned. One thing I saw in TBCT configuration for IOS was that the incoming call needs to be answered. What I do is:
I have dial-peer with this config:
incoming called-number 4659 (DID)
service app_sample
port 0/0/0:23
Then I call 941-***-4659, and script start, asking for order status press 1. When they press 1, It makes call to external number. So before they choose option 1. I do not see any call active when I do " show voice call status". Could this be a reason that call does not get transferred since the first incoming call does not get answered ( as I said before I am redirecting call before gets answred), and it just get connected to VG. Or something else causing call to get hairpinned.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Maybe you can open a DevNet support ticket. Cisco DevNet: Support
They can help you directly.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TBCT scritp is not much different from normal transfer script the only line need to add is set callinfo(mode) .....
People handles TBCT in different way that's why there is no standard script. If there is only one way to do TBCT I think Cisco will not ask user to use Tcl script.
If call is still hairpined I would also check with service provider. According to my experience chance is big that PSTN side TBCT feature is still not working right. Check from service provider side to see if transfer request is received and proper handled.
set callInfo(mode) REDIRECT_AT_ALERT | |
set callInfo(destinationNumTon) "ton_subscriber" | |
fsm setstate PLACECALL2 | |
leg setup $tbct_num callInfo leg_incoming | |
#TBCT transfer setup done
proc act_CallSetupDone2 { } {
set status [infotag get evt_status] |
puts "callsetupdone2 status is : $status" |
if { $status == "ls_000"} { | |
puts "call transfer sucessful status is $status, but hairpined" | |
handoff appl leg_all default | |
call close | |
} elseif {$status == "ls_040" || $status == "ls_041" || $status == "ls_026"} { | |
puts "TBCT transfer sucessful status is $status" | |
call close | |
} else { | |
puts "TBCT transfer unsucessful status is $status" | |
call close | |
} |
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
As you said everyone does this different. Honestly I want to make sure that the fact that I just get a call without answering it, and then redirect it to external number does not cause TBCT to not function properly.
I really appreciate your help.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Before :
calling A-------> PSTN------------------->TCL GW
|
Same PRI |
V
called B<------------------------------------------
(Same PSTN TBCT
enabled switch)
After :
calling A-------> PSTN------------------->TCL GW
|
|
V
called B<------------
(Same PSTN TBCT
enabled switch)
If a call coming from calling A to Tcl GW then you send the call to PSTN called B via the same PRI then it should work.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
T
Thank you,
In my case :
I call from my cell to 941-441-4659 on VG, call gets connected and then I send a call to another external 941-999-0748.
After call gets hairpinned, and I do " show voice call status" I see two call legs, both have called number are "941-999-0748", and I can see the ports for both incoming and outgoing calls are on the same PRI.
So, basically when both are showing up on the same PRI, they should terminate to " Same PSTN TBCT enabed switch" right?
Also could you please explain what are you referring in your last reply, by saying before and after? I am little confused?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
After TBCT, 2 B channels in Tcl GW are released and A and B are connected via TBCT enabled switch. (not necessary directly attached to that switch)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Although TBCT is related to call transfer but most importantly is regarding release two B channels.
I think definition of transfer here is very loose. I interpreted as -- when you "finally" deliver the call to the party on PSTN side via the same PRI please release two B channels".
How do you instruct the GW to deliver the call to destination really doesn't matter.
Tcl can take the transfer request event or listening in-band DTMF for a special pattern (like *123,#777...etc)
And theoretically it can be just a straight call A to B. Call is from A coming to Tcl GW and GW recognize it's external number and do the TBCT straight back to PSTN side.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you,
I was able to get with our carrier, and test this yesterday. They watched the incoming call, and outgoing call, and they confirmed they are both on the same PRI. I have " isdn supp-service tbct " under the serial interface for that PRI line.
But they told me that they do not receive any request for transfer or tbct at the time call is going back to them. They just see two separate calls, one incoming, and one outgoing.
Here is a final script and dial-peer, and interface configuration, and I do not know what I am missing:
(incoming ) dial-peer voice 9 pots
incoming called-number 4659
service app_sample
port 0/0/0:23
(outgoing) dial-peer voice 30 pots
destination-pattern 89419990748
forward-digit 10
port 0/0/0:23
interface serial 0/0/0:23
isdn supp-service tbct
proc init {} {
global param
set param(interruptPrompt) true
set param(terminationKey) #
infotag set evt_report ev_transfer_request
}
proc act_Setup {} {
leg proceeding leg_incoming
leg connect leg_incoming
media play leg_incoming tftp://10.172.28.134/en_enter_dest.au
}
proc act_MediaDone {} {
global param
global select
set pattern(select) .
set callinfo(alertTime) 30
leg collectdigits leg_incoming param pattern
}
proc act_GotPrompt {} {
global select
set status [infotag get evt_status]
if {$status == "cd_005"} {
set select [infotag get evt_dcdigits]
if {$select == "1"} {
set callInfo(mode) redirect_at_connect
set callInfo(notifyEvents) "ev_transfer_status ev_alert ev_progress"
set callInfo(newguid) true
leg setup 89419990748 callInfo leg_incoming
} elseif {$select == "2"} {
leg setup 4659 callInfo leg_incoming
} else {
puts "you enter wrong number"
act_Select
}
} else {
puts "you did not enter any number"
act_Cleanup
}
}
proc act_CallSetupDone {} {
set status [infotag get evt_status]
if {$status == "ls_000"} {
puts "call has been hairpinned"
} elseif {$status == "ls_040"} {
puts "call transfer sucessful statusis $status"
act_Cleanup
} else {
puts "transfer status is %status"
}
}
proc act_Select {} {
global param
global select
set pattern(select) .
set callinfo(alertTime) 30
leg collectdigits leg_incoming param pattern
media play leg_incoming tftp://10.172.28.134/en_enter_dest.au
fsm setstate MEDIAPLAY
}
proc act_Cleanup {} {
call close
puts "call was disconnected"
}
init
#state Machine
set fsm(any_state,ev_disconnected) "act_Cleanup same_state"
set fsm(CALL_INIT,ev_setup_indication) "act_Setup MEDIAPLAY1"
set fsm(MEDIAPLAY1,ev_media_done) "act_MediaDone MEDIAPLAY"
set fsm(MEDIAPLAY,ev_collectdigits_done) "act_GotPrompt PLACECALL"
set fsm(PLACECALL,ev_setup_done) "act_CallSetupDone CALLACTIVE"
set fsm(PLACECALL,ev_transfer_status) "act_CallSetupDone same_state"
set fsm(CALLACTIVE,ev_disconnected) "act_Cleanup CALLDISCONNECT"
set fsm(CALLDISCONNECT,ev_disconnected) "act_Cleanup same_state"
fsm define fsm CALL_INIT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Check your IOS config
http://www.cisco.com/c/en/us/td/docs/ios/voice/ivr/configuration/guide/tcl_c.pdf#G11.1012004
You can remove the following unless you have your reason to have it
set callInfo(newguid) true |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you,
I checked config. All I am doing different is to not setup " Trunk Group", and that is because I am using one PRI on my voice gateway, therefore I just enabled the "tbct" under that specific serial interface. I have two PRIs on my VG, but have dial-peer setup to get and send the call from same interface.
But if you think that would make difference, I will go ahead and add trunk group, and setup everything as it is on IOS configuration guide.
I also removed that command.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
I would also try release at alert state:
set callInfo(mode) REDIRECT_AT_ALERT
and
turn on Tcl, ccapi as well as isdn debug
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You may need to config switch type and also check if you need to specify carrier id.
interface serial 0/0/0:23
isdn switch-type primary-ni
Thanks,
Raghavendra
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you,
OK, It worked finally.I removed the TBCT under serial interface, and re-enabled it, also removed "set callInfo(newguid) true" . Call comes to VG then get redirected to external number and when I do " show voice call status", I do not see any call legs for incoming or outgoing call.
But, here is the question, if customer choose option 2, call goes to 4659 ( and gets hairpinned), and customer and 4659 ( DN for phone that is registered on CUCM) are talking, now 4659 realized that she needs to transfer call to external number.
I added " set fsm (CALLACTIVE,ev_transfer_request) "act_Cleanup CALLDISCONNECT"
I am doing this as start point just to see if script gets transfer request at all, but nothing happens.
Do i need to add anything else to just get transfer request.
Could you please advise.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Glad to hear that.
4659 needs to make a transfer. There are a few ways to make the transfer as mentioned before depends what protocol is used.
How 4659 makes the transfer ? What protocol is used ?
You need to add codes to handle transfer:
detect transfer event (event or DTMF digits)
destroy connection
setup new call (customer and transfer to party) -- reused the code is working now
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you,
4659 press the transfer button on the IP phone ( which is Cisco IP Communicator) , and enter the destination.
And, the CUCM is connected to VG with H.323 . If this is what you mean, unless I am not understanding your question.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In this case we need to make sure transfer request is received on VG.
Looks at CCAPI debug see if transfer request is received.
Also add in "ev_transfer_request" in
set callInfo(notifyEvents) "ev_transfer_status ev_alert ev_progress"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you,
You said that I need to add to code to handle transfer. Should I add the code to my current script, or transfer call needs another script?
I did " debug voice ccapi all" but I do not see transfer request.
If I should use the same script, could you please tell me what I need to add to see transfer request.
I have "infotag set evt_report ev_transfer_request", in the script, but do not get transfer request, and call just bypass the script and get connect to destination.
But I got to say that I still do not have a code you mentioned.
I am kind of lost here, would you please advise.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
One more think to add. We are on CUCM version 9, and transfer is consult transfer by default, and not blind.
Does this affect the way script receives the transfer request or not?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
All codes should be in the same script. I am not that familiar with CUCM but I think it may related to how CUCM transfers the call.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you,
When you say the way CUCM transfer call, you mean blind or consult?
This was my question, does this matter?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
I know the blind transfer should work don't know the consult. But doesn't matter what kind of transfer you need to let script knows there is a transfer request.
If you cannot get the transfer event you may need to use in-band DTMF.
For example, you call me via Tcl script now I like to transfer you to C (=7654321). I can do *887654321,#997654321..or any unique prefix.
You need to program script to listen the DTMF, when it detect the unique prefix it will parse the rest of digits and analyze if it is for TBCT transfer.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you,
We are looking to open a case for this to get it done. I see that there is a 250$ charge for one case.
Question:
Is there a way to discuss our ultimate need before opening a case, because we want to make sure that what we want to do is doable or not?
Should we post our needs here?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If the CUCM side cannot send transfer request (or TCL GW side cannot receive transfer request) there is not too much we can do in Tcl script. In this case sending DTMF is the only solution I can think of.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you,
I just added the bold part to my script, just to see if I receive any transfer request. Just tell me if this is enough and I should seeiit if CUCM send it.
proc init {} {
global param
set param(interruptPrompt) true
set param(terminationKey) #
}
proc act_Setup {} {
infotag set evt_report ev_transfer_request
leg proceeding leg_incoming
leg connect leg_incoming
media play leg_incoming tftp://10.172.28.134/en_enter_dest.au
}
proc act_MediaDone {} {
global param
global select
set pattern(select) .
set callinfo(alertTime) 30
leg collectdigits leg_incoming param pattern
}
proc act_GotPrompt {} {
global select
set status [infotag get evt_status]
if {$status == "cd_005"} {
set select [infotag get evt_dcdigits]
if {$select == "1"} {
set callInfo(mode) REDIRECT_AT_CONNECT
set callInfo(notifyEvents) "ev_transfer_status ev_alert ev_progress ev_transfer_request"
leg setup 89419990748 callInfo leg_incoming
} elseif {$select == "2"} {
infotag set evt_report ev_transfer_request
set callInfo(notifyEvents) "ev_transfer_status ev_alert ev_progress ev_transfer_request"
leg setup 4659 callInfo leg_incoming
} else {
puts "you enter wrong number"
act_Select
}
} else {
puts "you did not enter any number"
act_Cleanup
}
}
proc act_CallSetupDone {} {
set status [infotag get evt_status]
if {$status == "ls_000"} {
puts "call has been hairpinned"
fsm setstate CALLACTIVE
} elseif {$status == "ls_040" || $status == "ls_041" || $status == "ls_026"} {
puts "call transfer sucessful statusis $status"
act_Cleanup
} else {
puts "transfer status is %status"
}
}
proc act_Select {} {
global param
global select
set pattern(select) .
set callinfo(alertTime) 30
leg collectdigits leg_incoming param pattern
media play leg_incoming tftp://10.172.28.134/en_enter_dest.au
fsm setstate MEDIAPLAY
}
proc act_Cleanup {} {
call close
puts "call was disconnected"
}
init
#state Machine
set fsm(any_state,ev_disconnected) "act_Cleanup same_state"
set fsm(CALL_INIT,ev_setup_indication) "act_Setup MEDIAPLAY1"
set fsm(MEDIAPLAY1,ev_media_done) "act_MediaDone MEDIAPLAY"
set fsm(MEDIAPLAY,ev_collectdigits_done) "act_GotPrompt PLACECALL"
set fsm(PLACECALL,ev_setup_done) "act_CallSetupDone CALLACTIVE"
set fsm(PLACECALL,ev_transfer_status) "act_CallSetupDone same_state"
set fsm(CALLACTIVE,ev_transfer_request)"act_Cleanup CALLDISCONNECT"
set fsm(CALLACTIVE,ev_disconnected) "act_Cleanup CALLDISCONNECT"
set fsm(CALLDISCONNECT,ev_disconnected) "act_Cleanup same_state"
fsm define fsm CALL_INIT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You have many triggers lead to act_cleanup procedure so it cannot really tell it's a transfer trigger
You can do something like
proc act_tfxr_request {} {
puts "Got transfer request call was disconnected"
call close
}
But again Tcl script is on application layer, it works on top of IOS.
The first step should verify the transfer request in IOS first. There is a chance the IOS got the transfer request but didn't pass ti Tcl application for whatever reason.
set fsm(CALLACTIVE,ev_transfer_request)"act_tfxr_request CALLDISCONNECT"
set fsm(any_state,ev_disconnected) "act_Cleanup same_state"
set fsm(CALL_INIT,ev_setup_indication) "act_Setup MEDIAPLAY1"
set fsm(MEDIAPLAY1,ev_media_done) "act_MediaDone MEDIAPLAY"
set fsm(MEDIAPLAY,ev_collectdigits_done) "act_GotPrompt PLACECALL"
set fsm(PLACECALL,ev_setup_done) "act_CallSetupDone CALLACTIVE"
set fsm(PLACECALL,ev_transfer_status) "act_CallSetupDone same_state"
set fsm(CALLACTIVE,ev_transfer_request)"act_Cleanup CALLDISCONNECT"
set fsm(CALLACTIVE,ev_disconnected) "act_Cleanup CALLDISCONNECT"
set fsm(CALLDISCONNECT,ev_disconnected) "act_Cleanup same_state"
fsm define fsm CALL_INIT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you,
I received below email from Cisco :
"I just spoke with my escalation engineer
Call manager doesn’t support any type of h323 or sip transfer for example sip refer or h450.
Call manager will simply sends another call outbound and bridges the media paths of the 2 calls. "
Saying that it seems we won't be able to get transfer request from CUCM.
I was thinking about this, and I wanted to ask you if this is a solution or not.
After call hits TCL and hot to phone on CUCM, according to Cisco transfer is as outbound call. Can we have another script that gets hit with that outgoing call, then handoff the call and any other variable to the first script and go from there.
here is flow:
PSTN ...........TCL script 1.........................Phone
The phone transfer call :
Outbound call from phone (in order to transfer) ............................. TCL script2 then here this script handoff the call to the first script and the rest fot TBCT.
Is this possible solution?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
I cannot think of how to implement in this way
"Call manager will simply sends another call outbound and bridges the media paths of the 2 calls. "
CUCM is bridging the call, isn't it ?
You can have second script to do the handoff, in this way you maybe able to tell 1st script something happening but to do TBCT maybe hard, because outbound call already been made. In band DTMF is not the option ? This is most people do if transfer request event can not be received.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you,
Here is the problem, If I understand DTMF correctly, the called person needs to enter those digit right?
In our case, that 4659 is a CTI routpoint that triggers the UCCX script, then in that script we will ask the customer (calling person) to press 1, then call gets transferred back to PSTN .
There is no one involved to enter the digit for DTMF, unless UCCX script can send DTMF digit back to TCL script, which I am not aware of it.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You need to detail your call scenario from end to end . Who/What is making decision of transfer?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you,
Here is detailed call flow:
Customer calls , call hits the TCL script,then script send a call to CTI Routepoint which triggers UCCX script.
Inside UCCX script, there is a menu for customer saying " For order status press 1", when customer press 1, call gets transferred back to external number on PSTN.
Please let me know if that explains call detail,or I need to clarify this more.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
I see a few ways
1. Two levels menus In GW press 1 for "order status" otherwise press 2 or nothing (timeout in x second) to proceed to UCCX. (easy way) Assuming we know the PSTN number for pressing one, can be configurable as param in Tcl
2. When UCCX send call back(press 1) to GW with a special number to trigger second script, 2nd script handoff or sendmsg to 1st script with special message like "TBCT" to instruct 1st to do the TBCT. How to pass the TBCT number ? Couple of ways two, can pass from 2nd to first, can pre-config on 1st.
No pretty but maybe can do the job.
I am not familiar on CUCM side, is there a ICM script, if so can it send digit ?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thank you,
I am looking at the second way you offered. First, I am using UCCX script, and it is capable of sending digit. And, I think if we can receive these digits, according to what you said before, we should be able to work with our original script, and not having to add second script. Is this correct?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If UCCX can send DTMF then only one script is needed. You can try sending digit then use IOS debug to see if digit is coming to GW first.
You can take a look the following script to see how can you collect digits. It's the very similar to what you need. (collecting DTMF part)
https://developer.cisco.com/fileMedia/download/e0af9485-04aa-4a86-a42e-9237eedb8fbf
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Hi Tervis,
Would you happen to have the working config for the TBCT and TCL script to share with me. I am having the same issue and don't seem to be able to get it right. Your help is very much appreciated.
Thanks,
MK
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Please refer below link for TBCT config
http://www.cisco.com/c/en/us/td/docs/ios/voice/ivr/configuration/guide/tcl_c/ivr_tbct.html#wp1011922
Thanks,
Raghavendra
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Comments
0 comments
Please sign in to leave a comment.