Blogs

If you just need a simple password control for long distance or international call and don't want to use RADIUS, you can set a parameter in service then in script ask caller to enter password if it matched the one set in IOS configuration then make the call out otherwise disconnect call. A sample script is posted in Documentation section. ...Read More

 

Hi Cisco Developers,

MSE VOIP Sample Application along with User Guide can be found under the below location.
http://developer.cisco.com/web/vgapi/docs

The goal of this sample application is to demonstrate the Integration of IVR(Interactive Voice response) and MSE(Mobility service Engine).
...Read More

 

In IOS 15.2(2)T a new option is introduced for infotag get leg_dnis and infotag get leg_ani

"callnumber" is keyword

infotag get leg_dnis
infotag get leg_ani

example:

infotag get leg_dnis callnumber leg_incoming


This option services the following purposes:

1. Return number portion only for DNIS or ANI in SIP trunk ...Read More

 

The fetchaudio attribute specifies the URI of the audio to be played while the document is being fetched. It can be used with any one of the following VXML Elements <data>; <goto>; <link>; <subdialog>; <submit>

Example: ...Read More

 

Cisco Technology Developer Partners,

Cisco is proud to announce the availability of our Cisco Unified Communications System Release 8.6 Not-For-Resale software bundle on Cisco Marketplace (Partner Login Required).

To purchase the latest Unified Communications NFR Software bundle
- Navigate to Cisco Marketplace
- Login using your Cisco.com UserID ...Read More

 

New Video Tutorial section is added for this Tcl IVR API
Video Tutorial ...Read More

 

param CLI can be mapped to IVR either in the global application mode, or as group params or under the specific dial-peer.

config t
application
service aa flash: app-b-acd-aa.tcl
param aa-pilot 7001

Having the param under the specific dial-peer provides the flexibility by having same application to work with various dial-peers in various ways. ...Read More

 



Cisco Developer Network will be presenting a CDN Developer Track at Cisco Live! London the week of January 31, 2011.

We are presenting technical sessions which highlight Application Programming interfaces (APIs) and Software Developer Kits (SDKs) for Cisco technologies such as Unified Communications, IOS, and Access Routing Technologies ¿ including the new Cisco Cius ...Read More

 

There are a few more tones can be played but are not listed in the programming guide

tn_ringback -- Plays a ring back tone
tn_congestion -- Play a congestion tone
tn_stuttdial -- plays a stutter dial tone
tn_intercept --plays a intercept tone, like busy tone

For example I have to use "leg setup $dest callinfo" for a reason ...Read More

 

Ultimate AA script


Suffering the AA menu prompt tree changing that you need to modify the script frequently? Or trying to find an AA script can fit all menu prompt tree?
You really can create an ultimate script that can fit all prompt structure
Here is the solution: ...Read More

 

I would like to shed some light on IPIPGW concept and its features.
IPIPGW Over TCL-VXML scripts:
We can deploy TCL and VXML scripts on IPIPGW,where DSP¿s are not requried to use this feature.You have to record prompt in the same codec type as you use for a call.This feature will be useful when we deploy prepaid calling cards.
IPIPGW : ...Read More

 

If we download the complete book length programming guide, the information tag leg_state and the status for that lg_xxx are missed.
But if we download chapter by chapter we can get those information.

Here is the link:

http://www.cisco.com/en/US/docs/ios/voice/tcl/developer/guide/tclivrv2_ch5.html


Leg State
The state of the call leg and the corresponding status code is reported in lg_xxx format:
Value for xxx Call Leg
000 LEG_INIT ...Read More

 



There is a perspective that TCL-IVR applications are not flexible enough for a newbie to play around. But in fact, there are lots of IVR applications that are coming inbuilt with Voice GW. You just need to copy/paste in a file editor and tweak it.
...Read More

 

Showing 13 results.
Items per Page 20
of 1

Forums

« Back to TCL-API

Forwarding the call via R2/ISDN channel

