TAPI - ngmediaserver/NG-Media-Server GitHub Wiki

TAPI

!!! THIS DOCUMENT IS UNDER CONSTRUCTION !!!

This document provides information about the NG Media Server support for the Telephony Application Programming Interface (TAPI).

Summary

TAPI is a Microsoft API which provides Computer Telephony Integration (CTI) on Windows platforms.

Up to version 5, NG Media Server was designed as a fully featured first-party TAPI Service Provider (TSP). It was running in the context of the Microsoft TAPI service.

Starting with version 6, NG Media Server made a major leap forward and became a standalone service, with:

  • builtin VoIP support.
  • builtin Unified Communications Server (UCS) API support.
  • dual Windows and Linux support.
  • independence from Microsoft changing plans and in particular from the risk to see TAPI or the WAVE API removed from next Windows versions.

TAPI support was scheduled, but the success of the new version 6 architecture powered by scalable RESTful Web Services modified the priorities.

We are evaluating adding again TAPI support in NG Media Server 8.

Current plans (and status):

Feature Support
CSP : Low level Communication Service Providers
- CAPI ❌ unsupported (deprecated). ISDN devices with CAPI drivers is no more supported.
- VOIP ✅ supported. VoIP (SIP, WebRTC).
TAPI Line ✅ supported. Now, only 2 models are available: - 1 line capable of N calls ("NG Media Server") - N lines capable of 1 call ("NG Media Server Channel X")
TAPI Addresses ✅ supported. Now, only 1 address is available (the default one) ; there is no more multiple addresses support,in particular as there is no more multiple CAPI-Controller concept (different ISDN BRI or PRI interfaces: only VOIP)
TAPI Calls ✅ supported.
TAPI Terminals ❌ unsupported (deprecated). Instead use WebRTC: conference a SIP call with a WebRTC call, and terminate the audio locally or remotely)
TAPI Phones ❌ unsupported (deprecated). Instead use WebRTC: conference a SIP call with a WebRTC call, and terminate the audio locally or remotely)
TAPI DevConfig ✅ supported??? (1), but deprecating (and may become deprecated), instead use the REST API
TAPI Dialogs ✅ supported. Now instead of having a modal dialog, instead opens the Web based Administration UI in the web browser
TAPI Provider Caps ✅ supported. Similar (VOIP support only)
TAPI Line Caps ✅ supported. Similar (VOIP support only)
TAPI Address Caps ✅ supported. Similar (VOIP support only)
TAPI Call Status ✅ supported. Similar (VOIP support only)
TAPI DevSpecific :
- TAPI lineGetID ✅ supported (1). Similar (VOIP support only) ; warning some synchronous functions may not be available anymore
- TAPI lineDevSpecific ✅ supported (1). Similar (VOIP support only)
- TAPI lineSendUserUserInfo ✅ supported (1). Similar (VOIP support only)
WAVE Driver ✅ supported (deprecating). We encourage to move on our new builtin extended Play and Record functions.
FAX Support :
- Direct Fax ❌ unsupported, but Planned back (like as a v8.2 or through other simple extension)
- FSP ❌ unsupported (may be deprecated)
NGMS SDK ✅ supported (1). Note that comisdn_sdk.dll is now ngmedia_sdk.dll (since v5)
Other :
- NGMS Version ✅ ALPHA/BETA: CAPI and TAPI support will officially will be back in version 8 (current ALPHA/BETA in version 7.4)
- TAPI ServiceProvider ✅ Names are "NG Media", "NG Media Server", "NGMS", ... (since v5)

Configuration in Registry may become deprecated and replaced with json file. If kept, at least will be placed in HKEY_LOCAL_MACHINE\SOFTWARE\NG Media\NG Media Server instead of HKEY_LOCAL_MACHINE\SOFTWARE\ComISDN\TSP

(1) : note that current TAPI DevSpecific typically rely on binary buffers, but this MAY (2) be switched to JSON (text) in order to provide additional scalability (or we may provide an auto detection of JSON or old binary to keep backward compatibility ???). To be finalized.

Another plan is that we may enable to create a WebSocket to NG Media Server, enabling a TAPI client to view its calls using the UCS API (let's call this an "hybrid TAPI/UCS" mode), this way the TAPI client can use:

  • old TAPI for all legacy TAPI Call Control (lineMakeCall, lineDrop, ...) and Media Control (lineMonitorDigits, lineGenerateTone, ...),
  • old WAVE for all legacy Speech Services (Media Stream access)
  • New RESTfull API to access new functionalities which are not accessible (or accessible with limited access) from TAPI
    • In particular TAPI is based on a poor model for reporting detailed events to applications (except with 3 x 32 bits dwParams), whereas the UCS API enables to have notifications as detailed as requests.
    • ✅ Encrypted Call Recording
    • ✅ Multi Channel Call Recording (to have separate tracks of each participant)
    • ✅ Upcoming Play and Record files on a separate server (through HTTP Live Streaming)
    • ✅ Speech Synthesis
    • ✅ Speech Recognition
    • ✅ Speaker Verification
    • ✅ Real Time Configuration
    • ✅ Real Time Monitoring (like of Trunks Status, ...)

(2) Even switching to JSON would suffer from many limits of TAPI, like;

  • in TAPI, the only call control function that can have parameters extended is lineMakeCall (LINECALLPARAMS.DevSpecific) ; all other call control tipically can't (lineAnswer, lineDrop, ...)
  • in TAPI, additional function can be added with the DevSpecific, but this has other limits So we may not invest in trying to map new functionalities in TAPI
  • instead software editors are encouraged to start using the UCS API for using extended functions, like for Speech services (Synthesis, Recognition, Recording, Playback, ...)

With version 6, we had to face high needs for Docker containerization support,