TAPI 3.0事件未引发

时间:2018-11-14 12:24:06

标签: c# events event-handling notifyicon tapi

我是C#的菜鸟,所以请对不起我的编码不好。 我正在尝试使该应用程序在发生通话时获取呼叫者的电话号码,并将其用于从CRM中获取信息,然后,它从NotifyIcon创建一个Balloon,以显示有关呼叫者,召集者。 CRM连接和按电话搜索的电话都可以正常工作,对于NotifyIcon来说也一样,但是所有TAPI部分都无法正常工作。当我尝试用电话呼叫办公室Zoiper5号码时,没有任何事件发生。

这是TAPI所在的类:

using System;
using System.Windows.Forms;
using TAPI3Lib;


namespace CallHelper
{
    class TapiApplication : ApplicationContext
    {
        private static NLog.Logger logger = 
        NLog.LogManager.GetCurrentClassLogger();
        private TAPIClass tapi;
        private string number;
        private Notification notification;
        private ITAddress address;

        public TapiApplication()
        {
            try
            {
                tapi = new TAPIClass();
                tapi.Initialize();
                //Notification.cs : handle the NotifyIcon 
                notification = new Notification();

                tapi.ITTAPIEventNotification_Event_Event += new 
         ITTAPIEventNotification_EventEventHandler(callNotificationHandler);
                tapi.EventFilter = (int) (TAPI_EVENT.TE_CALLNOTIFICATION);
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message);
            }
        }
        private void callNotificationHandler(TAPI_EVENT TapiEvent, object 
pEvent)
        {
            try
            {
                ITCallNotificationEvent cne = pEvent as ITCallNotificationEvent;
                number = cne.Call.get_CallInfoString(CALLINFO_STRING.CIS_CALLEDIDNUMBER);
                //creates the balloon containing the information of the caller
                notification.showBalloon(number);
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message);
                tapi.Shutdown();
            }
        }
     }
}

我真的不知道该在哪里搜索;我在SOF和其他站点上读过许多文章,谈论的几乎是同一件事,但是我仍然没有解决。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

问题解决了。我缺少初始化的一部分。在来电事件中,您必须已初始化要接收通知的线路,如此处ITTAPI::RegisterCallNotifications method所示 您可以使用

tapi.RegisterCallNotifications(address, true, true, TapiConstants.TAPIMEDIATYPE_AUDIO, 2);

您可以选择一个ITAddress,也可以选择tapi.Address as ITCollection中的所有地址,并为每个地址进行RegisterCallNotifications。在第一种情况下,只有当传入的呼叫指向您指定的地址行时,您才会收到通知;在第二种情况下,只要该地址中的任何呼叫都将收到通知。

这个示例项目对我有很多帮助: TAPI 3.0 Application development using C#.NET

答案 1 :(得分:0)

我不确定您是否正在注册想要的活动。我建议使用在https://github.com/markjulmar/itapi3中找到的Julmar Tapi 3.0 .Net包装器。使用此包装器初始化Tapi时,它将注册所有事件,并查找所有可用设备。