Combination View Flat View Tree View
Threads [ Previous | Next ]
Hi team!!!
 
I have a solution working properly. But I have a problem of the sizing.
The script has the flow:
Incoming call > third part PBX >> ISDN/R2 integration >> Router with TCL script.
The user can to hear the welcome prompt, but when the user choose the option to forward the call for HelpDesk the integration will busy 2 channels.
It can be a problem for me, because the environemnt has in around 1500 people.
Is there any feature for the router leave the call after a transfer?
thanks.
 
 
 
proc CallHelpDesk { } {
global CallerID
puts "Fowarding to Help Desk"
set callinfo(originationNum) $CallerID
set callinfo(alertTime) 10
set destination 79889

puts "FAZENDO CHAMADA"
leg setup $destination callinfo leg_outgoing
#fsm setstate CALLEDHELPDESK
}
 
proc CheckCallSetup { } {
puts "IT7 ------------ chamada realizada"
set statuscall [infotag get evt_status]
switch $statuscall {
"ls_000" {
puts "CHAMADA ATIVA"
set incoming [infotag get leg_incoming]
puts "Parte 2"
set outgoing [infotag get leg_outgoing]
connection create $incoming $outgoing
}
defaul {
puts "CHAMADA FALHOU"
}
}
puts "CHECK CALL SETUP ACABOU"
}

Hi Jean,

could you please share your complete script so that it will be easy for us to analayse the issue.

Thanks,
Raghavendra

#Params
#
# web-server
# IP Address or DNS Name of webserver
# welcome-prompt
# path+filename of welcome message
# attemps
# number of times to repeat the imput

# web returns
# return: 1 = valid
# 0 = invalid/wrong
# CALL_CENTER = Special account
# x >=2



# initialize the parameters that configured from IOS CLI
proc InitializeConfiguration { } {
puts "IT7: initializing Homologação"
global WebServer
global WelcomePrompt
global Attemps
global CallerID
global NovaSenha
global WebReturn1
global count
global count1
global counter

#other variables
global Response1
global Response2
global Response3

#webserver
if [infotag get cfg_avpair_exists web-server] {
set WebServer [string trim [infotag get cfg_avpair web-server]]
} else {
set WebServer "10.80.3.91:7778"
}



#welcome message
if [infotag get cfg_avpair_exists welcome-prompt] {
set WelcomePrompt [string trim [infotag get cfg_avpair welwome-prompt]]
} else {

set WelcomePrompt "flash:/Fem/ola2.wav"


}

#attemps
if [infotag get cfg_avpair_exists attemps] {
set Attemps [string trim [infotag get cfg_avpair attemps]]
} else {
set Attemps 3
}


puts "IT7: initialized"
}


proc ActionCallPrepare { } {

puts "AGUARDANDO INICIO"
timer start call_timer0 2
}

#--------------------------------------------------------------------------------
#--------------------------------------------------------------------------------
#--------------------------------------------------------------------------------

proc CallHelpDesk { } {
global CallerID

puts "Fowarding to Help Desk"

set callinfo(originationNum) $CallerID
set callinfo(alertTime) 10
set destination 79889


puts "FAZENDO CHAMADA"
leg setup $destination callinfo leg_outgoing

#fsm setstate CALLEDHELPDESK
}


proc CheckCallSetup { } {

puts "IT7 ------------ chamada realizada"

set statuscall [infotag get evt_status]
switch $statuscall {

"ls_000" {

puts "CHAMADA ATIVA"

set incoming [infotag get leg_incoming]
puts "Parte 2"
set outgoing [infotag get leg_outgoing]

connection create $incoming $outgoing

}

defaul {
puts "CHAMADA FALHOU"
}
}

puts "CHECK CALL SETUP ACABOU"

}


#--------------------------------------------------------------------------------
#--------------------------------------------------------------------------------
#--------------------------------------------------------------------------------



