ACD solution based on Askozia

Introduction

Askozia with the Call Flow Editor (CFE) offers an ACD solution as an alternative to the SipX/openUC integrated ACD solutions.

Main Features of the Askozia ACD system:

  • Graphical design of ACD queues
  • Unlimited number of queues and agents
  • Different type of agents (static, dynamic)
  • Many call patterns (all at the same time, least recently called, fewest calls, random, one after another, round robin with memory)
  • Many useful queue parameters like drop time, repeated announcements, wrap-up time, agent ring time (till next phone will ring)
  • Custom greetings, regular announcements, music on hold
  • Time-based routing, load-based (number of calls waiting in the queue) routing, pin authentication e.g. for special hotlines, text2speech engine, dtmf menues, call-recording and sending of records by mail, different languages, starting bash scripts on queue events and much more.

 

 

This guide will describe a way to connect Askozia as an ACD application system to a SipX/openUC PBX. To have all the features described here you need a SBC (Session Border Controller). The configuration description is based on a Patton Smartnode Gateway that was configured to act as a SBC. This gateway is often used for PSTN connectivity. Thus it is already installed on most systems and can alongside (if no transcoding between codecs) handle the SBC function for the ACD application. Other SBCs may work too (ACME, Karoo, Audiocodes Mediant etc.) but have not been tested yet. They have to be compatible to SipX (PBX side) and Asterisk (ACD application side).

This scenario describes basic configuration of call queues, static agents and dynamic agents including scripts to show the status of acd agents on Polycom phones. It is not intended to be a complete guide. But it should be enough to lead you on the right track.

Architecture

The following illustration shows how Askozia is connect to the SipX PBX and which ways a call to a queue is taking.

 

Installation

The configuration steps expect that you have a running Askozia box with the call flow editor that is reachable by its IP address or domain. The installation is pretty simple:

  • Boot from the image
  • Enter destination device for the installation
  • Configure IP parameters

It also expects that you have a running SipX / OpenUC installation. The steps to get a running Sipx are described in other wiki articles.

It also expects that you have a Patton Smartnode Gateway (for other SBCs you have to adapt the configuration steps).

Configuration

SBC configuration

We will start with the configuration of the SBC because it is a transparent gateway between SipX and Askozia and normaly does not have to be touched again. It will simply route all calls from SipX to Askozia and from Askozia to SipX.It uses two SIP interfaces. One for SIP communication with SipX. The other with SIP communication with Askozia. This examples uses port 5080 to communicate with SipX and 5090 to communicate with Askozia.

 

 

  • Add SIP Gateway on SipX side that uses a free SIP port to communicate with SipX
context sip-gateway GW_YOURCOMPANY_SBC
  interface IF_YOURCOMPANY_SBC
    bind interface WAN context router port 5080

 

  • Configure the location service for the gateway that has the domain of your SipX system and a identity-group that allows inbound and outbound calls
location-service LOC_SRV_SIP
  domain 1 voip.yourcompany.com 5060
 
  identity-group default
    call outbound
      use profile tone-set default
      use profile voip default
      use profile sip default
      preferred-transport-protocol udp
      invite-transaction-timeout 2
      non-invite-transaction-timeout 5
 
    call inbound
      use profile tone-set default
      use profile voip default
      use profile sip default

 

  • Add a SIP interface for the communication with your SipX
interface sip IF_YOURCOMPANY_SBC
  bind context sip-gateway GW_YOURCOMPANY_SBC
  route call dest-interface IF_ASKOZIA
  remote voip.yourcompany.com
  early-disconnect
  call-reroute accept
  call-reroute emit
  address-translation outgoing-call from-header user-part call host-part fix voip.yourcompany.com 5080
  address-translation outgoing-call to-header user-part call host-part fix voip.yourcompany.com
  use profile voip ACD-SBC

 

  • Configure a voip profile (this is to avoid transcoding which needs channels on patton gateways.)
profile voip ACD-SBC
  codec 1 g711alaw64k rx-length 20 tx-length 20
  dtmf-relay
  rtp flash-hook-relay rtp rtp traffic-class local-default

 

  • Add SIP Gateway on Askozia side that uses a free SIP port to communicate with Askozia
context sip-gateway GW_ASKOZIA
 
     interface IF_ASKOZIA
       bind interface WAN context router port 5090

 

  • Configure the location service for the gateway that has the domain of your Askozia system and a identity-group that allows inbound and outbound calls
location-service LOC_SRV_ASKOZIA
  domain 1 askoziaIP 5060
 
  identity-group default
    call outbound
      use profile tone-set default
      use profile voip ACD-SBC
      use profile sip default
      preferred-transport-protocol udp
      
    call inbound

 

  • Add a SIP interface for the communication with your SipX (host-part from header ip of the SBC, host-part to header ip of the Askozia box)
