asterisk / node-ari-client

Node.js client for ARI. This library is best effort with limited support.
Other
249 stars 98 forks source link
ari asterisk javascript nodejs

build status

node-ari-client

This module contains the Node.js client library for the Asterisk REST Interface. It builds upon the swagger-js library, providing an improved, Asterisk-specific API over the API generated by swagger-js.

Usage

Installation

$ npm install ari-client

API

The client exposes a connect function that can be used to connect to an instance of ARI and to configure a client with all available resources and operations.

Callbacks:

var client = require('ari-client');
client.connect(url, username, password, function (err, ari) {})

Promises:

var client = require('ari-client');
client.connect(url, username, password)
  .then(function (ari) {})
  .catch(function (err) {});

Upon connecting, a callback will be called passing a reference to a client with all available resources attached.

ari.bridges, ari.channels, ari.endpoints...

Those properties expose operations that can be performed for that given resource.

Callbacks:

ari.bridges.list(function (err, bridges) {});
ari.bridges.get({bridgeId: 'uniqueid'}, function (err, bridge) {});

Promises:

ari.bridges.list()
  .then(function (bridges) {})
  .catch(function (err) {});

ari.bridges.get({bridgeId: 'uniqueid'})
  .then(function (bridge) {})
  .catch(function (err) {});

Operations that return a resource or a list of resources expose the same operations tied to that given instance.

bridge.addChannel({channel: 'uniqueid'});

Note that the bridge id was not required since the operation was called from a resource instance. The above operation is equivalent to the following:

ari.bridges.addChannel({bridgeId: 'uniqueid', channel: 'uniqueid'});

The client also exposes functions to create new resources.

ari.Bridge(), ari.Channel(), ari.Playback(), ari.LiveRecording()

The instance returned by these functions can then be used to call a create operations in ARI.

Callbacks:

var bridge = ari.Bridge();
bridge.create(function (err, bridge) {});

Promises:

var bridge = ari.Bridge();
bridge.create()
  .then(function (bridge) {})
  .catch(function (err) {});

Note that the create operation returns an updated copy of the bridge after creation.

Using this method of resource creation, it is possible to register event listeners for a resource before it is created in ARI.

Callbacks:

var channel = ari.Channel();
channel.on('StasisStart', function (event, channel) {});
channel.on('ChannelDtmfReceived', function (event, channel) {});
channel.originate(
    {endpoint: 'PJSIP/1000', app: 'application', appArgs: 'dialed'},
    function (err, channel) {}
);

Promises:

var channel = ari.Channel();
channel.on('StasisStart', function (event, channel) {});
channel.on('ChannelDtmfReceived', function (event, channel) {});
channel.originate({endpoint: 'PJSIP/1000', app: 'application', appArgs: 'dialed'})
  .then(function (channel) {})
  .catch(function (err) {});

Some create operations require an instance be passed in for this to work.

Callbacks:

var playback = ari.Playback();
channel.play({media: 'sound:hello-world'}, playback, function (err, playback) {});

Promises:

var playback = ari.Playback();
channel.play({media: 'sound:hello-world'}, playback)
  .then(function (playback) {})
  .catch(function (err) {});

If you are using the client directly to call a create operation instead of using an instance, you will have to pass the appropriate ids as part of the options to the create operation.

Callbacks:

var playback = ari.Playback();
ari.channels.play({
  media: 'sound:hello-world',
  channelId: channel.id,
  playbackId: playback.id
}, function (err, playback) {});

Promises:

var playback = ari.Playback();
ari.channels.play({
  media: 'sound:hello-world',
  channelId: channel.id,
  playbackId: playback.id
}).then(function (playback) {}).catch(function (err) {});

Operations

The following operations are defined:

applications

filter

Filter application events types.

Callbacks:

ari.applications.filter(
  {applicationName: val},
  function (err, application) {}
);

Promises:

ari.applications.filter({
    applicationName: val
})
  .then(function (application) {})
  .catch(function (err) {});
Available Parameters
get

Get details of an application.

Callbacks:

ari.applications.get(
  {applicationName: val},
  function (err, application) {}
);

Promises:

ari.applications.get({
    applicationName: val
})
  .then(function (application) {})
  .catch(function (err) {});
Available Parameters
list

List all applications.

Callbacks:

ari.applications.list(
  function (err, applications) {}
);

Promises:

ari.applications.list()
  .then(function (applications) {})
  .catch(function (err) {});
subscribe

Subscribe an application to a event source.

Callbacks:

ari.applications.subscribe(
  {applicationName: val, eventSource: val},
  function (err, application) {}
);

Promises:

ari.applications.subscribe({
    applicationName: val,
    eventSource: val
})
  .then(function (application) {})
  .catch(function (err) {});
Available Parameters
unsubscribe

Unsubscribe an application from an event source.

Callbacks:

ari.applications.unsubscribe(
  {applicationName: val, eventSource: val},
  function (err, application) {}
);

Promises:

ari.applications.unsubscribe({
    applicationName: val,
    eventSource: val
})
  .then(function (application) {})
  .catch(function (err) {});
Available Parameters

asterisk

addLog

Adds a log channel.

Callbacks:

