Author’s note: This article supports our legacy products. At Inventive Labs, after two decades of providing telephony tools, we never stop supporting those who rely on our products to run their businesses. We no longer recommend Dialogic. This article is for our customers who are using legacy equipment. For more information about these legacy products and where we are today, read Ditch Dialogic & Convert to Voice Elements.
CTI32 Version V4.6 was released to the general public on December 3, 2008.
Here are some of the changes that are included in this release!
Enhancements
CTISetDigitCallBack
A digit call back was added so that events would be raised at the moment a digit was detected on a voice resource.
int far pascal CTISetDigitCallBack(int dev,PFNCBDIGIT digitCallBack)
CTIGetToneDigit
N/A
CTIIsToneComplete
N/A
CTIPlayToPotentialMachine
When a machine detection is returned from call progress, this function allows you to “test the water” to ensure you have actually reached the end of the machine’s greeting. If the system detects voice activity after the play begins, then the system will return to your code allowing you to start the play over again. This will ensure that the entire message gets played to the machine without getting cut off at the beginning.
long far pascal CTIPlayToPotentialMachine(int chdev,int source,int voice_format,char *FileName, long Fhandle,
char *prompt_to_play,char *digmask,BOOL ClearDigitBuffer, char *error_file,
int bargeInKillTime)
CTISetHookEx
This new function allows you allows you to return ISDN codes to the carrier for why you are disconnecting the call. For example, if a new call arrives from a calling party that you don’t want to accept, you can set the ISDN code to return “Temporarily Unavailable”, or “Busy”.
int far pascal CTISetHookEx(int chdev,int hookstate, int dropcause)
CTIGetFaxResourceInfo
Gets Fax Resource Information about the specified fax resource, including the dialogic device number, the device name, the busy status and if the resource has been disabled.
int far pascal CTIGetFaxResourceInfo(int faxdev, long* dialogicDev, char* deviceName, long* devBusy, long* disabled)
CTIGetVoices
This function gets returns all of the voices that are available to play using the TTS functions. The list is delimited with CR/LF’s.
long far pascal CTIGetVoices(char *szVoices, int iBufferSize)
CTIGetCrn
This function returns the CRN for the current call.
long far pascal CTIGetCrn(int chdev)
VOIP QOS Events
Summary
For those using 3PCC, a call back has been created that provides QOS alarms for each IPM device. The alarm information available is ”Network Cable Unplugged”, ”Jitter”, ”Packet Loss”, ”DTMF Discarded”, ”Round Trip Latency”, ”RTCP Timeout” and ”RTP Timeout”
Moreover, you can adjust the settings for when an alarm is triggered!
To get alarm notifications declare a permanent delegate:
private static OnQosAlarmEvent myQosAlarm;
Then, provide the delegate to cti to setup the callback:
static InboundIVR()
{
myQosAlarm = new OnQosAlarmEvent(OnQosAlarm);
cti.SetQosAlarmCallBack(OnQosAlarm);
}
Finally, build out your stub:
public static void OnQosAlarm(string deviceName, int deviceHandle, int qosType, int alarmState)
{
Engine.gCfg.log.Write(“QOS Event: {0} – {1} – {2} – {3}”, deviceName, deviceHandle, qosType, alarmState);
}
VOIP QOS Settings
You can set the alarm thresholds by editing the CTI32.INI file and alter the settings in the [IPM] section:
[IPM]
;
; JITTER QOS SETTINGS
;
QOSTYPE_JITTER_TimeInterval=5000
QOSTYPE_JITTER_DebounceOn=20000
QOSTYPE_JITTER_DebounceOff=60000
QOSTYPE_JITTER_FaultThreshold=60
QOSTYPE_JITTER_PercentSuccessThreshold=25
QOSTYPE_JITTER_PercentFailThreshold=25
;
; LOST PACKETS QOS SETTINGS
;
QOSTYPE_LOSTPACKETS_TimeInterval=1000
QOSTYPE_LOSTPACKETS_DebounceOn=10000
QOSTYPE_LOSTPACKETS_DebounceOff=10000
QOSTYPE_LOSTPACKETS_FaultThreshold=20
QOSTYPE_LOSTPACKETS_PercentSuccessThreshold=40
QOSTYPE_LOSTPACKETS_PercentFailThreshold=40
;
; RTCP INACTIVITY QOS SETTINGS
;
QOSTYPE_RTCPTIMEOUT_TimeInterval=1000
QOSTYPE_RTCPTIMEOUT_DebounceOn=0
QOSTYPE_RTCPTIMEOUT_DebounceOff=0
QOSTYPE_RTCPTIMEOUT_FaultThreshold=250
QOSTYPE_RTCPTIMEOUT_PercentSuccessThreshold=0
QOSTYPE_RTCPTIMEOUT_PercentFailThreshold=0
;
; RTP TIMEOUT QOS SETTINGS
;
QOSTYPE_RTPTIMEOUT_TimeInterval=1000
QOSTYPE_RTPTIMEOUT_DebounceOn=0
QOSTYPE_RTPTIMEOUT_DebounceOff=0
QOSTYPE_RTPTIMEOUT_FaultThreshold=1200
QOSTYPE_RTPTIMEOUT_PercentSuccessThreshold=0
QOSTYPE_RTPTIMEOUT_PercentFailThreshold=0
The settings are described in:
http://www.dialogic.com/manuals/docs/ip_media_programming_v6.pdf – See Section 8.
Double Call Progress
You can now use the cti.Dial a second time (using the a voice resource routed to a channel) that will allow you to perform a second call progress analysis. This is useful when you are dialing into a PBX, dialing an extension, and then wish to determine if you get a HUMAN or a MACHINE.
To perform a double call progress make your initial call, dial any additional digits and then perform a second call progress analysis as follows:
cti.Dial(theVoiceResourceChDev, “”, 2, timeOutInSeconds, “”);
INI SETTINGS
This section shows the changes to the CTI32.INI settings.
[General] Section
The following items have been added:
* TbctDChannelIds – This allows you to specify your carrier’s specific D channel ID’s when you have multiple D channels and with to perform Two B channel transfers across D channel spans.
* LogMaxSize – This allows you to specify the standard size for the CTI32.Log file. The default is 10000000 bytes.
* ProgressingLogic – This setting allows the system to use a newer, more robust call progress analysis. To use the new logic set this value to 1.
* InhibitStopChannelDelay – This setting removes the StopChannel delay that originally caused the system to wait up to 1 second before issuing the actual stop channel.
* CPANonConnectMode – This setting changes the way the system handles non connected calls when using call progress.
* SetHookOnStopDial – This setting forces a disconnect on a stop dial.
[CSP] Section
This section now allows you to make settings to all of the CSP parameters.
DXCH_BARGEINONLY=0
;
DXCH_SPEECHPLAYTHRESH=-40
DXCH_SPEECHPLAYTRIGG=10
DXCH_SPEECHPLAYWINDOW=10
DXCH_SPEECHSNR=-12
ECCH_ECHOCANCELLER=1
ECCH_NLP=1
ECCH_VADINITIATED=1
ECCH_XFERBUFFERSIZE=5120
;
;Applies to Springware Only
DXCH_EC_TAP_LENGTH=128
DXCH_SPEECHNONPLAYTHRESH=-40
DXCH_SPEECHNONPLAYTRIGG=10
DXCH_SPEECHNONPLAYWINDOW=10
ECCH_ADAPTMODE=0
;
;Applies to DM3/HMP Only
ECCH_SVAD=1
[HMP] Section
* Password Encrypted – Specifies that a BASE64 encrypted password in the INI file for security reasons.
* RegisterMaxHops – Specifies the MaxHops for the REGISTER request.
* RegisterTimeToLive – Specifies the TTL for the REGISTER request.
* RegisterUserAgent – Specifies a UserAgent for the REGISTER request.
* RegisterMaxRetries – Specifies the Maximum number of retries for registration requests.
* SipAdditionalRegistrations = Specifies additional INI files that define addition carriers that you with to send REGISTER requests to.
* DialRealm – Allows you to have a different Realm for MD5 authentication during dialing.
[TTS] Section
* PortCount – Allows you to specify how many concurrent TTS ports you wish to use.
[IPM] Section
See ”’VOIP QOS Events”’ above for more information.
Fax Changes
A number of fax improvements have been made to the library including enhancements to R4 fax and T.38:
* The information in the CTI32.Log is now more detailed, including the fax resource device name for all logged items.
* The manner in which fax resource are allocated and used is now more stable.
* The library better handles remote disconnects
* A hung port issue was resolved
* The Library now returns an error if an empty string is passed to the Send or Receive function.
* The Library now better handles t.38 codec switches.
* Users can now specify as part of the fax parameters:
** FC_RXBAUDRATE
*** DF_MAXBAUD
*** DF_14400BAUD
*** DF_9600BAUD
*** DF_4800BAUD
*** DF_2400BAUD
** FC_TXCODING
*** DF_MH
*** DF_MR
*** DF_MMR;
*** DF_MH_ECM
*** DF_MR_ECM
*** DF_MMR_ECM
** FC_RXCODING
*** DF_MH
*** DF_MR
*** DF_MMR;
*** DF_MH_ECM
*** DF_MR_ECM
*** DF_MMR_ECM
New Fax Status Information
The following values can now be received during page breaks:
* ATFX_PGXFER
* ATFX_BADPAGE
* ATFX_TERMMSK
* ATFX_TFBADTAG
* ATFX_TFPGBASE
* ATFX_TFNOTAG
* ATFX_CHTYPE
* ATFX_ECM
Sending multiple faxes
Multiple Fax Files Can Now be Sent to the same destination on the same call.
To specify multiple faxes simple specify the filename’s separated by the vertical bar: |
cti.SendFax(faxresource, “FILE1.TIF|FILE2.TIF|FILE3.TIF”, …)
Bug Fixes
This section describes changes to the library for reported bugs.
Corrected 3PCC Codec Handling for G729
When requesting a G729 codec, some carriers’ SDP included additional information beyond the annexb specification causing CTI do deny a G729 codec request. For example:
a=fmtp:18 annexb=no”’;mode=30”’
This has been corrected so that CTI32 will correctly identify the codec.