README.TXT

TAPI ACD Samples 
=======================================================================
ACDSMPL and ACDCLNT implement a simple ACD call center. The purpose of
these samples is to highlight some of the new call center features of
TAPI 2.0. This document will give an overview of some of the design
details of these two applications.

ACDSMPL
=======
ACDSMPL is the ACD server application. It keeps track of groups and
agents, When calls come in on a group s line, ACDSMPL looks for an
agent to transfer the call to. It also keeps track of agent state information.

Groups
------
In the sample, a group corresponds to a single address on a line
device. When a call arrives on that address, the ACD server will look
for an agent that is a member of that group to take the call. A group
has a list of agents that are allowed to log into it.

Agents
------
An agent corresponds to a person that has access to a single line. They
are allowed to use any address on that line. This implementation is
limited, however, because it only has one destination address for each
agent. That is, when a call is to be transferred to the agent, there
is a single number that it will be transferred to, not a number for
each address. Most implementations should allow for a destination
address for each address.

UI
--
The UI allows adding of agents and groups. ACDSMPL automatically
writes out the agent and group information to ACDSMPL.INI when it shuts
down. The File | Open command will read in the information from that
file. See below for a description of the ini file.

The default UI view is the Group view. The Group view shows each
group, and underneath them, every agent that is allowed to log into the
group. If the agent is logged in, their user name will be in bold.
The Agent view shows each agent. This view can be used to change
information about the Agent.

Security
--------
There is no security implemented in this sample. Users are verified by
the user name that TAPI puts in each LINEPROXYREQUEST structure and the
line device. ACDSMPL compares these with the information entered in
through the ACDSMPL UI.

The new TAPI features that ACDSMPL illustrates are:

New lineOpen functionality
Handling of the LINE_PROXYREQUEST message
New lineInitializeEx functionality.
Unicode

ACDCLNT
=======
ACDCLNT is the client application that works the ACDSMPL. Using the
model from ACDSMPL, ACDCLNT assumes that the user can only have access
to one line. Upon startup, it calls lineGetAgentCaps for each device.
When it finds a line device that lineAgentCaps succeeds on, it uses that
line device.

ACDCLNT allows the user to set state, group and activity information.
Also, when a call appears on its line, ACDCLNT will allow the user to
answer that call.

The new TAPI features that ACDCLNT illustrates are:

The new Agent functions: lineGetAgentList, lineGetAgentStatus,
lineGetAgentCaps, lineGetAgentActivityList, lineSetAgentState,
lineSetAgentActivity, and lineSetAgentGroup.
Unicode
lineInitializeEx - using completion ports for callback mechanism


ACDSMPL.INI format
==================

[GENERAL] section
NumAgents=x
NumGroups=y
x and y are the number of agents and groups in this file

[GROUPS] section
GROUPx=name,perm device id,address id

x starts at 0 and increments for each group
name is the name of the group (cannot contain commas)
permanent device id is the permanent device id of the line device
associated with the group.
address id is the address id of the line that the group uses

[AGENTS] section
AGENTx=name,dest address,perm device id

x starts at 0 and increments for each group
name is the user name of the agent
dest address is the address that acdsmpl would transfer calls to that
agent
permanent device id is the permanent device id if the user's line

[GROUPx] section
each group has a section that indicates which agents are members of that group. If the agent is in the group, the entries look like
AGENTy=1 where AGENTy corresponds to the agent key in the [AGENTS] section


EXAMPLE:

[Groups]
GROUP0=First Group,786435,0
GROUP1=Second Group,786435,1
GROUP2=Third Group,786436,0

[GROUP0]
AGENT0=1
AGENT1=1

[GROUP1]
AGENT0=1

[Agents]
AGENT0=scooter,3343,786432
AGENT1=frankie,3342,786433

[General]
NumGroups=3
NumAgents=2