#procedure to play audio file on incoming dial peer
proc ActionPlayWelcome { } {
puts "IT7: playing audio Welcome"

global WelcomePrompt
global CallerID

leg setupack leg_incoming
leg proceeding leg_incoming
leg connect leg_incoming

set CallerID [infotag get leg_ani]

puts "IT7: Caller ID $CallerID"

media play leg_incoming $WelcomePrompt

puts "IT7: Audio played Welcome"
}

#--------------------------------------------------------------------------------
#--------------------------------------------------------------------------------
#--------------------------------------------------------------------------------

#procedure to play Question 1
proc ActionPlayQuestion1 { } {

global counter

set counter 0

set Question1Param(interruptPrompt) true
set Question1Param(terminationKey) #
set Question1Param(enableReporting) true
set Question1Param(maxDigits) 1
set Question1Param(dialPlan) true
set Question1Pattern(1) "1"
set Question1Pattern(2) "2"
set Question1Pattern(3) "3"

puts "IT7: playing question 1"

media play leg_incoming "flash:/Fem/opcoes.wav"

puts "IT7: played question 1"

leg collectdigits leg_incoming Question1Param Question1Pattern

fsm setstate COLLECTEDQUESTION1

}

proc ActionPlayQuestion1Again { } {

global counter

if { $counter < "2"} {

incr counter

puts "$counter"

puts "IT7: playing question 1 again"

media play leg_incoming "flash:/Fem/opcoes.wav"

puts "IT7: played question 1 again"
} else {



puts "IT7 --------------------------> ERRO"

media play leg_incoming "flash:/Fem/aguarde.wav"

puts "Por favor aguarde enqto sua ligacao e transf para help"

fsm setstate HELPDESK

}


}


#coleta os digitos da questao 01
proc ActionCollectQuestion1 { } {
puts "IT7: collecting question 1"

set Question1Param(interruptPrompt) true
set Question1Param(terminationKey) #
set Question1Param(enableReporting) true
set Question1Param(maxDigits) 1
set Question1Param(dialPlan) true
set Question1Pattern(1) "1"
set Question1Pattern(2) "2"
set Question1Pattern(3) "3"

leg collectdigits leg_incoming Question1Param

puts "IT7: collected question 1"
}

#send collected digits through web
proc Action1 { } {
puts "IT7: try to send web"
global WebServer
global Response1
global CallerID
global count
global count1

set StatusCollectDigits [infotag get evt_status]

puts "IT7: cpf $StatusCollectDigits"

#matched pattern
if {$StatusCollectDigits == "cd_005"} {

puts "IT7: starting web"

set Response1 [infotag get evt_dcdigits]


puts "Choose: $Response1"

if { $Response1 == "3"} {

puts "aguarde, transferindo para o help-desk"

media play leg_incoming "flash:/Fem/aguarde.wav"

fsm setstate HELPDESK

}

if { $Response1 == "2"} {

puts "password change"

set count 0

set count1 0

media play leg_incoming "flash:/Fem/alteracao-cpf.wav"

fsm setstate PLAYEDQUESTION2

}


if { $Response1 == "1"} {

puts "user unlock"

set count 0

set count1 0

media play leg_incoming "flash:/Fem/desbloqueio-cpf.wav"

fsm setstate PLAYEDQUESTION2

}


if { $Response1 > "3"} {



puts "Invalid option"

media play leg_incoming "flash:/Fem/opcao-invalida.wav"
fsm setstate PLAYEDWRONG1


}




} else {

puts "IT7: error - playing error audio"

media play leg_incoming "flash:/Fem/opcao-invalida.wav"
fsm setstate PLAYEDWRONG1

puts "IT7: error - played error audio"

}
puts "IT7: end try to send web"
}

#--------------------------------------------------------------------------------
#--------------------------------------------------------------------------------
#--------------------------------------------------------------------------------


