[Asterisk-Users] CTI interface(s) for Asterisk? [REALLY LONG MESSAGE - SORRY]

Steven M. Sokol ssokol at sokol-associates.com
Fri Oct 24 09:30:57 MST 2003


Hi.  I have just finished Googling the list archive for information on
doing CTI with Asterisk.  I never found a definitive "here's how it's
done" answer, but I did see a number of postings indicating that it was
at least a possibility.  (For those of you who already know about CTI,
please pardon the pedantic introductions to each section.)

Here are my questions:

[First Party CTI (User Control Of Their Phone)]

	First party CTI allows application software on the
user's/agent's desktop to control the functions of their telephone, and
to receive call-related information with each call.  Most of the time it
is done by establishing a connection between the phone and the desktop
directly.  Sometimes it is done by establishing a connection to the PBX
and telling it that you are the desktop UA for station X.  In either
case it allows users to place calls from within their PIM, and to pop
screens based on caller information (generally ANI/Caller*ID).

Questions:

1.  Is there any generally accepted way of doing First Party Call
Control for SIP hard-phones?  Do we configure a "pseudo-soft-phone" to
be the initial recipient of the call (thus grabbing all data related to
the call) then deflecting the call to the actual hard-phone URI?  If so,
how do we monitor the "real" agent/station status?

In the dreadful old world of proprietary PBXs/Phones, the phone
manufacturer sometimes provides a 1st Party CTI interface in the form of
a serial or USB connection on the phone, and a CTI driver (TAPI, JTAPI,
TSAPI, CCXML, etc.) that runs on the desktop.  Since we don't
necessarily want to go pestering Grandstream, Snom, Cisco, etc. for CTI
interfaces, is there a GOOD, ROBUST, SCALABLE way of doing this
ourselves?

2.  How about 1st party zaptel (analogue) CTI?  Since this is much more
along the lines traditional PBX connections, is there a good simple way
to add Out-Of-Band CTI for these phones?  Perhaps some kind of CCXML i/o
gateway built into the code in pbx.c?

[Third Party CTI (Global Monitoring/3rd Party Call Control)]

	Third party differs from first party in that an application has
access to more than a single user agent device.  3rd party control
allows for enhanced call routing based on ANI/Caller*ID, DNIS/DID,
digits collected by an IVR, and also based on call center staffing and
load (and probably lots of other factors).  It provides omniscience (a
god's eye view of the PBX) and omnipotence (a god's ability to control
anything going on within the PBX).

	In the rotten old world of Avaya (my background) we have several
third party CTI models to pick from.  The most robust is ASAI on the
Definity (MultiVantage) platforms.  It allows you to:  A) Grab a
snapshot of a device, queue, or other entity; B) request and receive
status monitoring information (events) about an entity; and C) 3rd party
domain control (force a station off hook, move calls between queues,
move agents from group to group, log stations into and out of groups,
silently bridge calls to recording devices, place predictive calls and
direct them to queues, etc).

	The ASAI interface is established by adding a small in-skin
computer that monitors the internal signaling channels and sends
commands across those channels to the primary call processing
application.  This separate device is needed because A) the primary
processor is underpowered and B) because the primary processor runs a
real-time tuned kernel and C) because they are the phone company and so
they can do what they like.

	This ASAI interface can be accessed directly using some very
lightweight drivers from Avaya (that cost big bucks) or by using and
ASAI-to-TSAPI bridge that converts to/from ECMA CSTA (the formal TSAPI
spec).  This bridge normally runs on yet another PC and again costs an
arm and two legs to install, plus other body parts to license and use.

Question: 

	What would it take to implement a similar (but hopefully more
robust and easier to implement) system for Asterisk?  Again I would
think something more modern (like CCXML) would be a "best case"
implementation, but there are a lot of legacy applications out there
that could be integrated with Asterisk w/o modification if we added
TSAPI and/or JTAPI and/or TAPI.

Has anyone had any conversations with Mark about the best way to add
this kind of functionality without impairing the near-real-time nature
of Asterisk?  Should this be posted to the Asterisk-Dev list instead?
Does anybody have any experience at this kind of work?

Comments please.  Sorry for the REALLY LONG post.

Cheers,

Steven





More information about the asterisk-users mailing list