首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中与CUCM通信的编程

在C#中与CUCM通信的编程
EN

Stack Overflow用户
提问于 2018-01-09 11:36:08
回答 1查看 1K关注 0票数 0

我希望捕捉到客户端的来电,并使用来电者id查询。我花了很多时间寻找最好的解决方案来联系思科服务器。有很多语言,如SIP、TAPI和JTAPI。但无论如何,我都无法用C#来编写这个项目。

有任何方法可以通过.Net库获取此事件吗?

EN

回答 1

Stack Overflow用户

发布于 2018-01-18 11:05:57

您可以使用TAPI3Lib.dll,并且必须安装cisco tsp并进行配置

这是代码

代码语言:javascript
复制
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);
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48167343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档