#play question 2, second time
proc ActionPlayQuestion2Again { } {

global count
global Response1

if { $count < "2"} {

incr count

puts "$count"


puts "IT7: playing question 2 again"

media play leg_incoming "flash:/Fem/solicita-cpf.wav"

puts "IT7: played question 2 again"

} else {

puts "IT7 --------------------------> ERRO"

if { $Response1 == "1"} {

puts "IT7 --------------------------> ERRO 1"

media play leg_incoming "flash:/Fem/desbloqueio-erro.wav"

fsm setstate HELPDESK

puts "Por favor aguarde enqto sua ligacao e transf para help"

}


if { $Response1 == "2"} {

puts "IT7 --------------------------> ERRO 2"

media play leg_incoming "flash:/Fem/alteracao-erro.wav"

fsm setstat HELPDESK

puts "Por favor aguarde enqto sua ligacao e transf para help"

}



}


}


#coleta os digitos da questao 02
proc ActionCollectQuestion2 { } {
puts "IT7: collect question 2"

set Question2Param(interruptPrompt) true
set Question2Param(terminationKey) #
set Question2Param(maxDigits) 11
set Question2Param(dialPlan) true
set Question2Pattern(1) "..........."


leg collectdigits leg_incoming Question2Param

puts "IT7: collected question 2"
}


proc Action2 { } {
global WebServer
global Response2
global CallerID
global count



set StatusCollectDigits [infotag get evt_status]

#matched pattern
if {$StatusCollectDigits == "cd_005"} {

set Response2 [infotag get evt_dcdigits]

set URL http://$WebServer/URA/ValidarCPF?telefoneorigem=$CallerID&cpf=$Response2



puts "IT7: URL Validacao #2 $URL"

::httpios::geturl $URL -command httpCallback2

} else {

media play leg_incoming "flash:/Fem/cpf-invalido.wav"
fsm setstate PLAYEDWRONG2
}
}


proc httpCallback2 { token } {

global WebServer
global Response1
global WebReturn1
global CallerID


if {[::httpios::status $token] == "ok"} {
set WebReturn1 [string trim [::httpios::data $token]]
}

if { $WebReturn1 >= "2" } {

puts "Abril validating the UserKey $WebReturn1"

if { $Response1 == "1"} {

set URL http://$WebServer/URA/DesbloquearConta?telefoneorigem=$CallerID&user_key=$WebReturn1

::httpios::geturl $URL -command httpCallbackSMS




}



if { $Response1 == "2"} {

media play leg_incoming "flash:/Fem/solicita-telefone.wav"

fsm setstate PLAYEDQUESTION3

}




}


if { $WebReturn1 == "CALL_CENTER" } {

puts "aguarde, transferindo para o help-desk"

media play leg_incoming "flash:/Fem/aguarde.wav"

fsm setstate HELPDESK

}

if { $WebReturn1 == "0" } {

media play leg_incoming "flash:/Fem/cpf-invalido.wav"
fsm setstate PLAYEDWRONG2


}
}




#--------------------------------------------------------------------------------
#--------------------------------------------------------------------------------
#--------------------------------------------------------------------------------

#diz a questao 3 denovo
proc ActionPlayQuestion3Again { } {

global count1
global Response1

if { $count1 < "2"} {

incr count1

puts "$count1"

puts "IT7: playing question 3 again"

media play leg_incoming "flash:/Fem/solicita-telefone.wav"

puts "IT7: played question 3 again"
} else {

puts "IT7 --------------------------> ERRO"

if { $Response1 == "1"} {

puts "IT7 --------------------------> ERRO 1"

media play leg_incoming "flash:/Fem/desbloqueio-erro.wav"

puts "Por favor aguarde enqto sua ligacao e transf para help"

fsm setstate HELPDESK

}


if { $Response1 == "2"} {

puts "IT7 --------------------------> ERRO 2"

media play leg_incoming "flash:/Fem/alteracao-erro.wav"

puts "Por favor aguarde enqto sua ligacao e transf para help"

fsm setstate HELPDESK

}


}

}


