cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
353
Views
0
Helpful
0
Comments
cdnadmin
Level 11
Level 11
This document was generated from CDN thread

Created by: Chad Stachowicz on 04-06-2010 02:54:40 AM
All...
 
 
basically what I am trying to do is have 2 calls come into a TCL script within 5 minutes, and connect wth each other...
 
I am however getting this error...
 
Jun  4 02:52:07.163 UTC: //1077//TCL :/tcl_PutsObjCmd: ******* CVP_OBCALLREQ: Got Call1 with legid 1085
Jun  4 02:52:10.279 UTC: //1077//TCL :/tcl_PutsObjCmd: ******* CVP_OBCALLREQ: Got Call2 with legid 1086
Jun  4 02:52:10.279 UTC: //1077//AFW_:/AFW_FSM_Drive: Tcl_Eval to drive FSM insi    de Tcl modulespace. code=1 code=ERROR
Jun  4 02:52:10.279 UTC: TCL script failure
        Result:
                         Event ev_create_donedoes not have Leg Information
Jun  4 02:52:10.279 UTC:        TCL script failure errorInfo:
                        Event ev_create_donedoes not have Leg Information
    while executing
"infotag get evt_legs"
    (procedure "log_event" line 3)
    invoked from within
"log_event"
 
 
Below is the code...
 
#-----------------------------------------------------------------------------
# BRIDGE CALLS
#-----------------------------------------------------------------------------
proc bridge_call_incoming { } {
 global incomingcallstotal
 global call1
 global call2
 incr incomingcallstotal
 
 if {$incomingcallstotal == 1} {
  leg setupack leg_incoming
 
  leg proceeding leg_incoming
  leg connect leg_incoming
  timer start named_timer 300 bridge_resp_timeout
  set call1 [infotag get evt_legs]
  puts -nonewline "******* CVP_OBCALLREQ: Got Call1 with legid $call1"
 }
 if {$incomingcallstotal == 2} {
  set call2 [infotag get evt_legs]
  connection create $call1 $call2
  puts -nonewline "******* CVP_OBCALLREQ: Got Call2 with legid $call2"
 }
}
 
I am writing an advancement for CVP, and will be sharing all code with the community when I am done, so the help is madly appreciated.  This is the last step!!
 
Cheers,
 
Chad

Subject: RE: connection create failure
Replied by: Yawming Chen on 04-06-2010 03:02:59 AM
error is in procedure log_event.
 
Can you please show that procedure ?
 
Thanks,
 
Yawming

Subject: RE: connection create failure
Replied by: Yawming Chen on 04-06-2010 03:08:01 AM
Please take the look the scope for evt_legs looks like we won't be able to get evt_legs when getting ev_create_done event.

 
evt_legs
Description Returns a list of leg IDs associated with the event received. For information about
which legs the evt_legs info-tag returns for a specific event, see Chapter 5,
¿Events.¿
Syntax infotag get evt_legs
Mode Read
Scope:
ev_authorize_done
ev_leg_timer
ev_digit_end
ev_hookflash
ev_disconnected
ev_disconnect_done
ev_grab
ev_setup_indication
ev_media_done
ev_handoff
ev_returned
ev_setup_done
ev_collectdigits_done
ev_vxml_dialog_done
ev_vxmldialog_event

Subject: RE: connection create failure
Replied by: Chad Stachowicz on 04-06-2010 03:35:21 AM
AMAZING!!! It is ALMOST complete!!! your awesome.... it now lets me talk over the connection for about 5-10 secs before it disconnects, I assume there is something that I must do now, to tell it to stay open and let me go on with my business?  any info is appreciated and once agan, your awesome!!

Subject: RE: connection create failure
Replied by: Yawming Chen on 04-06-2010 03:48:41 AM
Without lookingthe script it's hard to tell what's going on.
 
If you don't like to post your script here you can send it to
 
developer-support@cisco.com
 
and note it for Yawming to pick up.
 
Also need to turn on "deb voip app tcl" and collect oputput to analyze.
 
Thanks,
 
Yawming
 

Subject: RE: connection create failure
Replied by: Chad Stachowicz on 04-06-2010 04:38:37 AM
I will post it!  I told everyone its to share, its a hack mess right now....
 
If your wondering what it is for, in the end its for an advanced mobile agent feature for CVP, but it can also be used to control outbound dialing when im finished from CVP, a long wanted feature!  Much of this is based on the outbound dialer for CVP on the cisco.com site...
 
 
In my example it gets to BRIDGING CONNECTION DONE  function and after 10 seconds of hearing audio, it disconnects the call.....  I originally had it without the cleanup function and it did the same thing...
 
Thank you so much, you rock!!
 
