С# — использование TAPI (в частности, TAPI3Lib) для записи продолжительности телефонных звонков

Поэтому я встроил в решение очень простую функцию TAPI, которая делает телефонный звонок на заданный номер. Я не особенно силен в коде TAPI, и мне было интересно, есть ли способ записать длину телефонного звонка с помощью функций С#? Моя первоначальная мысль заключалась в том, что если есть событие наблюдения за вызовом и завершением вызова, я мог бы запустить и завершить таймер соответственно, но документация кажется тонкой на льду.

Кто-нибудь знает, возможно ли это, и если да, то как?

Спасибо,

Райан

Текущий код:

Глобальные переменные:

TAPI3Lib.ITAddress line;

Код инициализации формы:

 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
    }

Функции ТАПИ:

        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)
        {
        }
    }

person Ryan Hargreaves    schedule 02.09.2015    source источник
comment
Какой код вы использовали для этого звонка? Было бы неплохо увидеть этот пример.   -  person Black Frog    schedule 02.09.2015
comment
Я добавлю это сейчас, это довольно просто :)   -  person Ryan Hargreaves    schedule 02.09.2015


Ответы (1)


РЕШЕНО: Итак, я немного покопался в документации и нашел способ. Существует событие под названием TAPI3Lib.TAPI_EVENT.TE_CALLSTATE, которое, если вы присоединитесь к наблюдателю, может отслеживать изменение состояния вызова. Итак, для меня это активировалось, когда телефонный звонок начинался и телефонный звонок заканчивался. Все, что мне нужно сделать, это настроить таймер с флажком и получить продолжительность телефонного звонка.

person Ryan Hargreaves    schedule 02.09.2015