C#实现IVR(基于东进的语音卡)-1
生活随笔
收集整理的這篇文章主要介紹了
C#实现IVR(基于东进的语音卡)-1
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上一年在公司做了一個小小的IVR項目.覺得這是一個和硬件驅動交互編程的不錯例子.
共享一下.也討論一下.
代碼:(這個是調用系統驅動的DLL)
using System.Text;
using DJVoiceCard.Lib;
namespace DJVoiceCard.DL
{
??? public class SysFunction
??? {
??????? 系統操作#region 系統操作
??????? /**//// <summary>
??????? /// 初始化系統
??????? /// </summary>
??????? /// <returns></returns>
??????? public static bool SysInit(ref string sErr)
??????? {
??????????? try
??????????? {
??????????????? StringBuilder sSys_INC = new StringBuilder("");
??????????????? StringBuilder sPrompt_INC = new StringBuilder("Prompt.ini");
??????????????? int iSysInit = ISUP_Lib.DJISUP_InitSystem();
??????????????? int iCardInit = DJFunction.DJSys_EnableCard(sSys_INC, sPrompt_INC);
??????????????? bool iPromptInit = DJFunction.DJSys_EnableDtmfSend();
??????????????? if (iSysInit == 1)
??????????????? {
??????????????????? if (iCardInit == 0)
??????????????????? {
??????????????????????? if (iPromptInit)
??????????????????????? {
??????????????????????????? return true;
??????????????????????? }
??????????????????????? else
??????????????????????? {
??????????????????????????? sErr = "未能加載聲音文件" + iPromptInit.ToString();
??????????????????????????? return false;
??????????????????????? }
??????????????????? }
??????????????????? else
??????????????????? {
??????????????????????? sErr = iCardInit.ToString();
??????????????????????? return false;
??????????????????? }
??????????????? }
??????????????? else
??????????????? {
??????????????????? sErr = iSysInit.ToString();
??????????????????? return false;
??????????????? }
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? sErr = ex.Message;
??????????? }
??????????? return false;
??????? }
??????? /**//// <summary>
??????? /// 退出系統
??????? /// </summary>
??????? public static void SysExit()
??????? {
??????????? DJFunction.DJSys_DisableCard();
??????????? ISUP_Lib.DJISUP_ExitSystem();
??????? }
??????? #endregion
??????? 中繼通道操作#region 中繼通道操作
??????? /**//// <summary>
??????? /// 獲取中繼通道總數
??????? /// </summary>
??????? /// <returns></returns>
??????? public static int iTrkTotal()
??????? {
??????????? return DJFunction.DJTrk_GetTotalTrunkNum();
??????? }
??????? /**//// <summary>
??????? /// 信道狀態;
??????? /// </summary>
??????? /// <param name="PCM_NO"></param>
??????? /// <param name="Relay_NO"></param>
??????? /// <returns></returns>
??????? public static int iRaleyStetes(byte PCM_NO, byte Relay_NO)
??????? {
??????????? return ISUP_Lib.DJISUP_GetChnState(PCM_NO, Relay_NO);
??????? }
??????? /**//// <summary>
??????? /// 循環刷新緩存;
??????? /// </summary>
??????? public static void Push_GerEvent()
??????? {
??????????? try
??????????? {
??????????????? ISUP_Lib.DJISUP_GetEvent();
??????????????? DJFunction.DJSys_PushPlay();
??????????? }
??????????? catch(Exception Ex)
??????????? {
??????????????
??????????? }
??????? }
??????? /**//// <summary>
??????? /// 獲得中繼號
??????? /// </summary>
??????? /// <param name="iTrunkID"></param>
??????? /// <returns></returns>
??????? public static int iPCMID(int iTrunkID)
??????? {
??????????? return DJFunction.DJTrk_GetPcmID(iTrunkID);
??????? }
??????? /**//// <summary>
??????? /// 被叫號碼
??????? /// </summary>
??????? /// <param name="PCM_NO"></param>
??????? /// <param name="Relay_NO"></param>
??????? /// <returns></returns>
??????? public static TC_INI_TYPE GetCallNum(int PCM_NO, int Relay_NO)
??????? {
??????????? TC_INI_TYPE sReVal = new TC_INI_TYPE();
??????????? ISUP_Lib.DJISUP_GetCalleeNum((byte)PCM_NO, (byte)Relay_NO, ref sReVal);
??????????? return sReVal;
??????? }
??????? /**//// <summary>
??????? /// 主叫號碼
??????? /// </summary>
??????? /// <param name="PCM_NO"></param>
??????? /// <param name="Relay_NO"></param>
??????? /// <returns></returns>
??????? public static TC_INI_TYPE GetCallerNum(int PCM_NO, int Relay_NO)
??????? {
??????????? TC_INI_TYPE sReVal = new TC_INI_TYPE();
??????????? ISUP_Lib.DJISUP_GetCallerNum((byte)PCM_NO, (byte)Relay_NO, ref sReVal);
??????????? return sReVal;
??????? }
??????? /**//// <summary>
??????? /// 獲取用戶按鍵
??????? /// </summary>
??????? /// <param name="Relay_NO"></param>
??????? /// <returns></returns>
??????? public static StringBuilder GetUserKeyPress(int Relay_NO)
??????? {
??????????? return ISUP_Lib.DJTrk_GetDtmfCode(Relay_NO);
??????? }
??????? /**//// <summary>
??????? /// 設置中繼信道的狀態;
??????? /// </summary>
??????? /// <param name="iTrunkID"></param>
??????? /// <param name="States"></param>
??????? public static void SetRelayStates(int iTrunkID, int States)
??????? {
??????????? ISUP_Lib.DJISUP_SetChnState(((byte)(iTrunkID / 30)), ((byte)(iTrunkID % 30)), (byte)States);
??????? }
??????? /**//// <summary>
??????? /// 呼出
??????? /// </summary>
??????? /// <param name="iTrunkID"></param>
??????? /// <param name="CalleeNum"></param>
??????? /// <param name="CallerNum"></param>
??????? /// <returns></returns>
??????? public static bool bCallOut(int iTrunkID, string CalleeNum, string CallerNum, ref string sErr)
??????? {
??????????? StringBuilder Callee = new StringBuilder(CallerNum);
??????????? StringBuilder Caller = new StringBuilder(CalleeNum);
??????????? if (iTrunkID != -1)
??????????? {
??????????????? bool bRel = ISUP_Lib.DJISUP_Callout(iTrunkID / 30, iTrunkID % 30, ref Callee, ref Caller);
??????????????? //sErr = Callee.ToString() + "||" + Caller.ToString()+"||"+iTrunkID.ToString();
??????????????? return bRel;
??????????? }
??????????? else
??????????? {
??????????????? sErr = "NaN";
??????????????? return false;
??????????? }
??????? }
??????? /**//// <summary>
??????? /// string
??????? /// </summary>
??????? /// <param name="iTrunkID"></param>
??????? /// <param name="CalleeNum"></param>
??????? /// <param name="CallerNum"></param>
??????? /// <returns></returns>
??????? public static bool bCallOut(int iTrunkID, string CalleeNum, string CallerNum)
??????? {
??????????? char[] telNum = new char[120];
??????????? PR p = new PR();
??????????? p.TelarrChar = telNum;
??????????? telNum = CalleeNum.ToCharArray();
??????????? byte[] _telNum = new byte[120];
??????????? _telNum = Encoding.ASCII.GetBytes(telNum);
??????????? char[] CallNum = new char[120];
??????????? CallNum = CallerNum.ToCharArray();
??????????? byte[] _CallNum = new byte[120];
??????????? p.CallarrChar = CallNum;
??????????? _CallNum = Encoding.ASCII.GetBytes(CallerNum);
??????????? if (iTrunkID != -1)
??????????? {
??????????????? return ISUP_Lib.DJISUP_Callout(iTrunkID / 30, iTrunkID % 30, ref CalleeNum, ref CallerNum);
??????????? }
??????????? else
??????????? {
??????????????? return false;
??????????? }
??????? }
??????? /**//// <summary>
??????? /// byte][
??????? /// </summary>
??????? /// <param name="iTrunkID"></param>
??????? /// <param name="CalleeNum"></param>
??????? /// <param name="CallerNum"></param>
??????? /// <returns></returns>
??????? public static bool bCallOut(int iTrunkID, byte[] CalleeNum, byte[] CallerNum)
??????? {
??????????? unsafe
??????????? {
??????????????? if (iTrunkID != -1)
??????????????? {
??????????????????? return ISUP_Lib.DJISUP_Callout(iTrunkID / 30, iTrunkID % 30, CalleeNum, CallerNum);
??????????????? }
??????????????? else
??????????????? {
??????????????????? return false;
??????????????? }
??????????? }
??????? }
??????? /**//// <summary>
??????? /// char *
??????? /// </summary>
??????? /// <param name="iTrunkID"></param>
??????? /// <param name="calleeNum"></param>
??????? /// <param name="callerNum"></param>
??????? /// <returns></returns>
??????? public static unsafe bool bCallOut(int iTrunkID, StringBuilder calleeNum, StringBuilder callerNum)
??????? {
??????????? unsafe
??????????? {
??????????????? if (iTrunkID != -1)
??????????????? {
??????????????????? return ISUP_Lib.DJISUP_Callout(iTrunkID / 30, iTrunkID % 30, calleeNum, callerNum);
??????????????? }
??????????????? else
??????????????? {
??????????????????? return false;
??????????????? }
??????????? }
??????? }
總結
以上是生活随笔為你收集整理的C#实现IVR(基于东进的语音卡)-1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 52单片机使用T2串口通信
- 下一篇: Axure使用动态面板制作轮播图