#-----------------------------------------------------------------------------
proc handoff_event { } {
 global vxml_leg
 global ob_dest
 global ob_rna
 global ob_cli
 global ob_uui
 global ob_id
 global matchParam
 global incomingcallstotal

 set vxml_leg [infotag get evt_legs]
 set arglst [infotag get evt_handoff argstring]
 set incomingcallstotal 0
 puts -nonewline "******* CVP_OBCALLREQ: assumed control of call with argument: <$arglst>"
 set matchParam(calledNum) 7788111
 if {[call lookup matchParam] == ""} {
  set registerres [call register matchParam]
 }
 regexp {rna=([0-9]*)} $arglst match ob_rna
 regexp {dnis=([0-9]*)} $arglst match ob_dest
 regexp {cli=([0-9]*)} $arglst match ob_cli
 regexp {id=(\S*)} $arglst match ob_id
 regexp {uui="([^"]*)"} $arglst match ob_uui
 if {$ob_rna == "" || $ob_rna == 0} {
  set ob_rna 30
 }
 set callinfo(notifyEvents) "ev_alert ev_progress ev_proceeding ev_connected"
 set callinfo(originationNum) $ob_cli
 set callinfo(alertTime) $ob_rna
 leg setup $ob_dest callinfo
}   
#--------------------------------------------------------------------------
# OUTBOUND CALL SETUP COMPLETED
#--------------------------------------------------------------------------
proc outbound_setup_done { } {
 global ob_dest
 global ob_cli
 global vxml_leg
 global ob_id
 global ob_rna
 global legid
 
 
 set callinfo(notifyEvents) "ev_alert ev_progress ev_proceeding ev_connected"
 set callinfo(originationNum) $ob_cli
 set callinfo(alertTime) $ob_rna
 set status [infotag get evt_status]
 set legid [infotag get evt_legs]
 switch $status {
  "ls_000" {
   set status_str "connected"
  }
  "ls_002" {
   set status_str "noanswer"
  }
  "ls_004" {
   set status_str "invalid_number"
  }
  "ls_007" {
   set status_str "busy"
  }
  default {
   set status_str $status
  }
 }
 if {$status == "ls_000"} {
  
  puts -nonewline "******* CVP_DIALER: ID = $ob_id: call to $ob_dest established"
 } else {
  puts -nonewline "******* CVP_DIALER: ID = $ob_id: call to $ob_dest failed, status $status ($status_str)"
 }

 leg setup 7788000 callinfo $legid
}
#--------------------------------------------------------------------------
# OUTBOUND CALL SETUP COMPLETED
#--------------------------------------------------------------------------
proc outbound_ivr_done { } {
 global ob_dest
 global ob_cli
 global vxml_leg
 global ob_id
 global ob_rna
 
 
 set status [infotag get evt_status]
 set legid [infotag get evt_legs]
 switch $status {
  "ls_000" {
   set status_str "connected"
  }
  "ls_002" {
   set status_str "noanswer"
  }
  "ls_004" {
   set status_str "invalid_number"
  }
  "ls_007" {
   set status_str "busy"
  }
  default {
   set status_str $status
  }
 }
 if {$status == "ls_000"} {
  
  puts -nonewline "******* CVP_DIALER: ID = $ob_id: call to $ob_dest established"
 } else {
  puts -nonewline "******* CVP_DIALER: ID = $ob_id: call to $ob_dest failed, status $status ($status_str)"
 }
 
 
 handoff return $vxml_leg -s $status_str
  
}
 
#-----------------------------------------------------------------------------
# BRIDGING CONNECTION DONE
#-----------------------------------------------------------------------------
proc create_done { } {
 puts -nonewline "******* CVP_OBCALLREQ: we should be connected"
 cleanup
}

#-----------------------------------------------------------------------------
# CLEANUP
#-----------------------------------------------------------------------------
proc cleanup { } {
 call close
}
#-----------------------------------------------------------------------------
# BRIDGE CALLS
#-----------------------------------------------------------------------------
proc bridge_call_incoming { } {
 global incomingcallstotal
 global call1
 global legid
 global call2
 set connecs [infotag get con_all]
 incr incomingcallstotal
 
 if {$incomingcallstotal == 1} {
  leg setupack leg_incoming
  leg proceeding leg_incoming
  leg connect leg_incoming
  timer start named_timer 300 bridge_resp_timeout
  set call1 [infotag get evt_legs]
  puts -nonewline "******* CVP_OBCALLREQ: Got Call1 with legid $call1"
 }
 if {$incomingcallstotal == 2} {
  set call2 [infotag get evt_legs]
  connection create $call1 $call2
  puts -nonewline "******* CVP_OBCALLREQ: Got Call2 with legid $call2"
 }
}
#-----------------------------------------------------------------------------
# LEG DISCONNECTING
#-----------------------------------------------------------------------------
proc disconnect { } {
 set disc_leg [infotag get evt_legs]
 leg disconnect $disc_leg
}

requiredversion 2.0

#-----------------------------------------------------------------------------
#   State Machine
#-----------------------------------------------------------------------------
set FSM(CALL_INIT,ev_handoff)   "handoff_event,DIALING"
set FSM(DIALING,ev_setup_done)   "outbound_setup_done,SETUP_DONE"
set FSM(any_state,ev_create_done)  "create_done,same_state"
set FSM(any_state,ev_disconnect_done)  "cleanup,same_state"
set FSM(any_state,ev_disconnected)  "disconnect,same_state"
set FSM(SETUP_DONE,ev_setup_done)  "outbound_ivr_done,same_state"
set FSM(any_state,ev_setup_indication)  "bridge_call_incoming,same_state"
 
fsm define FSM CALL_INIT
 
 
 

Subject: RE: connection create failure
Replied by: Yawming Chen on 04-06-2010 04:51:10 AM
You close the call after you creating the connection.
 
 
set FSM(any_state,ev_create_done)  "create_done,same_state"
 