ari.asterisk.addLog(
  {configuration: val, logChannelName: val},
  function (err) {}
);

Promises:

ari.asterisk.addLog({
    configuration: val,
    logChannelName: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
deleteLog

Deletes a log channel.

Callbacks:

ari.asterisk.deleteLog(
  {logChannelName: val},
  function (err) {}
);

Promises:

ari.asterisk.deleteLog({
    logChannelName: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
deleteObject

Delete a dynamic configuration object.

Callbacks:

ari.asterisk.deleteObject(
  {configClass: val, id: val, objectType: val},
  function (err) {}
);

Promises:

ari.asterisk.deleteObject({
    configClass: val,
    id: val,
    objectType: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
getGlobalVar

Get the value of a global variable.

Callbacks:

ari.asterisk.getGlobalVar(
  {variable: val},
  function (err, variable) {}
);

Promises:

ari.asterisk.getGlobalVar({
    variable: val
})
  .then(function (variable) {})
  .catch(function (err) {});
Available Parameters
getInfo

Gets Asterisk system information.

Callbacks:

ari.asterisk.getInfo(
  function (err, asteriskinfo) {}
);

Promises:

ari.asterisk.getInfo()
  .then(function (asteriskinfo) {})
  .catch(function (err) {});
Available Parameters
getModule

Get Asterisk module information.

Callbacks:

ari.asterisk.getModule(
  {moduleName: val},
  function (err, module) {}
);

Promises:

ari.asterisk.getModule({
    moduleName: val
})
  .then(function (module) {})
  .catch(function (err) {});
Available Parameters
getObject

Retrieve a dynamic configuration object.

Callbacks:

ari.asterisk.getObject(
  {configClass: val, id: val, objectType: val},
  function (err, configtuples) {}
);

Promises:

ari.asterisk.getObject({
    configClass: val,
    id: val,
    objectType: val
})
  .then(function (configtuples) {})
  .catch(function (err) {});
Available Parameters
listLogChannels

Gets Asterisk log channel information.

Callbacks:

ari.asterisk.listLogChannels(
  function (err, logchannels) {}
);

Promises:

ari.asterisk.listLogChannels()
  .then(function (logchannels) {})
  .catch(function (err) {});
listModules

List Asterisk modules.

Callbacks:

ari.asterisk.listModules(
  function (err, modules) {}
);

Promises:

ari.asterisk.listModules()
  .then(function (modules) {})
  .catch(function (err) {});
loadModule

Load an Asterisk module.

Callbacks:

ari.asterisk.loadModule(
  {moduleName: val},
  function (err) {}
);

Promises:

ari.asterisk.loadModule({
    moduleName: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
ping

Response pong message.

Callbacks:

ari.asterisk.ping(
  function (err, asteriskping) {}
);

Promises:

ari.asterisk.ping()
  .then(function (asteriskping) {})
  .catch(function (err) {});
reloadModule

Reload an Asterisk module.

Callbacks:

ari.asterisk.reloadModule(
  {moduleName: val},
  function (err) {}
);

Promises:

ari.asterisk.reloadModule({
    moduleName: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
rotateLog

Rotates a log channel.

Callbacks:

ari.asterisk.rotateLog(
  {logChannelName: val},
  function (err) {}
);

Promises:

ari.asterisk.rotateLog({
    logChannelName: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
setGlobalVar

Set the value of a global variable.

Callbacks:

ari.asterisk.setGlobalVar(
  {variable: val},
  function (err) {}
);

Promises:

ari.asterisk.setGlobalVar({
    variable: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
unloadModule

Unload an Asterisk module.

Callbacks:

ari.asterisk.unloadModule(
  {moduleName: val},
  function (err) {}
);

Promises:

ari.asterisk.unloadModule({
    moduleName: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
updateObject

Create or update a dynamic configuration object.

Callbacks:

ari.asterisk.updateObject(
  {configClass: val, id: val, objectType: val},
  function (err, configtuples) {}
);

Promises:

ari.asterisk.updateObject({
    configClass: val,
    id: val,
    objectType: val
})
  .then(function (configtuples) {})
  .catch(function (err) {});
Available Parameters

bridges

addChannel

Add a channel to a bridge.

Callbacks:

ari.bridges.addChannel(
  {bridgeId: val, channel: val},
  function (err) {}
);

Promises:

ari.bridges.addChannel({
    bridgeId: val,
    channel: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
clearVideoSource

Removes any explicit video source in a multi-party mixing bridge. This operation has no effect on bridges with two or fewer participants. When no explicit video source is set, talk detection will be used to determine the active video stream.

Callbacks:

ari.bridges.clearVideoSource(
  {bridgeId: val},
  function (err) {}
);

Promises:

ari.bridges.clearVideoSource({
    bridgeId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
create

Create a new bridge.

Callbacks:

ari.bridges.create(
  function (err, bridge) {}
);

Promises:

ari.bridges.create()
  .then(function (bridge) {})
  .catch(function (err) {});
Available Parameters
createWithId

Create a new bridge or updates an existing one.

Callbacks:

ari.bridges.createWithId(
  {bridgeId: val},
  function (err, bridge) {}
);

Promises:

ari.bridges.createWithId({
    bridgeId: val
})
  .then(function (bridge) {})
  .catch(function (err) {});
Available Parameters
destroy

Shut down a bridge.

Callbacks:

ari.bridges.destroy(
  {bridgeId: val},
  function (err) {}
);

Promises:

ari.bridges.destroy({
    bridgeId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
get

Get bridge details.

Callbacks:

ari.bridges.get(
  {bridgeId: val},
  function (err, bridge) {}
);

Promises:

ari.bridges.get({
    bridgeId: val
})
  .then(function (bridge) {})
  .catch(function (err) {});
Available Parameters
list

List all active bridges in Asterisk.

Callbacks:

ari.bridges.list(
  function (err, bridges) {}
);

Promises:

ari.bridges.list()
  .then(function (bridges) {})
  .catch(function (err) {});
play

Start playback of media on a bridge.

Callbacks:

ari.bridges.play(
  {bridgeId: val, media: val},
  function (err, playback) {}
);

Promises:

ari.bridges.play({
    bridgeId: val,
    media: val
})
  .then(function (playback) {})
  .catch(function (err) {});
Available Parameters
playWithId

Start playback of media on a bridge.

Callbacks:

ari.bridges.playWithId(
  {bridgeId: val, media: val, playbackId: val},
  function (err, playback) {}
);

Promises:

ari.bridges.playWithId({
    bridgeId: val,
    media: val,
    playbackId: val
})
  .then(function (playback) {})
  .catch(function (err) {});
Available Parameters
record

Start a recording.

Callbacks:

ari.bridges.record(
  {bridgeId: val, format: val, name: val},
  function (err, liverecording) {}
);

Promises:

ari.bridges.record({
    bridgeId: val,
    format: val,
    name: val
})
  .then(function (liverecording) {})
  .catch(function (err) {});
Available Parameters
removeChannel

Remove a channel from a bridge.

Callbacks:

ari.bridges.removeChannel(
  {bridgeId: val, channel: val},
  function (err) {}
);

Promises:

ari.bridges.removeChannel({
    bridgeId: val,
    channel: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
setVideoSource

Set a channel as the video source in a multi-party mixing bridge. This operation has no effect on bridges with two or fewer participants.

Callbacks:

ari.bridges.setVideoSource(
  {bridgeId: val, channelId: val},
  function (err) {}
);

Promises:

ari.bridges.setVideoSource({
    bridgeId: val,
    channelId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
startMoh

Play music on hold to a bridge or change the MOH class that is playing.

Callbacks:

ari.bridges.startMoh(
  {bridgeId: val},
  function (err) {}
);

Promises:

ari.bridges.startMoh({
    bridgeId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
stopMoh

Stop playing music on hold to a bridge.

Callbacks:

ari.bridges.stopMoh(
  {bridgeId: val},
  function (err) {}
);

Promises:

ari.bridges.stopMoh({
    bridgeId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters

channels

answer

Answer a channel.

Callbacks:

ari.channels.answer(
  {channelId: val},
  function (err) {}
);

Promises:

ari.channels.answer({
    channelId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
continueInDialplan

Exit application; continue execution in the dialplan.

Callbacks:

ari.channels.continueInDialplan(
  {channelId: val},
  function (err) {}
);

Promises:

ari.channels.continueInDialplan({
    channelId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
create

Create channel.

Callbacks:

ari.channels.create(
  {app: val, endpoint: val},
  function (err, channel) {}
);

Promises:

ari.channels.create({
    app: val,
    endpoint: val
})
  .then(function (channel) {})
  .catch(function (err) {});
Available Parameters
dial

Dial a created channel.

Callbacks:

ari.channels.dial(
  {channelId: val},
  function (err) {}
);

Promises:

ari.channels.dial({
    channelId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
externalMedia

Start an External Media session.

Callbacks:

ari.channels.externalMedia(
  {app: val, external_host: val, format: val},
  function (err, channel) {}
);

Promises:

ari.channels.externalMedia({
    app: val,
    external_host: val,
    format: val
})
  .then(function (channel) {})
  .catch(function (err) {});
Available Parameters
get

Channel details.

Callbacks:

ari.channels.get(
  {channelId: val},
  function (err, channel) {}
);

Promises:

ari.channels.get({
    channelId: val
})
  .then(function (channel) {})
  .catch(function (err) {});
Available Parameters
getChannelVar

Get the value of a channel variable or function.

Callbacks:

ari.channels.getChannelVar(
  {channelId: val, variable: val},
  function (err, variable) {}
);

Promises:

ari.channels.getChannelVar({
    channelId: val,
    variable: val
})
  .then(function (variable) {})
  .catch(function (err) {});
Available Parameters
hangup

Delete (i.e. hangup) a channel.

Callbacks:

ari.channels.hangup(
  {channelId: val},
  function (err) {}
);

Promises:

ari.channels.hangup({
    channelId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
hold

Hold a channel.

Callbacks:

ari.channels.hold(
  {channelId: val},
  function (err) {}
);

Promises:

ari.channels.hold({
    channelId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
list

List all active channels in Asterisk.

Callbacks:

ari.channels.list(
  function (err, channels) {}
);

Promises:

ari.channels.list()
  .then(function (channels) {})
  .catch(function (err) {});
move

Move the channel from one Stasis application to another.

Callbacks:

ari.channels.move(
  {app: val, channelId: val},
  function (err) {}
);

Promises:

ari.channels.move({
    app: val,
    channelId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
mute

Mute a channel.

Callbacks:

ari.channels.mute(
  {channelId: val},
  function (err) {}
);

Promises:

ari.channels.mute({
    channelId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
originate

Create a new channel (originate).

Callbacks:

ari.channels.originate(
  {endpoint: val},
  function (err, channel) {}
);

Promises:

ari.channels.originate({
    endpoint: val
})
  .then(function (channel) {})
  .catch(function (err) {});
Available Parameters
originateWithId

Create a new channel (originate with id).

Callbacks:

ari.channels.originateWithId(
  {channelId: val, endpoint: val},
  function (err, channel) {}
);

Promises:

ari.channels.originateWithId({
    channelId: val,
    endpoint: val
})
  .then(function (channel) {})
  .catch(function (err) {});
Available Parameters
play

Start playback of media.

Callbacks:

ari.channels.play(
  {channelId: val, media: val},
  function (err, playback) {}
);

Promises:

ari.channels.play({
    channelId: val,
    media: val
})
  .then(function (playback) {})
  .catch(function (err) {});
Available Parameters
playWithId

Start playback of media and specify the playbackId.

Callbacks:

ari.channels.playWithId(
  {channelId: val, media: val, playbackId: val},
  function (err, playback) {}
);

Promises:

ari.channels.playWithId({
    channelId: val,
    media: val,
    playbackId: val
})
  .then(function (playback) {})
  .catch(function (err) {});
Available Parameters
record

Start a recording.

Callbacks:

ari.channels.record(
  {channelId: val, format: val, name: val},
  function (err, liverecording) {}
);

Promises:

ari.channels.record({
    channelId: val,
    format: val,
    name: val
})
  .then(function (liverecording) {})
  .catch(function (err) {});
Available Parameters
redirect

Redirect the channel to a different location.

Callbacks:

ari.channels.redirect(
  {channelId: val, endpoint: val},
  function (err) {}
);

Promises:

ari.channels.redirect({
    channelId: val,
    endpoint: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
ring

Indicate ringing to a channel.

Callbacks:

ari.channels.ring(
  {channelId: val},
  function (err) {}
);

Promises:

ari.channels.ring({
    channelId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
ringStop

Stop ringing indication on a channel if locally generated.

Callbacks:

ari.channels.ringStop(
  {channelId: val},
  function (err) {}
);

Promises:

ari.channels.ringStop({
    channelId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
rtpstatistics

RTP stats on a channel.

Callbacks:

ari.channels.rtpstatistics(
  {channelId: val},
  function (err, rtpstat) {}
);

Promises:

ari.channels.rtpstatistics({
    channelId: val
})
  .then(function (rtpstat) {})
  .catch(function (err) {});
Available Parameters
sendDTMF

Send provided DTMF to a given channel.

Callbacks:

ari.channels.sendDTMF(
  {channelId: val},
  function (err) {}
);

Promises:

ari.channels.sendDTMF({
    channelId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
setChannelVar

Set the value of a channel variable or function.

Callbacks:

ari.channels.setChannelVar(
  {channelId: val, variable: val},
  function (err) {}
);

Promises:

ari.channels.setChannelVar({
    channelId: val,
    variable: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
snoopChannel

Start snooping.

Callbacks:

ari.channels.snoopChannel(
  {app: val, channelId: val},
  function (err, channel) {}
);

Promises:

ari.channels.snoopChannel({
    app: val,
    channelId: val
})
  .then(function (channel) {})
  .catch(function (err) {});
Available Parameters
snoopChannelWithId

Start snooping.

Callbacks:

ari.channels.snoopChannelWithId(
  {app: val, channelId: val, snoopId: val},
  function (err, channel) {}
);

Promises:

ari.channels.snoopChannelWithId({
    app: val,
    channelId: val,
    snoopId: val
})
  .then(function (channel) {})
  .catch(function (err) {});
Available Parameters
startMoh

Play music on hold to a channel.

Callbacks:

ari.channels.startMoh(
  {channelId: val},
  function (err) {}
);

Promises:

ari.channels.startMoh({
    channelId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
startSilence

Play silence to a channel.

Callbacks:

ari.channels.startSilence(
  {channelId: val},
  function (err) {}
);

Promises:

ari.channels.startSilence({
    channelId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
stopMoh

Stop playing music on hold to a channel.

Callbacks:

ari.channels.stopMoh(
  {channelId: val},
  function (err) {}
);

Promises:

ari.channels.stopMoh({
    channelId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
stopSilence

Stop playing silence to a channel.

Callbacks:

ari.channels.stopSilence(
  {channelId: val},
  function (err) {}
);

Promises:

ari.channels.stopSilence({
    channelId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
unhold

Remove a channel from hold.

Callbacks:

ari.channels.unhold(
  {channelId: val},
  function (err) {}
);

Promises:

ari.channels.unhold({
    channelId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
unmute

Unmute a channel.

Callbacks:

ari.channels.unmute(
  {channelId: val},
  function (err) {}
);

Promises:

ari.channels.unmute({
    channelId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters

deviceStates

delete

Destroy a device-state controlled by ARI.

Callbacks:

ari.deviceStates.delete(
  {deviceName: val},
  function (err) {}
);

Promises:

ari.deviceStates.delete({
    deviceName: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
get

Retrieve the current state of a device.

Callbacks:

ari.deviceStates.get(
  {deviceName: val},
  function (err, devicestate) {}
);

Promises:

ari.deviceStates.get({
    deviceName: val
})
  .then(function (devicestate) {})
  .catch(function (err) {});
Available Parameters
list

List all ARI controlled device states.

Callbacks:

ari.deviceStates.list(
  function (err, devicestates) {}
);

Promises:

ari.deviceStates.list()
  .then(function (devicestates) {})
  .catch(function (err) {});
update

Change the state of a device controlled by ARI. (Note - implicitly creates the device state).

Callbacks:

ari.deviceStates.update(
  {deviceName: val, deviceState: val},
  function (err) {}
);

Promises:

ari.deviceStates.update({
    deviceName: val,
    deviceState: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters

endpoints

get

Details for an endpoint.

Callbacks:

ari.endpoints.get(
  function (err, endpoint) {}
);

Promises:

ari.endpoints.get()
  .then(function (endpoint) {})
  .catch(function (err) {});
Available Parameters
list

List all endpoints.

Callbacks:

ari.endpoints.list(
  function (err, endpoints) {}
);

Promises:

ari.endpoints.list()
  .then(function (endpoints) {})
  .catch(function (err) {});
listByTech

List available endoints for a given endpoint technology.

Callbacks:

ari.endpoints.listByTech(
  function (err, endpoints) {}
);

Promises:

ari.endpoints.listByTech()
  .then(function (endpoints) {})
  .catch(function (err) {});
Available Parameters
sendMessage

Send a message to some technology URI or endpoint.

Callbacks:

ari.endpoints.sendMessage(
  {from: val, to: val},
  function (err) {}
);

Promises:

ari.endpoints.sendMessage({
    from: val,
    to: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
sendMessageToEndpoint

Send a message to some endpoint in a technology.

Callbacks:

ari.endpoints.sendMessageToEndpoint(
  {from: val},
  function (err) {}
);

Promises:

ari.endpoints.sendMessageToEndpoint({
    from: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters

mailboxes

delete

Destroy a mailbox.

Callbacks:

ari.mailboxes.delete(
  {mailboxName: val},
  function (err) {}
);

Promises:

ari.mailboxes.delete({
    mailboxName: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
get

Retrieve the current state of a mailbox.

Callbacks:

ari.mailboxes.get(
  {mailboxName: val},
  function (err, mailbox) {}
);

Promises:

ari.mailboxes.get({
    mailboxName: val
})
  .then(function (mailbox) {})
  .catch(function (err) {});
Available Parameters
list

List all mailboxes.

Callbacks:

ari.mailboxes.list(
  function (err, mailboxs) {}
);

Promises:

ari.mailboxes.list()
  .then(function (mailboxs) {})
  .catch(function (err) {});
update

Change the state of a mailbox. (Note - implicitly creates the mailbox).

Callbacks:

ari.mailboxes.update(
  {mailboxName: val, newMessages: val, oldMessages: val},
  function (err) {}
);

Promises:

ari.mailboxes.update({
    mailboxName: val,
    newMessages: val,
    oldMessages: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters

playbacks

control

Control a playback.

Callbacks:

ari.playbacks.control(
  {operation: val, playbackId: val},
  function (err) {}
);

Promises:

ari.playbacks.control({
    operation: val,
    playbackId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
get

Get a playback's details.

Callbacks:

ari.playbacks.get(
  {playbackId: val},
  function (err, playback) {}
);

Promises:

ari.playbacks.get({
    playbackId: val
})
  .then(function (playback) {})
  .catch(function (err) {});
Available Parameters
stop

Stop a playback.

Callbacks:

ari.playbacks.stop(
  {playbackId: val},
  function (err) {}
);

Promises:

ari.playbacks.stop({
    playbackId: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters

recordings

cancel

Stop a live recording and discard it.

Callbacks:

ari.recordings.cancel(
  {recordingName: val},
  function (err) {}
);

Promises:

ari.recordings.cancel({
    recordingName: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
copyStored

Copy a stored recording.

Callbacks:

ari.recordings.copyStored(
  {destinationRecordingName: val, recordingName: val},
  function (err, storedrecording) {}
);

Promises:

ari.recordings.copyStored({
    destinationRecordingName: val,
    recordingName: val
})
  .then(function (storedrecording) {})
  .catch(function (err) {});
Available Parameters
deleteStored

Delete a stored recording.

Callbacks:

ari.recordings.deleteStored(
  {recordingName: val},
  function (err) {}
);

Promises:

ari.recordings.deleteStored({
    recordingName: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
getLive

List live recordings.

Callbacks:

ari.recordings.getLive(
  {recordingName: val},
  function (err, liverecording) {}
);

Promises:

ari.recordings.getLive({
    recordingName: val
})
  .then(function (liverecording) {})
  .catch(function (err) {});
Available Parameters
getStored

Get a stored recording's details.

Callbacks:

ari.recordings.getStored(
  {recordingName: val},
  function (err, storedrecording) {}
);

Promises:

ari.recordings.getStored({
    recordingName: val
})
  .then(function (storedrecording) {})
  .catch(function (err) {});
Available Parameters
getStoredFile

Get the file associated with the stored recording.

Callbacks:

ari.recordings.getStoredFile(
  {recordingName: val},
  function (err, binary) {}
);

Promises:

ari.recordings.getStoredFile({
    recordingName: val
})
  .then(function (binary) {})
  .catch(function (err) {});
Available Parameters
listStored

List recordings that are complete.

Callbacks:

ari.recordings.listStored(
  function (err, storedrecordings) {}
);

Promises:

ari.recordings.listStored()
  .then(function (storedrecordings) {})
  .catch(function (err) {});
mute

Mute a live recording.

Callbacks:

ari.recordings.mute(
  {recordingName: val},
  function (err) {}
);

Promises:

ari.recordings.mute({
    recordingName: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
pause

Pause a live recording.

Callbacks:

ari.recordings.pause(
  {recordingName: val},
  function (err) {}
);

Promises:

ari.recordings.pause({
    recordingName: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
stop

Stop a live recording and store it.

Callbacks:

ari.recordings.stop(
  {recordingName: val},
  function (err) {}
);

Promises:

ari.recordings.stop({
    recordingName: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
unmute

Unmute a live recording.

Callbacks:

ari.recordings.unmute(
  {recordingName: val},
  function (err) {}
);

Promises:

ari.recordings.unmute({
    recordingName: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters
unpause

Unpause a live recording.

Callbacks:

ari.recordings.unpause(
  {recordingName: val},
  function (err) {}
);

Promises:

ari.recordings.unpause({
    recordingName: val
})
  .then(function () {})
  .catch(function (err) {});
Available Parameters

sounds

get

Get a sound's details.

Callbacks:

ari.sounds.get(
  {soundId: val},
  function (err, sound) {}
);

Promises:

ari.sounds.get({
    soundId: val
})
  .then(function (sound) {})
  .catch(function (err) {});
Available Parameters
list

List all sounds.

Callbacks:

ari.sounds.list(
  function (err, sounds) {}
);

Promises:

ari.sounds.list()
  .then(function (sounds) {})
  .catch(function (err) {});
Available Parameters

Events

Event listeners can be registered on the client as well as on resource instances.

Client Events

Client events are received for all events of a given type regardless of which resource the event is for.

ari.on('StasisStart', function (event, channelInstance) {
    // will be called for all channels that enter the Stasis application
});

Resource Instance Events

Resource instance events are only received for the given type and resource.

Callbacks:

var channel = ari.Channel();
channel.on('StasisStart', function (event, channelInstance) {
    // will only be called when the channel above enters the Stasis application
});

channel.originate(
  {endpoint: 'PJSIP/endpoint', app: 'applicationName'},
  function (err, channelInstance) {}
);

Promises:

var channel = ari.Channel();
channel.on('StasisStart', function (event, channelInstance) {
    // will only be called when the channel above enters the Stasis application
});

channel.originate({endpoint: 'PJSIP/endpoint', app: 'applicationName'})
  .then(function (channelInstance) {})
  .catch(function (err) {});

Managing Events

When using events, it is important to note that the callbacks you provide to handle events cannot be garbage collected until they are unregistered as shown below.

At the client level:

var handler = function (event, channel) {};

// receive all 'ChannelDtmfReceived' events
ari.on('ChannelDtmfReceived', handler);

// at some point in your application, remove the event listener to ensure the handler function can be garbage collected
ari.removeListener('ChannelDtmfReceived', handler);
// or remove all event listeners for a particular event type
ari.removeAllListeners('ChannelDtmfReceived');

At the instance level:

var channel = ari.Channel();
var handler = function (event, channel) {};

// receive all 'ChannelDtmfReceived' events for this channel
channel.on('ChannelDtmfReceived', handler);

// at some point in your application, remove the event listener to ensure the handler function can be garbage collected
channel.removeListener('ChannelDtmfReceived', handler);
// or remove all event listeners for a particular event type
channel.removeAllListeners('ChannelDtmfReceived');

For events that are only expected to fire once, once can be used to register an event listener that will automatically be unregistered once the event fires as shown below:

var playback = ari.Playback();
var handler = function (event, playback) {};

// receive 'PlaybackFinished' events for this playback
playback.once('PlaybackFinished', handler);

Supported Events

The following events are defined:

APILoadError

ARI client failed to load.

function (err) {}
ApplicationMoveFailed

Notification that trying to move a channel to another Stasis application failed.

function (event, channel) {}
Available Event Properties
Resource Specific Emitters

Channel

ApplicationReplaced

Notification that another WebSocket has taken over for an application.

An application may only be subscribed to by a single WebSocket at a time. If multiple WebSockets attempt to subscribe to the same application, the newer WebSocket wins, and the older one receives this event.

function (event) {}
BridgeAttendedTransfer

Notification that an attended transfer has occurred.

function (event, {destination_link_first_leg: val, destination_link_second_leg: val, destination_threeway_bridge: val, destination_threeway_channel: val, replace_channel: val, transfer_target: val, transferee: val, transferer_first_leg: val, transferer_first_leg_bridge: val, transferer_second_leg: val, transferer_second_leg_bridge: val}) {}
Available Event Properties
Resource Specific Emitters

Channel Bridge

BridgeBlindTransfer

Notification that a blind transfer has occurred.

function (event, {bridge: val, channel: val, replace_channel: val, transferee: val}) {}
Available Event Properties
Resource Specific Emitters

Bridge Channel

BridgeCreated

Notification that a bridge has been created.

function (event, bridge) {}
Available Event Properties
Resource Specific Emitters

Bridge

BridgeDestroyed

Notification that a bridge has been destroyed.

function (event, bridge) {}
Available Event Properties
Resource Specific Emitters

Bridge

BridgeMerged

Notification that one bridge has merged into another.

function (event, {bridge: val, bridge_from: val}) {}
Available Event Properties
Resource Specific Emitters

Bridge

BridgeVideoSourceChanged

Notification that the source of video in a bridge has changed.

function (event, bridge) {}
Available Event Properties
Resource Specific Emitters

Bridge

ChannelCallerId

Channel changed Caller ID.

function (event, channel) {}
Available Event Properties
Resource Specific Emitters

Channel

ChannelConnectedLine

Channel changed Connected Line.

function (event, channel) {}
Available Event Properties
Resource Specific Emitters

Channel

ChannelCreated

Notification that a channel has been created.

function (event, channel) {}
Available Event Properties
Resource Specific Emitters

Channel

ChannelDestroyed

Notification that a channel has been destroyed.

function (event, channel) {}
Available Event Properties
Resource Specific Emitters

Channel

ChannelDialplan

Channel changed location in the dialplan.

function (event, channel) {}
Available Event Properties
Resource Specific Emitters

Channel

ChannelDtmfReceived

DTMF received on a channel.

This event is sent when the DTMF ends. There is no notification about the start of DTMF

function (event, channel) {}
Available Event Properties
Resource Specific Emitters

Channel

ChannelEnteredBridge

Notification that a channel has entered a bridge.

function (event, {bridge: val, channel: val}) {}
Available Event Properties
Resource Specific Emitters

Bridge Channel

ChannelHangupRequest

A hangup was requested on the channel.

function (event, channel) {}
Available Event Properties
Resource Specific Emitters

Channel

ChannelHold

A channel initiated a media hold.

function (event, channel) {}
Available Event Properties
Resource Specific Emitters

Channel

ChannelLeftBridge

Notification that a channel has left a bridge.

function (event, {bridge: val, channel: val}) {}
Available Event Properties
Resource Specific Emitters

Bridge Channel

ChannelStateChange

Notification of a channel's state change.

function (event, channel) {}
Available Event Properties
Resource Specific Emitters

Channel

ChannelTalkingFinished

Talking is no longer detected on the channel.

function (event, channel) {}
Available Event Properties
Resource Specific Emitters

Channel

ChannelTalkingStarted

Talking was detected on the channel.

function (event, channel) {}
Available Event Properties
Resource Specific Emitters

Channel

ChannelUnhold

A channel initiated a media unhold.

function (event, channel) {}
Available Event Properties
Resource Specific Emitters

Channel

ChannelUserevent

User-generated event with additional user-defined fields in the object.

function (event, {bridge: val, channel: val, endpoint: val}) {}
Available Event Properties
Resource Specific Emitters

Bridge Channel Endpoint

ChannelVarset

Channel variable changed.

function (event, channel) {}
Available Event Properties

If missing, the variable is a global variable.

Resource Specific Emitters

Channel

ContactInfo

Detailed information about a contact on an endpoint.

function (event) {}
Available Event Properties
ContactStatusChange

The state of a contact on an endpoint has changed.

function (event, endpoint) {}
Available Event Properties
Resource Specific Emitters

Endpoint

DeviceStateChanged

Notification that a device state has changed.

function (event, device_state) {}
Available Event Properties
Resource Specific Emitters

DeviceState

Dial

Dialing state has changed.

function (event, {caller: val, forwarded: val, peer: val}) {}
Available Event Properties
Resource Specific Emitters

Channel

EndpointStateChange

Endpoint state changed.

function (event, endpoint) {}
Available Event Properties
Resource Specific Emitters

Endpoint

MissingParams

Error event sent when required params are missing.

function (event) {}
Available Event Properties
Peer

Detailed information about a remote peer that communicates with Asterisk.

function (event) {}
Available Event Properties
PeerStatusChange

The state of a peer associated with an endpoint has changed.

function (event, endpoint) {}
Available Event Properties
Resource Specific Emitters

Endpoint

PlaybackContinuing

Event showing the continuation of a media playback operation from one media URI to the next in the list.

function (event, playback) {}
Available Event Properties
Resource Specific Emitters

Playback

PlaybackFinished

Event showing the completion of a media playback operation.

function (event, playback) {}
Available Event Properties
Resource Specific Emitters

Playback

PlaybackStarted

Event showing the start of a media playback operation.

function (event, playback) {}
Available Event Properties
Resource Specific Emitters

Playback

RecordingFailed

Event showing failure of a recording operation.

function (event, recording) {}
Available Event Properties
Resource Specific Emitters

LiveRecording

RecordingFinished

Event showing the completion of a recording operation.

function (event, recording) {}
Available Event Properties
Resource Specific Emitters

LiveRecording

RecordingStarted

Event showing the start of a recording operation.

function (event, recording) {}
Available Event Properties
Resource Specific Emitters

LiveRecording

StasisEnd

Notification that a channel has left a Stasis application.

function (event, channel) {}
Available Event Properties
Resource Specific Emitters

Channel

StasisStart

Notification that a channel has entered a Stasis application.

function (event, {channel: val, replace_channel: val}) {}
Available Event Properties
Resource Specific Emitters

Channel

TextMessageReceived

A text message was received from an endpoint.

function (event, endpoint) {}
Available Event Properties
Resource Specific Emitters

Endpoint

WebSocketReconnecting

WebSocket has disconnected, and the client is attempting to reconnect.

function (err) {}
WebSocketConnected

WebSocket has connected. Note that normally this event is emitted prior to resolving the connect() promise, so you probably will not get an even on the initial connection.

function () {}
WebSocketMaxRetries

Client will no longer attempt to reconnect to the WebSocket for the current application(s).

function (err) {}

Examples

Callbacks:

var client = require('ari-client'),
    util = require('util');

client.connect('http://localhost:8088', 'user', 'secret', client_loaded);

function client_loaded (err, ari) {

  if (err) {
    throw err; // program will crash if it fails to connect
  }

  ari.once('StasisStart', channel_joined);

  function channel_joined (event, incoming) {
    incoming.on('ChannelDtmfReceived', dtmf_received);

    incoming.answer(function (err) {
      play(incoming, 'sound:hello-world');
    });
  }

  function dtmf_received (event, channel) {
    var digit = event.digit;
    switch (digit) {
      case '#':
        play(channel, 'sound:vm-goodbye', function (err) {
          channel.hangup(function (err) {
            process.exit(0);
          });
        });
        break;
      case '*':
        play(channel, 'sound:tt-monkeys');
        break;
      default:
        play(channel, util.format('sound:digits/%s', digit));
    }
  }

  function play (channel, sound, callback) {
    var playback = ari.Playback();

    playback.on('PlaybackFinished', function (event, playback) {
      if (callback) {
        callback(null);
      }
    });

    channel.play({media: sound}, playback, function (err, playback) {});
  }

  ari.start('hello');
}

Promises:

var client = require('ari-client'),
    Promise = require('bluebird'),
    util = require('util');

client.connect('http://localhost:8088', 'user', 'secret')
  .then(function (ari) {

    ari.once('StasisStart', channelJoined);

    function channelJoined (event, incoming) {
      incoming.on('ChannelDtmfReceived', dtmfReceived);

      incoming.answer()
        .then(function () {
          return play(incoming, 'sound:hello-world');
        })
        .catch(function (err) {});
    }

    function dtmfReceived (event, channel) {
      var digit = event.digit;
      switch (digit) {
        case '#':
          play(channel, 'sound:vm-goodbye')
            .then(function () {
              return channel.hangup();
            })
            .finally(function () {
              process.exit(0);
            });
          break;
        case '*':
          play(channel, 'sound:tt-monkeys');
          break;
        default:
          play(channel, util.format('sound:digits/%s', digit));
      }
    }

    function play (channel, sound) {
      var playback = ari.Playback();

      return new Promise(function (resolve, reject) {
        playback.on('PlaybackFinished', function (event, playback) {
          resolve(playback);
        });

        channel.play({media: sound}, playback)
          .catch(function (err) {
            reject(err);
          });
      });
    }

    ari.start('hello');
  })
  .done(); // program will crash if it fails to connect

Testing

To run the mocha tests for ari-client, run the following:

$ npm test

The tests run against a mocked ARI REST endpoint and websocket server.

Development

After cloning the git repository, run the following to install all dev dependencies:

$ npm install
$ npm link

Then run the following to run jshint and mocha tests:

$ npm test

jshint will enforce a minimal style guide. It is also a good idea to create unit tests when adding new features to ari-client.

To generate a test coverage report run the following:

$ npm run check-coverage

This will also ensure a coverage threshold is met by the tests.

Unit test fixtures for ARI resources can be generated from a local asterisk instance by running the following:

$ grunt genfixtures

Once you have done this and loaded a mocked ARI server, individual calls can be mocked using the hock library. Websocket events can be mocked by creating a websocket server and calling its send method. The helpers module exposes methods for creating a mocked ARI server and a mocked websocket server for use in writing unit tests.

Developer documentation can ge generated by running the following:

$ grunt jsdoc

License

Apache, Version 2.0. Copyright (c) 2014, Digium, Inc. All rights reserved.