【问题标题】:Programming to communicate with CUCM in C#在 C# 中编程以与 CUCM 进行通信
【发布时间】:2018-01-09 11:36:08
【问题描述】:

我想捕捉客户的来电并使用来电显示来查询 Microsoft Dynamics CRM。我花了很多时间寻找与 Cisco 服务器联系的最佳解决方案。有很多语言,如 SIP、TAPI 和 JTAPI。但无论如何我都没有用 C# 编写这个项目。

有没有办法通过 .Net 库获取此事件?

【问题讨论】:

    标签: c# .net cisco tapi cisco-jtapi


    【解决方案1】:

    您可以使用 TAPI3Lib.dll 而且你必须安装cisco tsp并配置

    这里是代码


    public partial class Form1 : Form
        {
            TAPIClass _tapi;
            ITAddress _line;
            int _cn;
    
         public Form1()
            {
                InitializeComponent();
    
                _tapi = new TAPIClass();
                _tapi.Initialize();
                foreach (ITAddress ad in (ITCollection)_tapi.Addresses)
                {
                    if (ad.AddressName.StartsWith("Cisco"))
                        cbLines.Items.Add(ad.AddressName);
                }
    
                if (cbLines.Items.Count == 0) return;
    
                _tapi.EventFilter = (int)(TAPI_EVENT.TE_CALLNOTIFICATION |
                                        TAPI_EVENT.TE_CALLINFOCHANGE |
                                        TAPI_EVENT.TE_DIGITEVENT |
                                        TAPI_EVENT.TE_PHONEEVENT |
                                        TAPI_EVENT.TE_CALLSTATE |
                                        TAPI_EVENT.TE_GENERATEEVENT |
                                        TAPI_EVENT.TE_GATHERDIGITS |
                                        TAPI_EVENT.TE_REQUEST);
                _tapi.ITTAPIEventNotification_Event_Event += tapi_ITTAPIEventNotification_Event_Event;
                cbLines.SelectedIndex = 0;
    
                button1_Click(null, null);
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (_line != null)
                {
                    _line = null;
                    if (_cn != 0) _tapi.UnregisterNotifications(_cn);
                }
    
                foreach (ITAddress ad in (ITCollection)_tapi.Addresses)
                {
                    if (ad.AddressName == cbLines.Text)
                    {
                        _line = ad;
                        break;
                    }
                }
                if (_line != null)
                {
                    _cn = _tapi.RegisterCallNotifications(_line, true, true, TapiConstants.TAPIMEDIATYPE_AUDIO, 2);
                }
            }
    
            private void Form1_FormClosed(object sender, FormClosedEventArgs e)
            {
                if (_cn != 0) _tapi.UnregisterNotifications(_cn);
            }
    
            delegate void AddLogDelegate(string text);
            private void AddLog(string text)
            {
                if (InvokeRequired)
                {
                    Invoke(new AddLogDelegate(AddLog), text);
                }
                listBox1.Items.Insert(0, text);
            }
    
            private void tapi_ITTAPIEventNotification_Event_Event(TAPI_EVENT tapiEvent, object pEvent)
            {
                try
                {
                    switch (tapiEvent)
                    {
                        case TAPI_EVENT.TE_CALLSTATE:
                            var cn2 = pEvent as ITCallStateEvent;
                            switch (cn2?.Call.CallState)
                            {
                                case CALL_STATE.CS_OFFERING:
                                    var c = cn2.Call.CallInfoString[CALLINFO_STRING.CIS_CALLERIDNUMBER];
                                    AddLog("Call Offering: " + c + " -> " + cn2.Call.Address.DialableAddress);
                                    break;
                                case CALL_STATE.CS_CONNECTED:
                                    AddLog("Call Started at " + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss.FFF"));
                                    break;
                                case CALL_STATE.CS_IDLE:
                                    break;
                                case CALL_STATE.CS_INPROGRESS:
                                    AddLog("Outgoing Call: from " + cn2.Call.Address.DialableAddress + " to " + teNumber.Text + " at " + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss.FFF"));
                                    break;
                                case CALL_STATE.CS_DISCONNECTED:
                                    AddLog("Call Finished at " + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss.FFF"));
                                    break;
                                case CALL_STATE.CS_HOLD:
                                    break;
                                case CALL_STATE.CS_QUEUED:
                                    break;
                                case null:
                                    break;
                                default:
                                    throw new ArgumentOutOfRangeException();
                            }
                            break;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                if (_line == null) return; 
                 var bc = _line.CreateCall(teNumber.Text, TapiConstants.LINEADDRESSTYPE_PHONENUMBER, TapiConstants.TAPIMEDIATYPE_AUDIO);
                bc.Connect(false);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多