proc create_done { } {

 puts -nonewline "******* CVP_OBCALLREQ: we should be connected"

 cleanup

}



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

# CLEANUP

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

proc cleanup { } {

 call close

}

Subject: RE: connection create failure
Replied by: Chad Stachowicz on 04-06-2010 05:07:34 AM
Hello,
 
 
   I tried to explain above I had just added this to try as a last resort... I just tried it without it and the same results...
 
 
It appears its actually dropping after 17 seconds total time connected everytime.  I have redone the functions below and tested to be sure...
 

#-----------------------------------------------------------------------------
# BRIDGING CONNECTION DONE
#-----------------------------------------------------------------------------
proc create_done { } {
 puts -nonewline "******* CVP_OBCALLREQ: we should be connected"
 
}

#-----------------------------------------------------------------------------
# CLEANUP
#-----------------------------------------------------------------------------
proc cleanup { } {
 call close
}

Subject: RE: connection create failure
Replied by: Chad Stachowicz on 04-06-2010 05:10:54 AM
here is the debug...  the last couple times you can see I hit enter is while I was talking between the connections then it randomely disconnects
 
 
Jun  4 05:09:18.097 UTC: //1221//TCL :/tcl_CallObjCmd:  call close
Jun  4 05:09:18.097 UTC: //1221//TCL :/tcl_CallCloseObjCmd:  close
Jun  4 05:09:19.177 UTC: //-1//AFW_:EE47DE035C000:/Tcl_Link: Linking script cvp_obcallreq
Jun  4 05:09:19.181 UTC: //-1//TCL :EE47DE035C000:/tcl_RequiredVersionObjCmd: Script requires version 2.0. So 2.1 is OK
Jun  4 05:09:19.181 UTC: //-1//TCL :EE47DE035C000:/tcl_FSMObjCmd:  fsm define FSM CALL_INIT
Jun  4 05:09:19.181 UTC: //-1//TCL :EE47DE035C000:/tcl_FSMDefineObjCmd: State Machine: Array FSM: Start State: CALL_INIT
Jun  4 05:09:19.181 UTC: //-1//TCL :EE47DE035C000:/tcl_FSMDefineObjCmd: FSM Data structure
Jun  4 05:09:19.181 UTC: (any_state(0), ev_setup_indication(30)--(bridge_call_incoming)-->(any_state(0))
Jun  4 05:09:19.181 UTC: (DIALING(2), ev_setup_done(187)--(outbound_setup_done)-->(SETUP_DONE(3))
Jun  4 05:09:19.181 UTC: (any_state(0), ev_disconnected(17)--(disconnect)-->(any_state(0))
Jun  4 05:09:19.181 UTC: (any_state(0), ev_disconnect_done(18)--(cleanup)-->(any_state(0))
Jun  4 05:09:19.181 UTC: (SETUP_DONE(3), ev_setup_done(187)--(outbound_ivr_done)-->(any_state(0))
Jun  4 05:09:19.181 UTC: (any_state(0), ev_create_done(35)--(create_done)-->(any_state(0))
Jun  4 05:09:19.181 UTC: (CALL_INIT(1), ev_handoff(21)--(handoff_event)-->(DIALING(2))
Jun  4 05:09:19.181 UTC: FSM start state CALL_INIT(1)
Jun  4 05:09:19.181 UTC: //-1//AFW_:EE47DE035C000:/Tcl_Link: Script cvp_obcallreq succesfully linked.
Jun  4 05:09:19.185 UTC: //1221//TCL :/tcl_InfotagObjCmd:  infotag get evt_legs
Jun  4 05:09:19.185 UTC: //1221//TCL :/tcl_InfotagGetObjCmd: infotag get evt_legs
Jun  4 05:09:19.185 UTC: //1221//AFW_:/vtr_ev_legs: argc 2
Jun  4 05:09:19.185 UTC: //1221//AFW_:/vtr_ev_legs: EV_LEGS []
Jun  4 05:09:19.185 UTC: //1221//TCL :/tcl_InfotagObjCmd:  infotag get evt_handoff argstring
Jun  4 05:09:19.185 UTC: //1221//TCL :/tcl_InfotagGetObjCmd: infotag get evt_handoff argstring
Jun  4 05:09:19.185 UTC: //1221//AFW_:/vtr_ev_handoff: argc 3 argindex 2
Jun  4 05:09:19.185 UTC: //1221//AFW_:/vtr_ev_handoff: event=CC_EV_CALL_HANDOFF, string=dnis=4268 cli=4153586000 rna=null id=null uui="null"
Jun  4 05:09:19.185 UTC: //1221//TCL :/tcl_CallObjCmd:  call lookup matchParam
Jun  4 05:09:19.185 UTC: //1221//TCL :/tcl_callLookupObjCmd: lookup matchParam
Jun  4 05:09:19.185 UTC: //1221//TCL :/tcl_CallObjCmd:  call register matchParam
Jun  4 05:09:19.185 UTC: //1221//TCL :/tcl_callRegisterObjCmd: register matchParam
Jun  4 05:09:19.189 UTC: //1221//TCL :/tcl_LegObjCmd:  leg setup 4268 callinfo
Jun  4 05:09:19.189 UTC: //-1//CSPK:/tclSetCallInfoParams: originationNum=4153586000
Jun  4 05:09:19.189 UTC: //-1//CSPK:/tclSetControlParams: alertTime(30) = 30
Jun  4 05:09:19.189 UTC: //-1//CSPK:/tclSetControlParams: Notify Signaling Mask=30
Jun  4 05:09:21.557 UTC: //1221//TCL :/tcl_InfotagObjCmd:  infotag get evt_status
Jun  4 05:09:21.557 UTC: //1221//TCL :/tcl_InfotagGetObjCmd: infotag get evt_status
Jun  4 05:09:21.557 UTC: //1221//AFW_:/vtr_ev_status: argc 2 argindex 2
Jun  4 05:09:21.557 UTC: //1221//TCL :/tcl_InfotagObjCmd:  infotag get evt_legs
Jun  4 05:09:21.557 UTC: //1221//TCL :/tcl_InfotagGetObjCmd: infotag get evt_legs
Jun  4 05:09:21.557 UTC: //1221//AFW_:/vtr_ev_legs: argc 2
Jun  4 05:09:21.557 UTC: //1221//AFW_:/vtr_ev_legs: EVCALLID [1222]
Jun  4 05:09:21.557 UTC: //1221//TCL :/tcl_LegObjCmd:  leg setup 7788000 callinfo 1222
Jun  4 05:09:21.557 UTC: //1221//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
Jun  4 05:09:21.557 UTC: //-1//CSPK:/tclSetCallInfoParams: originationNum=4153586000
Jun  4 05:09:21.557 UTC: //-1//CSPK:/tclSetControlParams: alertTime(60) = 60
Jun  4 05:09:21.557 UTC: //-1//CSPK:/tclSetControlParams: Notify Signaling Mask=30
Jun  4 05:09:21.717 UTC: //1224//TCL :/tcl_InfotagObjCmd:  infotag get leg_guid
Jun  4 05:09:21.717 UTC: //1224//TCL :/tcl_InfotagGetObjCmd: infotag get leg_guid
Jun  4 05:09:21.717 UTC: //1224//AFW_:/vtr_lg_guid: argc 2 argindex 2
Jun  4 05:09:21.717 UTC: //1224//TCL :/tcl_InfotagObjCmd:  infotag get leg_proto_headers Cisco-Gucid
Jun  4 05:09:21.717 UTC: //1224//TCL :/tcl_InfotagGetObjCmd: infotag get leg_proto_headers Cisco-Gucid
Jun  4 05:09:21.717 UTC: //1224//AFW_:/vtr_lg_proto_headers: argc 3 argindex 2
Jun  4 05:09:21.717 UTC: //1224//TCL :/tcl_InfotagObjCmd:  infotag get leg_proto_headers App-Info
Jun  4 05:09:21.717 UTC: //1224//TCL :/tcl_InfotagGetObjCmd: infotag get leg_proto_headers App-Info
Jun  4 05:09:21.717 UTC: //1224//AFW_:/vtr_lg_proto_headers: argc 3 argindex 2
Jun  4 05:09:21.717 UTC: //1224//TCL :/tcl_InfotagObjCmd:  infotag get leg_dnis
Jun  4 05:09:21.717 UTC: //1224//TCL :/tcl_InfotagGetObjCmd: infotag get leg_dnis
Jun  4 05:09:21.721 UTC: //1224//AFW_:/vtr_lg_dnis: argc 2 argindex 2
Jun  4 05:09:21.721 UTC: //1224//TCL :/tcl_InfotagObjCmd:  infotag get leg_proto_headers To
Jun  4 05:09:21.721 UTC: //1224//TCL :/tcl_InfotagGetObjCmd: infotag get leg_proto_headers To
Jun  4 05:09:21.721 UTC: //1224//AFW_:/vtr_lg_proto_headers: argc 3 argindex 2
Jun  4 05:09:21.721 UTC: //1224//TCL :/tcl_InfotagObjCmd:  infotag get evt_gtd gtd_inf
Jun  4 05:09:21.721 UTC: //1224//TCL :/tcl_InfotagGetObjCmd: infotag get evt_gtd gtd_inf
Jun  4 05:09:21.721 UTC: //1224//AFW_:/vtr_ev_gtd_object: argc 3 argindex 2 get evt_gtd gtd_inf
Jun  4 05:09:21.721 UTC: //1224//AFW_:/vtr_ev_gtd_object: cc_ev->e.event_id 25
Jun  4 05:09:21.721 UTC: //1224//AFW_:/vtr_ev_gtd_object: rawmsg not found in event
Jun  4 05:09:21.721 UTC: //1224//TCL :/tcl_LegObjCmd:  leg proceeding leg_incoming
Jun  4 05:09:21.721 UTC: //1224//TCL :/tcl_LegProceedObjCmd: proceeding leg_incoming
Jun  4 05:09:21.721 UTC: //1224//AFW_:/vtd_lg_incoming: argc 2
Jun  4 05:09:21.721 UTC: //1224//AFW_:/vtd_lg_incoming: Legs [1224 ]
Jun  4 05:09:21.721 UTC: //1224//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
Jun  4 05:09:21.721 UTC: //1224//TCL :/tcl_LegObjCmd:  leg connect leg_incoming
Jun  4 05:09:21.721 UTC: //1224//TCL :/tcl_LegConnectObjCmd: connect leg_incoming
Jun  4 05:09:21.721 UTC: //1224//AFW_:/vtd_lg_incoming: argc 2
Jun  4 05:09:21.721 UTC: //1224//AFW_:/vtd_lg_incoming: Legs [1224 ]
Jun  4 05:09:21.721 UTC: //1224//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
Jun  4 05:09:21.721 UTC: //1224//TCL :/tcl_TimerObjCmd:  timer start named_timer 1 handoff_timer
Jun  4 05:09:21.721 UTC: //1224//TCL :/tcl_TimerStartObjCmd: timer start named_timer 1 handoff_timer
Jun  4 05:09:21.797 UTC: //1221//TCL :/tcl_InfotagObjCmd:  infotag get evt_status
Jun  4 05:09:21.797 UTC: //1221//TCL :/tcl_InfotagGetObjCmd: infotag get evt_status
Jun  4 05:09:21.797 UTC: //1221//AFW_:/vtr_ev_status: argc 2 argindex 2
Jun  4 05:09:21.797 UTC: //1221//TCL :/tcl_InfotagObjCmd:  infotag get evt_legs
Jun  4 05:09:21.797 UTC: //1221//TCL :/tcl_InfotagGetObjCmd: infotag get evt_legs
Jun  4 05:09:21.797 UTC: //1221//AFW_:/vtr_ev_legs: argc 2
Jun  4 05:09:21.797 UTC: //1221//AFW_:/vtr_ev_legs: EVCALLID [1222 1223]
Jun  4 05:09:21.797 UTC: //1221//TCL :/tcl_HandoffObjCmd:  handoff return 1221 -s connected
Jun  4 05:09:21.797 UTC: //1221//TCL :/tcl_HandoffReturnObjCmd: return 1221 -s connected
Jun  4 05:09:21.797 UTC: //1221//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
Jun  4 05:09:21.797 UTC: //1221//TCL :/tcl_HandoffReturnObjCmd: Returning  Legs [1221 ] with args=connected
Jun  4 05:09:21.813 UTC: //1221//PACK:/Media_Play_Start:
Jun  4 05:09:22.721 UTC: //1224//TCL :/tcl_HandoffObjCmd:  handoff appl leg_incoming new-call CALLID=2A0803536ECE11DF8ADACDF0A815FF9A DNIS=222222222211217 PROTOCOL=http PORT=8000 HOST=172.23.249.13 BACKUP=172.23.249.13 VERSION=7.0.2 SEND_ABN_DISC=0 UUI=
Jun  4 05:09:22.721 UTC: //1224//TCL :/tcl_handoff_common: appl leg_incoming new-call CALLID=2A0803536ECE11DF8ADACDF0A815FF9A DNIS=222222222211217 PROTOCOL=http PORT=8000 HOST=172.23.249.13 BACKUP=172.23.249.13 VERSION=7.0.2 SEND_ABN_DISC=0 UUI=
Jun  4 05:09:22.721 UTC: //1224//AFW_:/vtd_lg_incoming: argc 4
ISI-RW-DR-VGW01#
ISI-RW-DR-VGW01#
ISI-RW-DR-VGW01#
ISI-RW-DR-VGW01#
ISI-RW-DR-VGW01#
ISI-RW-DR-VGW01#
Jun  4 05:09:22.721 UTC: //1224//AFW_:/vtd_lg_incoming: Legs [1224 ]
Jun  4 05:09:22.721 UTC: //1224//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
Jun  4 05:09:22.721 UTC: //1224//TCL :/tcl_handoff_common: Handing off Legs [1224 ] to new-call with args=CALLID=2A0803536ECE11DF8ADACDF0A815FF9A DNIS=222222222211217 PROTOCOL=http PORT=8000 HOST=172.23.249.13 BACKUP=172.23.249.13 VERSION=7.0.2 SEND_ABN_DISC=0 UUI=
Jun  4 05:09:22.721 UTC: //1224//TCL :/tcl_CallObjCmd:  call close
Jun  4 05:09:22.721 UTC: //1224//TCL :/tcl_CallCloseObjCmd:  close
Jun  4 05:09:22.825 UTC: //1224//PACK:/Media_Play_Start:
ISI-RW-DR-VGW01#
ISI-RW-DR-VGW01#
ISI-RW-DR-VGW01#
ISI-RW-DR-VGW01#
ISI-RW-DR-VGW01#
ISI-RW-DR-VGW01#
ISI-RW-DR-VGW01#
Jun  4 05:09:34.765 UTC: //1221//PACK:/tclrecord_create_record_token_url:
Jun  4 05:09:35.537 UTC: //1221//TCL :/tcl_InfotagObjCmd:  infotag get con_all
Jun  4 05:09:35.537 UTC: //1221//TCL :/tcl_InfotagGetObjCmd: infotag get con_all
Jun  4 05:09:35.537 UTC: //1221//AFW_:/vtr_co_all: argc 2
Jun  4 05:09:35.537 UTC: //1221//AFW_:/vtr_co_all: EV_CONNECTIONS [130]
Jun  4 05:09:35.537 UTC: //1221//TCL :/tcl_LegObjCmd:  leg setupack leg_incoming
Jun  4 05:09:35.537 UTC: //1221//TCL :/tcl_LegSetupAckObjCmd: setupack leg_incoming
Jun  4 05:09:35.537 UTC: //1221//AFW_:/vtd_lg_incoming: argc 2
Jun  4 05:09:35.537 UTC: //1221//AFW_:/vtd_lg_incoming: Legs [1229 ]
Jun  4 05:09:35.537 UTC: //1221//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
Jun  4 05:09:35.541 UTC: //1221//TCL :/tcl_LegObjCmd:  leg proceeding leg_incoming
Jun  4 05:09:35.541 UTC: //1221//TCL :/tcl_LegProceedObjCmd: proceeding leg_incoming
Jun  4 05:09:35.541 UTC: //1221//AFW_:/vtd_lg_incoming: argc 2
Jun  4 05:09:35.541 UTC: //1221//AFW_:/vtd_lg_incoming: Legs [1229 ]
Jun  4 05:09:35.541 UTC: //1221//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
Jun  4 05:09:35.541 UTC: //1221//TCL :/tcl_LegObjCmd:  leg connect leg_incoming
Jun  4 05:09:35.541 UTC: //1221//TCL :/tcl_LegConnectObjCmd: connect leg_incoming
Jun  4 05:09:35.541 UTC: //1221//AFW_:/vtd_lg_incoming: argc 2
Jun  4 05:09:35.541 UTC: //1221//AFW_:/vtd_lg_incoming: Legs [1229 ]
Jun  4 05:09:35.541 UTC: //1221//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
Jun  4 05:09:35.541 UTC: //1221//TCL :/tcl_TimerObjCmd:  timer start named_timer 900 bridge_resp_timeout
Jun  4 05:09:35.541 UTC: //1221//TCL :/tcl_TimerStartObjCmd: timer start named_timer 900 bridge_resp_timeout
Jun  4 05:09:35.541 UTC: //1221//TCL :/tcl_InfotagObjCmd:  infotag get evt_legs
Jun  4 05:09:35.541 UTC: //1221//TCL :/tcl_InfotagGetObjCmd: infotag get evt_legs
Jun  4 05:09:35.541 UTC: //1221//AFW_:/vtr_ev_legs: argc 2
Jun  4 05:09:35.541 UTC: //1221//AFW_:/vtr_ev_legs: EVCALLID [1229]
ISI-RW-DR-VGW01#
Jun  4 05:09:37.693 UTC: //1224//PACK:/tclrecord_create_record_token_url:
Jun  4 05:09:38.697 UTC: //1221//TCL :/tcl_InfotagObjCmd:  infotag get con_all
Jun  4 05:09:38.697 UTC: //1221//TCL :/tcl_InfotagGetObjCmd: infotag get con_all
Jun  4 05:09:38.697 UTC: //1221//AFW_:/vtr_co_all: argc 2
Jun  4 05:09:38.697 UTC: //1221//AFW_:/vtr_co_all: EV_CONNECTIONS [130]
Jun  4 05:09:38.697 UTC: //1221//TCL :/tcl_InfotagObjCmd:  infotag get evt_legs
Jun  4 05:09:38.697 UTC: //1221//TCL :/tcl_InfotagGetObjCmd: infotag get evt_legs
Jun  4 05:09:38.697 UTC: //1221//AFW_:/vtr_ev_legs: argc 2
Jun  4 05:09:38.697 UTC: //1221//AFW_:/vtr_ev_legs: EVCALLID [1230]
Jun  4 05:09:38.697 UTC: //1221//TCL :/tcl_ConnectionObjCmd:  connection create 1229 1230
Jun  4 05:09:38.697 UTC: //1221//TCL :/tcl_ConnectionCreateObjCmd: create 1229 1230
Jun  4 05:09:38.697 UTC: //1221//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
Jun  4 05:09:38.697 UTC: //1221//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
ISI-RW-DR-VGW01#
ISI-RW-DR-VGW01#
ISI-RW-DR-VGW01#
Jun  4 05:09:53.689 UTC: //1221//TCL :/tcl_InfotagObjCmd:  infotag get evt_legs
Jun  4 05:09:53.689 UTC: //1221//TCL :/tcl_InfotagGetObjCmd: infotag get evt_legs
Jun  4 05:09:53.689 UTC: //1221//AFW_:/vtr_ev_legs: argc 2
Jun  4 05:09:53.689 UTC: //1221//AFW_:/vtr_ev_legs: EVCALLID [1230]
Jun  4 05:09:53.689 UTC: //1221//TCL :/tcl_LegObjCmd:  leg disconnect 1230
Jun  4 05:09:53.689 UTC: //1221//TCL :/tcl_LegDisconnectObjCmd: disconnect 1230
Jun  4 05:09:53.689 UTC: //1221//Tcl :/tcl_parseCallID_vartagObj: VARTAG Translation Leg Count=1
Jun  4 05:09:53.697 UTC: //1221//TCL :/tcl_CallObjCmd:  call close
Jun  4 05:09:53.697 UTC: //1221//TCL :/tcl_CallCloseObjCmd:  close

Subject: RE: connection create failure
Replied by: Yawming Chen on 04-06-2010 05:30:06 AM
I am sorry I still not quite get the call flow you want to implement.
Can you please detail your call flow so it's easier to look at your script ?
 
Thanks !

Subject: RE: connection create failure
Replied by: Chad Stachowicz on 04-06-2010 02:30:21 PM
Alright, so I hope your at least familiar a bit with CVP
 
A typical process would go like this, a normal call comes into ICM / CVP and is getting call treatment, a CVP script is called and in it is a VXML document with a handoff to my TCL application which sits on the VXML gateway names cvp_obcallreq.tcl...  I pass in the CLI / ANI and Destination.
 
From here a new call is generated with those parameters, on catching the successfull connection outbound, I then create a second call outbound to 7788000 (this is an ICM / CVP IVR Script) and it connects it to the first call I created.  At this point I have a new outbound call that i created connected to ICM / CVP getting treatment, and my first call that was handed off to the TCL to start all of this.
 
What I did first (this is there for trial) is do a call register 7788111.  The reason for this, is now that I have two calls, the first one is handed back off in the handoff return to CVP, to finish its business which will eventually be transfered to 7788111.  Also the new outbound call I created will be transfered to 7788111... these are the 2 calls thats I want to bridge together.  Essentially its a way to add outbound calling functionality with IVR treatment from ICM / CVP as normal, to CVP comprehensive flow with ICM. 
 
The problem now is when I create the connection they appears to only stay connected with audio for around 14-17 seconds (my phone always shows its been connected 32 total seconds - this is the outbound call that is produced).
 
 
This will be my last hurdle, then a whole bunch of refining and touching up, but at least it will prove that my concept works which is the big hope
 
Cheers,
 
Chad

Subject: RE: connection create failure
Replied by: Yawming Chen on 04-06-2010 08:07:49 PM
Alright, so I hope your at least familiar a bit with CVP


A typical process would go like this, a normal call comes into ICM / CVP and is getting call treatment, a CVP script is called and in it is a VXML document with a handoff to my TCL application which sits on the VXML gateway names cvp_obcallreq.tcl...  I pass in the CLI / ANI and Destination.

Leg1 ----> GW


From here a new call is generated with those parameters, on catching the successfull connection outbound, I then create a second call outbound to 7788000 (this is an ICM / CVP IVR Script) and it connects it to the first call I created.  At this point I have a new outbound call that i created connected to ICM / CVP getting treatment, and my first call that was handed off to the TCL to start all of this.

Leg1 -----> GW ----leg2----->

This is not clear to me ¿connects it to the first call I created¿ if there is a connected call how can you connect it to another call ?

           ????--->   GW ---leg3---> 7788000

For example:

---leg1--->GW ---leg2--->

If need to connect to either of this call leg

Do "connection destroy" then  when getting ev_destroy_done then do "create connection" of whatever you like.
 
Also for some resaon you reveiced disconnect event

 
Jun  4 05:09:53.689 UTC: //1221//TCL :/tcl_LegObjCmd:  leg disconnect 1230
 
you can add the logic when catching the disconnect event put out the disconnect cause, di_xxx and reslated leg information.

Subject: RE: connection create failure
Replied by: Yawming Chen on 04-06-2010 09:07:24 PM
You wait for 2nd call comes in then bridge them ? Did you do "leg setupack" to 2nd call ?
 
proc bridge_call_incoming { } {
 global incomingcallstotal
 global call1
 global legid
 global call2
 set connecs [infotag get con_all]
 incr incomingcallstotal
 
 if {$incomingcallstotal == 1} {
  leg setupack leg_incoming
  leg proceeding leg_incoming
  leg connect leg_incoming
  timer start named_timer 300 bridge_resp_timeout
  set call1 [infotag get evt_legs]
  puts -nonewline "******* CVP_OBCALLREQ: Got Call1 with legid $call1"
 }
 if {$incomingcallstotal == 2} {
  set call2 [infotag get evt_legs]
  connection create $call1 $call2
  puts -nonewline "******* CVP_OBCALLREQ: Got Call2 with legid $call2"
 }
}

Subject: RE: connection create failure
Replied by: Chad Stachowicz on 04-06-2010 08:52:13 PM
 
 
 
You are pretty close..
 
Leg 1--> GW   Here it 'forks' and create another new leg1 and connects it to 778000   the original leg 1 is just handed back to CVP then, nothing is ever connected to it.
 
The first leg is only used to trigger the new phone call and the connection to 7788000.... then what happens is both applicstions transfer to 7788111 and the hope ist hey bridge
 
I believe it may have something with the SIP Proxy or something int eh SIP Chain not getting an Ack, and eventually it disconnects the call.
 
I am going to do some more research, but I think this is why its getting disconnected.
 

Subject: RE: connection create failure
Replied by: Chad Stachowicz on 07-06-2010 01:18:18 PM
it needed a leg setupack and a leg connect... it works like a champion now ;)  I have attached to PoC script below... please note I will release an entire usage package in a week or 2...
 
Thanks again!
 
Chad
 
 
#-----------------------------------------------------------------------------
proc handoff_event { } {
 global vxml_leg
 global ob_dest
 global ob_rna
 global ob_cli
 global ob_uui
 global ob_id
 global matchParam
 global incomingcallstotal

 set vxml_leg [infotag get evt_legs]
 set arglst [infotag get evt_handoff argstring]
 set incomingcallstotal 0
 puts -nonewline "******* CVP_OBCALLREQ: assumed control of call with argument: <$arglst>"
 set matchParam(calledNum) 7788111
 if {[call lookup matchParam] == ""} {
  set registerres [call register matchParam]
 }
 regexp {rna=([0-9]*)} $arglst match ob_rna
 regexp {dnis=([0-9]*)} $arglst match ob_dest
 regexp {cli=([0-9]*)} $arglst match ob_cli
 regexp {id=(\S*)} $arglst match ob_id
 regexp {uui="([^"]*)"} $arglst match ob_uui
 if {$ob_rna == "" || $ob_rna == 0} {
  set ob_rna 30
 }
 set callinfo(notifyEvents) "ev_alert ev_progress ev_proceeding ev_connected"
 set callinfo(originationNum) $ob_cli
 set callinfo(alertTime) $ob_rna
 leg setup $ob_dest callinfo
}   
#--------------------------------------------------------------------------
# OUTBOUND CALL SETUP COMPLETED
#--------------------------------------------------------------------------
proc outbound_setup_done { } {
 global ob_dest
 global ob_cli
 global vxml_leg
 global ob_id
 global ob_rna
 global legid
 
 
 set callinfo(notifyEvents) "ev_alert ev_progress ev_proceeding ev_connected"
 set callinfo(originationNum) $ob_cli
 set callinfo(alertTime) 60
 set status [infotag get evt_status]
 set legid [infotag get evt_legs]
 switch $status {
  "ls_000" {
   set status_str "connected"
  }
  "ls_002" {
   set status_str "noanswer"
  }
  "ls_004" {
   set status_str "invalid_number"
  }
  "ls_007" {
   set status_str "busy"
  }
  default {
   set status_str $status
  }
 }
 if {$status == "ls_000"} {
  
  puts -nonewline "******* CVP_DIALER: ID = $ob_id: call to $ob_dest established"
 } else {
  puts -nonewline "******* CVP_DIALER: ID = $ob_id: call to $ob_dest failed, status $status ($status_str)"
 }

 leg setup 7788000 callinfo $legid
}
#--------------------------------------------------------------------------
# OUTBOUND CALL SETUP COMPLETED
#--------------------------------------------------------------------------
proc outbound_ivr_done { } {
 global ob_dest
 global ob_cli
 global vxml_leg
 global ob_id
 global ob_rna
 
 
 set status [infotag get evt_status]
 set legid [infotag get evt_legs]
 switch $status {
  "ls_000" {
   set status_str "connected"
  }
  "ls_002" {
   set status_str "noanswer"
  }
  "ls_004" {
   set status_str "invalid_number"
  }
  "ls_007" {
   set status_str "busy"
  }
  default {
   set status_str $status
  }
 }
 if {$status == "ls_000"} {
  
  puts -nonewline "******* CVP_DIALER: ID = $ob_id: call to $ob_dest established"
 } else {
  puts -nonewline "******* CVP_DIALER: ID = $ob_id: call to $ob_dest failed, status $status ($status_str)"
 }
 
 
 handoff return $vxml_leg -s $status_str
  
}
 
#-----------------------------------------------------------------------------
# BRIDGING CONNECTION DONE
#-----------------------------------------------------------------------------
proc create_done { } {
 puts -nonewline "******* CVP_OBCALLREQ: we should be connected"
 
}

#-----------------------------------------------------------------------------
# CLEANUP
#-----------------------------------------------------------------------------
proc cleanup { } {
 call close
}
#-----------------------------------------------------------------------------
# BRIDGE CALLS
#-----------------------------------------------------------------------------
proc bridge_call_incoming { } {
 global incomingcallstotal
 global call1
 global legid
 global call2
 set connecs [infotag get con_all]
 incr incomingcallstotal
 
 if {$incomingcallstotal == 1} {
  leg setupack leg_incoming
  leg proceeding leg_incoming
  leg connect leg_incoming
  timer start named_timer 900 bridge_resp_timeout
  set call1 [infotag get evt_legs]
  puts -nonewline "******* CVP_OBCALLREQ: Got Call1 with legid $call1"
 }
 if {$incomingcallstotal == 2} {
  set call2 [infotag get evt_legs]
  leg setupack $call2
  leg proceeding $call2
  leg connect $call2
  connection create $call1 $call2
  puts -nonewline "******* CVP_OBCALLREQ: Got Call2 with legid $call2"
 }
}
#-----------------------------------------------------------------------------
# LEG DISCONNECTING
#-----------------------------------------------------------------------------
proc disconnect { } {
 set disc_leg [infotag get evt_legs]
 leg disconnect $disc_leg
}

requiredversion 2.0

#-----------------------------------------------------------------------------
#   State Machine
#-----------------------------------------------------------------------------
set FSM(CALL_INIT,ev_handoff)   "handoff_event,DIALING"
set FSM(DIALING,ev_setup_done)   "outbound_setup_done,SETUP_DONE"
set FSM(any_state,ev_create_done)  "create_done,same_state"
set FSM(any_state,ev_disconnect_done)  "cleanup,same_state"
set FSM(any_state,ev_disconnected)  "disconnect,same_state"
set FSM(SETUP_DONE,ev_setup_done)  "outbound_ivr_done,same_state"
set FSM(any_state,ev_setup_indication)  "bridge_call_incoming,same_state"
 
fsm define FSM CALL_INIT
Getting Started

Find answers to your questions by entering keywords or phrases in the Search bar above. New here? Use these resources to familiarize yourself with the community:

Quick Links