Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Custom Phone Applications with Asterisk

Sangoma D-Series phones support loading and running user-created custom JavaScript applications. Fore more information about creating these applications, and the endless possibilities therein, please see the Getting Started page on our Digium Phone API Center website.

Sangoma phones use version 3.2.6 of the V8 JavaScript engine

Custom applications may only be loaded onto phones running firmware version 1.3+. Phone firmware 1.3 is now generally available, For information about setting up your phone for application development, see the Getting Started page.

Custom Applications and DPMA

Custom applications are always defined with an application type of "custom" and are loaded onto phones using the phone type option application, just as a queue or status application would be loaded onto a phone. This application type is supported by DPMA, beginning with DPMA version 1.3.0.

Option

Values

Description

name

string

The name of the custom application, e.g. JasonParkerApp; also used for the idlescreen_softkey label

filename

string

A named .zip file containing the user's application, as reachable from the file_url_prefix.

autostart

yes / no

Sets whether or not the custom application should load when the phone boots, or the first time a user opens the application

key

value

Optional key=value parameters may be passed to the application

Example

In this example:

  • An application named Jason-Fancy-App is declared, it's of the Custom application type

  • The internal name of the application is jasonapp

  • The filename of the application, as retrieved from the file_url_prefix is jasonsillyapp.zip

  • The application will start when the phone boots

  • Custom keypairs for 'user=1234', 'permission=lots', 'string=hello world' are passed in

Example of custom application configuration

[Jason-Fancy-App]
type=application
application=custom
name=jasonapp
filename=jasonsillyapp.zip
autostart=yes
user=1234
permission=lots
string=hello world

Accessing custom key value pairs using a custom application

A custom application can access the custom key value pairs using app.getConfig().

When using the example configuration above, here is an example of accessing the custom key value pairs with a custom application:

Example of custom application accessing custom key value pairs

// Get all settings
var app_config = app.getConfig();
 
// Assign values of the custom keys to variables
var myuser = app_config['settings']['user'];
var mypermission = app_config['settings']['permission'];
var mystring = app_config['settings']['string'];

Interacting with Asterisk

In order to register methods with Asterisk, the DPMA provides an Action DPMAMessageRegister 
It's registered via Manager like:

Action: DPMAMessageRegister
Method: digium.qwelltest.okay

When a method has been registered, phone applications can use the pbx.request function to call that method and pass parameters into Asterisk. Here's an example:

pbx.request({
        'method' : 'digium.qwelltest.okay',
        'parameters' : {
            'account_id' : app.getAccountId()
        },
        'onSuccess' : function (p) {
            util.debug(JSON.stringify(p));
            win[0][1].label = p.result.foo.bar;
 
            var now = new Date();
 
            setTimeout(function() {request(win, visiblePredicate);}, 5001 - now.getMilliseconds());
        }.bind(this)
    });

In this example, we pass the method digium.qwelltest.okay with the parameter account_id and a fictitious value derived from app.getAccountID()

Asterisk will then receive the method from the pbx.request function and issue an Event like:

Event: DPMAMessage
RequestID: aeprox1636617668
Method: digium.qwelltest.okay
Format: JSON
Parameters: {"account_id":"abcdefg"}

To respond to this event, Message Responses can be sent back using the DPMAMessageResponse AMI Action like:

Action: DPMAMessageResponse
Response: {"foo":{"bar":"baz"}}
Format: JSON
RequestID: aeprox1636617668

Push Messages, which don't initiate as a response to an Event received from the phone application, can be sent into the phone using the DPMAMessageSend AMI Action like:

Action: DPMAMessageSend
Method: digium.qwelltest.bacon
Message: {"type" : "Hi there!" }
PhoneName: 6239

where PhoneName represents the phone context from res_digium_phone.conf.

When a notification is pushed from Asterisk into the phone, the notification can be read from the phone's application by using the digium.event.observe handler, such as:

digium.event.observe({
    'eventName' : 'digium.qwelltest.bacon',
    'callback' : function (params) {
        util.debug(JSON.stringify(params));
    }
});

Custom Applications and XML Provisioning

Custom applications are defined in the XML structure in an appconfig element. The phone will retrieve the application as directed by the element and load the settings as directed by the element.

Appconfig Element

 Appconfig Element Example

Option

Values

Description

id

string

The named identifier for the application

network_id

string

Optional. The id of a network, defined in the "networks" element

url: Child Element of <appconfig>

Option

Values

Description

url

URL string

Sets the URL path used to retrieve the application

md5

md5 sum

Optional. The md5 sum of the file to be retrieved

settings: Child Element of <appconfig>

Options

Values

Description

string

string, integer

User-defined key-pair values that are passed to the application and can be used by it.

auto_start: Child Element of <appconfig>

If the auto_start element is present, the application will load when the phone is booted. If the element is not present, the application will only load when the user manually starts the application through the applications menu.

Custom Applications and FreePBX

Custom applications can be loaded onto Sangoma phones within FreePBX using the "Custom" applications sub-tab of the "Applications" tab of the Sangoma phones FreePBX configuration utility.  For details on this, please see this wiki page.

Frequently Asked Questions (FAQ)

Q: Is there a developer walkthrough video for the Phone API?

A: Yes.  Please see - http://www.youtube.com/watch?v=41OCM3zwoiM

Q: Is there a place where I can list my app or search for others' apps?

A: Yes.  Apps can be listed on the Asterisk Exchange at http://www.asteriskexchange.com/listings/category/82

Q: Are any tools or examples available on Github?

A: Yes.  Tools and example may be found on Git hub at https://github.com/digium/digium-phone-apps

  • No labels