#coleta os digitos da questao 03
proc ActionCollectQuestion3 { } {

set Question2Param(interruptPrompt) true
set Question2Param(terminationKey) #
set Question2Param(maxDigits) 10
set Question2Param(dialPlan) true
set Question2Pattern(1) ".........."

leg collectdigits leg_incoming Question2Param
}


#Action 03 of second Question
proc Action3 { } {
global WebServer
global Response1
global Response2
global Response3
global WebReturn1
global CallerID

set StatusCollectDigits [infotag get evt_status]

#matched pattern
if {$StatusCollectDigits == "cd_005"} {

set Response3 [infotag get evt_dcdigits]

set URL http://$WebServer/URA/ValidarTelefone?telefoneorigem=$CallerID&user_key=$WebReturn1&telefone=$Response3



puts "IT7: URL Validacao #3 $URL"

::httpios::geturl $URL -command httpCallback3

} else {

media play leg_incoming "flash:/Fem/telefone-invalido.wav"
fsm setstate PLAYEDWRONG3


}

}

proc httpCallback3 { token } {
global WebServer
global Response1
global Response2
global Response3
global WebReturn1
global CallerID
global Choose


if {[::httpios::status $token] == "ok"} {
set WebReturn [string trim [::httpios::data $token]]
} else {
set WebReturn 0
}

if { $WebReturn != "0" } {

puts "IT7--------------------------------> OK FINAL !"



if { $Response1 == "1"} {

puts "password unlocking"

set URL http://$WebServer/URA/DesbloquearConta?telefoneorigem=$CallerID&user_key=$WebReturn1

puts "IT7: URL Unlock $URL"

::httpios::geturl $URL -command httpCallbackSMS
}



if { $Response1 == "2"} {

puts "password changing"

set URL http://$WebServer/URA/AlterarSenha?telefoneorigem=$CallerID&user_key=$WebReturn1

puts "IT7: URL Reset $URL"

::httpios::geturl $URL -command httpCallbackSMS

}


} else {

if { $Response1 == "1"} {

media play leg_incoming "flash:/Fem/telefone-invalido.wav"
fsm setstate PLAYEDWRONG3

} else {

media play leg_incoming "flash:/Fem/telefone-invalido.wav"
fsm setstate PLAYEDWRONG3

}

}
}



#------------------------------------------------------------------------------
#proc httpCallbackReset { token } {
# global WebServer
# global CallerID
# global Response1

# if {[::httpios::status $token] == "ok"} {
# set Password [string trim [::httpios::data $token]]
# } else {
# set Password 0
# }

# if { $Password == "1" } {
# puts "IT7 ---> SENHA GERADA: $Password"

# set URL http://$WebServer/URA/MandarSMS?telefoneorigem=$CallerID&cpf=$Response1&password=$WebReturn

# puts "IT7: URL Enviar SMS $URL"

# ::httpios::geturl $URL -command httpCallbackSMS


# } else {

# puts "IT7 -------------------------> SENHA NAO FOI GERADA !"

# media play leg_incoming "flash:/informacaoincorreta.wav"
# fsm setstat CALLDISCONNECT
# }
#}


proc httpCallbackSMS { token } {

global Response1



if {[::httpios::status $token] == "ok"} {
set feedback [string trim [::httpios::data $token]]
} else {
set feedback 0
}

puts "IT7 ---> Retorno final: $feedback"

if { $feedback == "1"} {
puts "THE END"


if { $Response1 == "1"} {

media play leg_incoming "flash:/Fem/desbloqueio-ok.wav"
fsm setstate CALLDISCONNECT

} else {

media play leg_incoming "flash:/Fem/alteracao-ok-2.wav"
fsm setstate CALLDISCONNECT

}


} else {

if { $Response1 == "1"} {

puts "IT7 --------------------------> ERRO ENVIANDO MENSAGEM"
media play leg_incoming "flash:/Fem/desbloqueio-erro.wav"

} else {

puts "IT7 --------------------------> ERRO ENVIANDO MENSAGEM"
media play leg_incoming "flash:/Fem/alteracao-erro.wav"
}



}

}

