About

The plugin provides integration with Asterisk PBX. The application’s users can occupy numbers as operators of a call-center and process incoming calls.

Setup

PBX

FreePBX

FreePBX is an web-based shell for Asterisk PBX, allowing to configure it using UI.

Asterisk

Asterisk configuration files are typically located in /etc/asterisk directory. The instruction below was produced for version 21.5.0.

CLI

To apply any changes run the CLI:

asterisk -RvvvvvvvvvvT

And reload affected modules:

asterisk*CLI> pjsip reload

Or the whole PBX:

asterisk*CLI> core reload

Use the command to obtain help:

asterisk*CLI> help
AMI

In file manager.conf define AMI settings for connection from the Plugin side.

[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0

[crm]
secret = <amiSecret>
deny=0.0.0.0/0.0.0.0
; allowed networks with masks
permit=192.168.0.0/255.255.0.0
permit=127.0.0.1/255.255.255.0
read = call
writetimeout = 5000
Debug

Use sngrep utility to capture SIP traffic.

sngrep

SIP Clients

The clients connect to Asterisk server and used as phone devices.

Client and Platforms Configuration

https://www.linphone.org/en/getting-started iOS, Android, GNU/Linux, macOS, Windows

Popup menu Edit Account

Plugin

asterisk:amiManager.{@inc:cnt}.messageTypeId=<typeId>
asterisk:amiManager.{@cnt}.host=<host>
asterisk:amiManager.{@cnt}.login=crm
asterisk:amiManager.{@cnt}.pswd=<amiSecret>
# optional
# change default AMI port
#asterisk:amiManager.{@cnt}.port=5038
# speeds connection process up or solves problem with undetectable version
#asterisk:amiManager.{@cnt}.version=<version>
# redefinition of listener, the custom class has to extend the defined below
#asterisk:amiManager.{@cnt}.listenerClass=<listenerClass>

Where:

Example:

asterisk:amiManager.{@inc:cnt}.messageTypeId=1
asterisk:amiManager.{@cnt}.host=192.168.0.10
asterisk:amiManager.{@cnt}.login=crm
asterisk:amiManager.{@cnt}.pswd=234567

Outgoing Calls

Calling number for Outgoing Calls can be adapted using JEXL expression, assigned for message type Call with expressionOutNumberPreprocess key. To the JEXL context passed the following variables:

Sample of such a script, appending calling prefixes depends on some list process parameter value.

messageType.50.expressionOutNumberPreprocess=<<END
    prefix = null;

    operator = pp.listValueIds(68);
    if (1 =~ operator)
        prefix = "084";
    else if (2 =~ operator)
        prefix = "056";

    if (prefix) {
        prefix = prefix + "7";

        log.debug("prefix: " + prefix + "; value: " + value);

        for (item : value.getItemList()) {
            phone = item.getPhone();
            if (phone.length() == 11)
                item.setPhone(prefix + phone.substring(1));
        }
    }
END

Debug

Incoming API events are written down to log/bgerp.debug.log file. The plugin catches NewStateEvent like this:

01-24/15:16:49 DEBUG [Asterisk-Java ManagerConnection-216-Reader-0:AsyncEventPump] AmiEventListener - AMI event: org.asteriskjava.manager.event.NewStateEvent[dateReceived='Fri Jan 24 15:16:49 ALMT 2025',privilege='call,all',linkedid='1737713805.909',server=null,calleridname=null,channel='PJSIP/114-000001ec',language='ru',exten='s',calleridnum='114',context='external-context',state='Up',callerid='114',connectedlinenum='8707xxxxxxxx',uniqueid='1737713805.923',timestamp=null,channelstatedesc='Up',systemname=null,connectedlinename=null,sequencenumber=null,priority='1',channelstate='6',accountcode='',systemHashcode=1996251948]

Fields connectedlinenum is treated as FROM and callerid as TO number respectively.

Output of asterisk-java can be enabled in logger configuration.

# for debugging library
log4j.logger.org.asteriskjava=DEBUG, filed

Usage

Number Occupation

In Messages tool user can occupy an internal SIP number, used by him for connection to Asterisk. The offered number can be configured and even automatically occupied on user login.

number occupy

If the wanted number is already used by someone else, the confirmation dialog has shown.

number occupy confirm

For the user, whose number was taken, sent an information news about.

number occupied news

Successfully occupied number does look so. The Release button should be used for releasing the number.

number occupied

Process Incoming

After occupation a number by a user, all the accepted calls there must be registered as messages and opened for processing.

incoming processing

To simulate such an incoming call from an arbitrary number, can be used Test button.

incoming call test
The test area can be hidden by disabling Test incoming call action in user permissions.

Outgoing Calls

On hover mouse pointer over param phone values the plugin shows popup menu for making outgoing calls.

outgoing call popup
The popup menu isn’t shown if parameters were edited after opening process, for this case refresh the process card.

The calls itself are passed to OS application with tel: link.

outgoing call app

If the current user’s number is occupied, once a call being responded, it appears in the Message tab of the process.

outgoing call