首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# -使用TAPI (特别是TAPI3Lib)记录电话通话时长

C# -使用TAPI (特别是TAPI3Lib)记录电话通话时长
EN

Stack Overflow用户
提问于 2015-09-02 21:42:42
回答 1查看 2K关注 0票数 0

因此,我在一个解决方案中内置了一个非常基本的TAPI函数,它可以拨打一个给定号码的电话。我对TAPI代码不是特别在行,我想知道是否有任何方法可以使用c#函数来记录电话通话时长?我最初的想法是,如果有call started和call end watch事件,我可以分别启动和结束计时器,但文档似乎很少。

有没有人知道这是否可能,如果可能,是如何实现的?

谢谢,

瑞安

当前代码:

全局变量:

代码语言:javascript
复制
TAPI3Lib.ITAddress line;

表单初始化代码:

代码语言:javascript
复制
 public Outbound()
    {
        InitializeComponent();
        #region TAPI Initialize
        TAPIClass tapi = new TAPIClass();
        tapi.Initialize();
        foreach (TAPI3Lib.ITAddress ad in (tapi.Addresses as TAPI3Lib.ITCollection))
        {
            line = ad;
        }
        tapi.EventFilter = (int)(TAPI_EVENT.TE_CALLNOTIFICATION | //All events you could need, probably
        TAPI3Lib.TAPI_EVENT.TE_CALLINFOCHANGE |
        TAPI3Lib.TAPI_EVENT.TE_DIGITEVENT |
        TAPI3Lib.TAPI_EVENT.TE_PHONEEVENT |
        TAPI3Lib.TAPI_EVENT.TE_CALLSTATE |
        TAPI3Lib.TAPI_EVENT.TE_GENERATEEVENT |
        TAPI3Lib.TAPI_EVENT.TE_GATHERDIGITS |
        TAPI3Lib.TAPI_EVENT.TE_REQUEST);
        tapi.ITTAPIEventNotification_Event_Event += new TAPI3Lib.ITTAPIEventNotification_EventEventHandler(tapi_ITTAPIEventNotification_Event_Event);
        #endregion
    }

TAPI函数:

代码语言:javascript
复制
        private void btncall_Click(object sender, EventArgs e)
    {
        if (line == null) return;
        TAPI3Lib.ITBasicCallControl bc = line.CreateCall(txttelephone.Text, TAPI3Lib.TapiConstants.LINEADDRESSTYPE_PHONENUMBER, TAPI3Lib.TapiConstants.TAPIMEDIATYPE_AUDIO);
        bc.Connect(false);
    }

    private void tapi_ITTAPIEventNotification_Event_Event(TAPI_EVENT TapiEvent, object pEvent)
    {
        try
        {
            switch (TapiEvent)
            {
                case TAPI3Lib.TAPI_EVENT.TE_CALLNOTIFICATION:
                    TAPI3Lib.ITCallNotificationEvent cn = pEvent as TAPI3Lib.ITCallNotificationEvent;
                    if (cn.Call.CallState == TAPI3Lib.CALL_STATE.CS_OFFERING)
                    {
                        string c = cn.Call.get_CallInfoString(TAPI3Lib.CALLINFO_STRING.CIS_CALLERIDNUMBER);
                    }
                    break;
            }
        }
        catch (Exception ex)
        {
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2015-09-02 22:15:48

解决方法:所以我在我找到的文档上做了一些挖掘。有一个名为TAPI3Lib.TAPI_EVENT.TE_CALLSTATE的事件,如果您附加到观察者,则可以跟踪呼叫状态是否更改。所以,对我来说,当一个电话开始和一个电话结束时,它会被激活。我所要做的就是控制一个计时器,在这里设置一个标志,然后我就可以得到一个电话通话时长。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32354866

复制
相关文章

相似问题

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