#------------------------------------------------------------------------------






# disconnect the call
proc ActionDisconnect { } {
puts "IT7: Call Disconnected"
call close
}



#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------



InitializeConfiguration

set ScriptFSM(any_state,ev_disconnected) "ActionDisconnect same_state"

set ScriptFSM(CALL_INIT,ev_setup_indication) "ActionCallPrepare PREPARED"
set ScriptFSM(PREPARED,ev_call_timer0) "ActionPlayWelcome PLAYEDWELCOME"

set ScriptFSM(PLAYEDWELCOME,ev_media_done) "ActionPlayQuestion1 PLAYEDQUESTION1"
set ScriptFSM(PLAYEDWRONG1,ev_media_done) "ActionPlayQuestion1Again PLAYEDQUESTION1"

set ScriptFSM(COLLECTEDQUESTION1,ev_collectdigits_done) "Action1 CALLDISCONNECT"

set ScriptFSM(HELPDESK,ev_media_done) "CallHelpDesk CALLEDHELPDESK"
set ScriptFSM(CALLEDHELPDESK,ev_setup_done) "CheckCallSetup ESTABLISHEDCALL"

set ScriptFSM(PLAYEDWRONG2,ev_media_done) "ActionPlayQuestion2Again PLAYEDQUESTION2"
set ScriptFSM(PLAYEDQUESTION2,ev_media_done) "ActionCollectQuestion2 COLLECTEDQUESTION2"
set ScriptFSM(COLLECTEDQUESTION2,ev_collectdigits_done) "Action2 CALLDISCONNECT"

set ScriptFSM(PLAYEDWRONG3,ev_media_done) "ActionPlayQuestion3Again PLAYEDQUESTION3"
set ScriptFSM(PLAYEDQUESTION3,ev_media_done) "ActionCollectQuestion3 COLLECTEDQUESTION3"
set ScriptFSM(COLLECTEDQUESTION3,ev_collectdigits_done) "Action3 CALLDISCONNECT"


set ScriptFSM(CALLDISCONNECT,ev_disconnected) "ActionDisconnect same_state"
set ScriptFSM(CALLDISCONNECT,ev_media_done) "ActionDisconnect same_state"
set ScriptFSM(CALLDISCONNECT,ev_disconnect_done) "ActionDisconnect same_state"

fsm define ScriptFSM CALL_INIT

Hi Raghavendra,

I posted the full script bellow.

Can you give me a idea?

Thanks.

Hi Jean,

Thanks for sharing the script, there is a feature called TBCT, Two B-Channel Transfer (TBCT) is a call-transfer standard for ISDN interfaces. This feature enables a Cisco voice gateway to request an NI-2 switch to directly connect two independent calls. The two calls can be served by the same PRI or by two different PRIs on the gateway. This feature is based on Telcordia GR-2865-CORE

For more information you can refer below link.
http://www.cisco.com/en/US/docs/ios/voice/ivr/configuration/guide/ivr_tbct.html

Thanks,
Raghavendra

Hi,

I saw the document today and I have met the follow:

Restrictions

•TBCT supports the National ISDN-2 (NI-2) standard for T1 only. E1 interfaces are not supported.


And unfortunately, I ´m working with E1 interface.

Too bad.

Is there another path for us?

Thank you!

Hi Jean,

TBCT is for T1 interface where as European Telecommunications Standards Institute (ETSI) explicit call transfer(ECT) for E1 interface.

For ETSI Call Transfer, the switch type should be primary-net5. you can refer below link for ETSI.

http://www.cisco.com/en/US/docs/ios/voice/ivr/configuration/guide/ivr_tbct.html#wp1014035

Thanks,
Raghavendra

Collateral


No files available