[Asterisk-Users] Multitenant Call Center Setup

Waldo Rubinstein waldo at trianet.net
Fri Oct 21 01:23:55 MST 2005


Lenz,

Thanks for the response. I agree with you. However, I have a couple  
of questions:

1) How to do a fake queue_log registration
2) One of the needs I have is to be able to generate the calls  
received or made by an agent in real time. I figured I could do this  
by querying the CDR, but I was wondering how to "flag" the calls made/ 
received by the agent in such a way that I could identify them in the  
CDR. I guess I could always write a script that would insert queue  
events into a database and then I could cross query the CDR with the  
queue_log tables to figure out which was the last agent logged in on  
a particular station and match that against the dstchannel CDR  
column, but that could be hairy.

In order to address #2, I thought of doing the following (I haven't  
tried this yet):

1) Create an extension the agent would dial to log in. This extension  
could look something like:

1,AGI(get_valid_agent)
2,GotoIf($[ "${AGENT}" = "" ]?9:6)
3,DBPut(agents/${CHANNEL}=${AGENT})
4,AddQueueMember(queue_name)
5,Playback(agent-loginok)
6,Hangup()

where the AGI script will prompt the user to enter an agent id which  
it could verify against a database for this tenant, which would then  
allow me to have multiple agents 1001 (for example) for different  
tenants. CHANNEL would be a cleaned version of the regular CHANNEL  
variable with only the technology and peer name, for example, only  
SIP/1234 instead of SIP/1234-2bc7 and AGENT would be the agent id  
validated by the AGI script, for example, 1001.

2) Say my inbound calls are routed to an "incoming" context, I would  
add this to the incoming context
[incoming]
...
exten => h,1,DBGet(AGENT=agents/${BRIDGEPEER})
exten => h,2,SetAccount(${AGENT})

where BRIDGEPEER would be a cleaned version of the regular BRIDGEPEER  
variable with only the technology and peer name, for example, only  
SIP/1234 instead of SIP/1234-6a67.

This would allow me to set the Account Code in the CDR to the agent  
logged in using that station for calls distributed by the Queue  
application.

3) In the contexts that allow my agents to make outbound calls, I  
would add something like:

DBGet(AGENT=agents/${CHANNEL})
SetAccount(${AGENT})

where CHANNEL would be a cleaned version of the regular CHANNEL  
variable with only the technology and peer name, for example, only  
SIP/1234 instead of SIP/1234-92b3

This would allow me to set the Account Code in the CDR to the agent  
logged in using that station whenever outbound calls are made on that  
extension. I could even deny the station from placing outbound calls  
if AGENT is blank, meaning that no agent has logged in yet.

4) Finally, I would create an extension for an agent to log out, that  
could look like this:

RemoveQueueMember(queue_name)
DBDel(agents/${CHANNEL})
Playback(agent-loggedoff)
Hangup()

where CHANNEL would be a cleaned version of the regular CHANNEL  
variable with only the technology and peer name, for example, only  
SIP/1234 instead of SIP/1234-1f89

This would remove the entry in astDB at the same time it removed the  
station from the queue.

I haven't tried any of it but I think it could work.

Thanks,
Waldo

On Oct 21, 2005, at 3:39 AM, Lenz wrote:

>
> Hello Waldo,
> if you use AddQueueMember plus a fake queue_log registration, you  
> can tell who the agent was, not just from what terminal she was  
> connecting from. It is then possible to report who was available at  
> a certain time, or see agents logging on and off, going to pause,  
> measuring the average call length per agent, pause time, etc. If  
> you run a call center you will want these pieces of information,  
> otherwise you have no means of understanding what is going on.  
> Simply connecting to terminals is not good, because you'll usually  
> have more agents than terminals (to compensate for shifts, sick  
> leave, vacations, etc)
> Bye
> l.
>
>
> On Thu, 20 Oct 2005 17:41:31 +0200, Waldo Rubinstein  
> <waldo at trianet.net> wrote:
>
>
>> I have played with AddQueueMember and it works great. However, there
>> is one problem that I have and I hope someone can point me in the
>> right direction.
>>
>> My client's agents rotate seats. This means that if I want to track
>> calls by agent, I can't with AddQueueMember. When I look at the CDR,
>> it tells me the calls made/received by the station (regardless of
>> technology - SIP/AIX/etc). But, at any given point, I don't know
>> which agent made the call.
>>
>> In reality, even with AgentCallBackLogin I can't tell which agent
>> made or received the call. Is there a way that I can identify in the
>> CDR which agent actually received or placed a call regardless of
>> which extension he/she may be sitting on?
>>
>> Thanks,
>> Waldo
>>
>>
>
>
> -- 
> Loway Research - Home of QueueMetrics
> http://queuemetrics.loway.it
> _______________________________________________
> --Bandwidth and Colocation sponsored by Easynews.com --
>
> Asterisk-Users mailing list
> Asterisk-Users at lists.digium.com
> http://lists.digium.com/mailman/listinfo/asterisk-users
> To UNSUBSCRIBE or update options visit:
>   http://lists.digium.com/mailman/listinfo/asterisk-users
>




More information about the asterisk-users mailing list