interface sip IF_ASKOZIA
   bind context sip-gateway GW_ASKOZIA
   route call dest-interface IF_YOURCOMPANY_SBC
   remote askoziaIP 5060
   early-disconnect
   address-translation outgoing-call from-header user-part call host-part fix gateWayIP 5090
   address-translation outgoing-call to-header user-part call host-part fix askoziaIP 5060
   use profile voip ACD-SBC

 

Askozia Configuration

We have to configure four things:

  • Virtual Phones
  • Queues
  • Provider
  • Dial Plan Applications to login/logout users

 

  • Add "phones" for all SipX extensions that should be acd agents
    • Number: The extension of the agent at SipX
    • CallerID: Same as the number
    • Ring Length: indefinitely
    • Provider: SIP URI
    • Dialstring: Number@ProviderContext (to get the providerContext press ESC in the web-ui, at console type "cat /etc/asterisk/extensions.conf", Search for the Name of your provider Name and take the identifier in the brackets below the line "; outgoing provider : Your provider name"

  • Add queues (Dialplan, Call Flow Editor)
    • See screenshot
    • Add Start, Answer, Queue, Upload Media Files and configure Queue parameters. For static agents add queue member
  • Add a provider
    • Name: Whatever you like
    • Host: IP of your SBC
    • Port: SBC SIP Port for communication with Askozia (5090 in this example)
    • Incoming Extensions: All destination numbers that can be called from the openUC at the Askozia system (e.g. queue numbers, login numbers for agents)
    • Codecs: Just the codec you configured in the SBC to avoid transcoding

  • Add Dial Plan Applications for login/logout of agents
    • For each queue and agent one login application is necessary

1,Answer()
n,GotoIf($["${DB(AGENTONLINE/${EXTEN})}" = "1"]?
online:offline)
n(online),Set(DB(AGENTONLINE/${EXTEN})=0)
n,RemoveQueueMember(CALLFLOW-17152790674fec1bc8139a5-QUEUE-3,SIP/401@SIP-PROVIDER-13804556994f58c906819d8)
n,Set(DEVICE_STATE(Custom:agent${EXTEN})=NOT_INUSE)
n,Playback(de-activated)
n,Hangup()
n(offline),Set(DB(AGENTONLINE/${EXTEN})=1)
n,AddQueueMember(CALLFLOW-17152790674fec1bc8139a5-QUEUE-3,SIP/401@SIP-PROVIDER-13804556994f58c906819d8)
n,Set(DEVICE_STATE(Custom:agent${EXTEN})=INUSE)
n,Playback(activated)
n,Hangup()

 

    • In each application you have to replace the agent extension and Callflow Queue ID in RemoveQueueMember and AddQueueMember
    • The callflow queue id is like the providerContext in the extensions.conf. Press ESC in the web-ui, at console type "cat /etc/asterisk/extensions.conf", Search for the Name of your Callflow and take the identifier of the queue from the next line with QueueLog under the Callflow identifier

SipX Configuration

  • Create an unmanaged Gateway with configured to the IP of your SBC an the port you choose for Sip communication between SipX and SBC (e.g. 5080).
  • Add a custom dial rule and configure all numbers you want to route to your ACD system under dialed number. Select your SBC as the gateway.
  • If you have dynamic agents you may want to put the login/logout extensions on a speed-dial key of your phone.

Advanced Configuration

Lets say there is an ACD agent (extension 130) that is not statically configured for a queue. When he starts working, he is logging in using a speeddial and when he stops working he is logging of again.  The agent is using a Polycom phone and you want to show if he is logged in on the screen of the phone. For this function you need an http server with php around. You may also install php on your SipX system and use that one.

You have to place the following php script on your webserver and replace the IP and the password in the URL call to the ACD system. You also have to place two images on the webserver. On that is showing logged out and the other showing logged in. The example script delivers an image suitable for Polycom Soundpoint IP 450 phones.

 

<?php
  echo '<html><body>';
  $id=$_GET["id"];
  $handle=fopen("
http://statistic:password@10.99.10.14/cfe/wallboard/get_queue_status.php?agentid=$id", "r");
  if($handle)
  {
    while(!feof($handle))
    {
      $status=fgets($handle,1024);
    }
  }
  if($status==1)
  {
    $loggedin= true;
  }
  else
  {
    $loggedin= false;
  }
  if($loggedin == true)
  {
    echo '<img src="450on.bmp" height="72" width="171"/>';
  }
  else
  {
    echo '<img src="450off.bmp" height="72" width="171"/>';
  }
  echo '</body></html>';
?>

 

You can test the script using your browser. Replace the id with the login extension you chose for your agent (e.g. 7130 for agent 130).

If that works you can take step two:

  • Go on to the phone you want to configure on your SipX system.
  • Open the Microbrowser Tab.
  • Put the link with the appropriate id into the Field "idleDisplay home" and set the refresh time to 15 seconds.

 

Wallboard

Askozia lets you monitor your call queues. In the callflow editor you can click the wrench of a queue element to access the queue settings. Here is a link to the wallboard that shows the status and statistics of the queue.