UNPKG

@ipsolution/ari-client

Version:

JavaScript client for Asterisk REST Interface. (fork IP Solution)

2,624 lines (2,019 loc) 73.6 kB
[![build status][build_image]][build] # 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 ```bash $ 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: ```javascript var client = require('ari-client'); client.connect(url, username, password, function (err, ari) {}) ``` Promises: ```javascript 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: ```javascript ari.bridges.list(function (err, bridges) {}); ari.bridges.get({bridgeId: 'uniqueid'}, function (err, bridge) {}); ``` Promises: ```javascript 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. ```javascript 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: ```javascript 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: ```javascript var bridge = ari.Bridge(); bridge.create(function (err, bridge) {}); ``` Promises: ```javascript 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: ```javascript 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: ```javascript 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: ```javascript var playback = ari.Playback(); channel.play({media: 'sound:hello-world'}, playback, function (err, playback) {}); ``` Promises: ```javascript 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: ```javascript var playback = ari.Playback(); ari.channels.play({ media: 'sound:hello-world', channelId: channel.id, playbackId: playback.id }, function (err, playback) {}); ``` Promises: ```javascript 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: ```javascript ari.applications.filter( {applicationName: val}, function (err, application) {} ); ``` Promises: ```javascript ari.applications.filter({ applicationName: val }) .then(function (application) {}) .catch(function (err) {}); ``` ###### Available Parameters - applicationName (string) - Application's name - filter (object) - Specify which event types to allow/disallow ##### get Get details of an application. Callbacks: ```javascript ari.applications.get( {applicationName: val}, function (err, application) {} ); ``` Promises: ```javascript ari.applications.get({ applicationName: val }) .then(function (application) {}) .catch(function (err) {}); ``` ###### Available Parameters - applicationName (string) - Application's name ##### list List all applications. Callbacks: ```javascript ari.applications.list( function (err, applications) {} ); ``` Promises: ```javascript ari.applications.list() .then(function (applications) {}) .catch(function (err) {}); ``` ##### subscribe Subscribe an application to a event source. Callbacks: ```javascript ari.applications.subscribe( {applicationName: val, eventSource: val}, function (err, application) {} ); ``` Promises: ```javascript ari.applications.subscribe({ applicationName: val, eventSource: val }) .then(function (application) {}) .catch(function (err) {}); ``` ###### Available Parameters - applicationName (string) - Application's name - eventSource (string) - URI for event source (channel:{channelId}, bridge:{bridgeId}, endpoint:{tech}[/{resource}], deviceState:{deviceName} ##### unsubscribe Unsubscribe an application from an event source. Callbacks: ```javascript ari.applications.unsubscribe( {applicationName: val, eventSource: val}, function (err, application) {} ); ``` Promises: ```javascript ari.applications.unsubscribe({ applicationName: val, eventSource: val }) .then(function (application) {}) .catch(function (err) {}); ``` ###### Available Parameters - applicationName (string) - Application's name - eventSource (string) - URI for event source (channel:{channelId}, bridge:{bridgeId}, endpoint:{tech}[/{resource}], deviceState:{deviceName} #### asterisk ##### addLog Adds a log channel. Callbacks: ```javascript ari.asterisk.addLog( {configuration: val, logChannelName: val}, function (err) {} ); ``` Promises: ```javascript ari.asterisk.addLog({ configuration: val, logChannelName: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - configuration (string) - levels of the log channel - logChannelName (string) - The log channel to add ##### deleteLog Deletes a log channel. Callbacks: ```javascript ari.asterisk.deleteLog( {logChannelName: val}, function (err) {} ); ``` Promises: ```javascript ari.asterisk.deleteLog({ logChannelName: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - logChannelName (string) - Log channels name ##### deleteObject Delete a dynamic configuration object. Callbacks: ```javascript ari.asterisk.deleteObject( {configClass: val, id: val, objectType: val}, function (err) {} ); ``` Promises: ```javascript ari.asterisk.deleteObject({ configClass: val, id: val, objectType: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - configClass (string) - The configuration class containing dynamic configuration objects. - id (string) - The unique identifier of the object to delete. - objectType (string) - The type of configuration object to delete. ##### getGlobalVar Get the value of a global variable. Callbacks: ```javascript ari.asterisk.getGlobalVar( {variable: val}, function (err, variable) {} ); ``` Promises: ```javascript ari.asterisk.getGlobalVar({ variable: val }) .then(function (variable) {}) .catch(function (err) {}); ``` ###### Available Parameters - variable (string) - The variable to get ##### getInfo Gets Asterisk system information. Callbacks: ```javascript ari.asterisk.getInfo( function (err, asteriskinfo) {} ); ``` Promises: ```javascript ari.asterisk.getInfo() .then(function (asteriskinfo) {}) .catch(function (err) {}); ``` ###### Available Parameters - only (string) - Filter information returned ##### getModule Get Asterisk module information. Callbacks: ```javascript ari.asterisk.getModule( {moduleName: val}, function (err, module) {} ); ``` Promises: ```javascript ari.asterisk.getModule({ moduleName: val }) .then(function (module) {}) .catch(function (err) {}); ``` ###### Available Parameters - moduleName (string) - Module's name ##### getObject Retrieve a dynamic configuration object. Callbacks: ```javascript ari.asterisk.getObject( {configClass: val, id: val, objectType: val}, function (err, configtuples) {} ); ``` Promises: ```javascript ari.asterisk.getObject({ configClass: val, id: val, objectType: val }) .then(function (configtuples) {}) .catch(function (err) {}); ``` ###### Available Parameters - configClass (string) - The configuration class containing dynamic configuration objects. - id (string) - The unique identifier of the object to retrieve. - objectType (string) - The type of configuration object to retrieve. ##### listLogChannels Gets Asterisk log channel information. Callbacks: ```javascript ari.asterisk.listLogChannels( function (err, logchannels) {} ); ``` Promises: ```javascript ari.asterisk.listLogChannels() .then(function (logchannels) {}) .catch(function (err) {}); ``` ##### listModules List Asterisk modules. Callbacks: ```javascript ari.asterisk.listModules( function (err, modules) {} ); ``` Promises: ```javascript ari.asterisk.listModules() .then(function (modules) {}) .catch(function (err) {}); ``` ##### loadModule Load an Asterisk module. Callbacks: ```javascript ari.asterisk.loadModule( {moduleName: val}, function (err) {} ); ``` Promises: ```javascript ari.asterisk.loadModule({ moduleName: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - moduleName (string) - Module's name ##### ping Response pong message. Callbacks: ```javascript ari.asterisk.ping( function (err, asteriskping) {} ); ``` Promises: ```javascript ari.asterisk.ping() .then(function (asteriskping) {}) .catch(function (err) {}); ``` ##### reloadModule Reload an Asterisk module. Callbacks: ```javascript ari.asterisk.reloadModule( {moduleName: val}, function (err) {} ); ``` Promises: ```javascript ari.asterisk.reloadModule({ moduleName: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - moduleName (string) - Module's name ##### rotateLog Rotates a log channel. Callbacks: ```javascript ari.asterisk.rotateLog( {logChannelName: val}, function (err) {} ); ``` Promises: ```javascript ari.asterisk.rotateLog({ logChannelName: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - logChannelName (string) - Log channel's name ##### setGlobalVar Set the value of a global variable. Callbacks: ```javascript ari.asterisk.setGlobalVar( {variable: val}, function (err) {} ); ``` Promises: ```javascript ari.asterisk.setGlobalVar({ variable: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - value (string) - The value to set the variable to - variable (string) - The variable to set ##### unloadModule Unload an Asterisk module. Callbacks: ```javascript ari.asterisk.unloadModule( {moduleName: val}, function (err) {} ); ``` Promises: ```javascript ari.asterisk.unloadModule({ moduleName: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - moduleName (string) - Module's name ##### updateObject Create or update a dynamic configuration object. Callbacks: ```javascript ari.asterisk.updateObject( {configClass: val, id: val, objectType: val}, function (err, configtuples) {} ); ``` Promises: ```javascript ari.asterisk.updateObject({ configClass: val, id: val, objectType: val }) .then(function (configtuples) {}) .catch(function (err) {}); ``` ###### Available Parameters - configClass (string) - The configuration class containing dynamic configuration objects. - fields (containers) - The body object should have a value that is a list of ConfigTuples, which provide the fields to update. Ex. [ { "attribute": "directmedia", "value": "false" } ] - id (string) - The unique identifier of the object to create or update. - objectType (string) - The type of configuration object to create or update. #### bridges ##### addChannel Add a channel to a bridge. Callbacks: ```javascript ari.bridges.addChannel( {bridgeId: val, channel: val}, function (err) {} ); ``` Promises: ```javascript ari.bridges.addChannel({ bridgeId: val, channel: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - absorbDTMF (boolean) - Absorb DTMF coming from this channel, preventing it to pass through to the bridge - bridgeId (string) - Bridge's id - channel (string) - Ids of channels to add to bridge - mute (boolean) - Mute audio from this channel, preventing it to pass through to the bridge - role (string) - Channel's role in the bridge ##### 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: ```javascript ari.bridges.clearVideoSource( {bridgeId: val}, function (err) {} ); ``` Promises: ```javascript ari.bridges.clearVideoSource({ bridgeId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - bridgeId (string) - Bridge's id ##### create Create a new bridge. Callbacks: ```javascript ari.bridges.create( function (err, bridge) {} ); ``` Promises: ```javascript ari.bridges.create() .then(function (bridge) {}) .catch(function (err) {}); ``` ###### Available Parameters - bridgeId (string) - Unique ID to give to the bridge being created. - name (string) - Name to give to the bridge being created. - type (string) - Comma separated list of bridge type attributes (mixing, holding, dtmf_events, proxy_media, video_sfu). ##### createWithId Create a new bridge or updates an existing one. Callbacks: ```javascript ari.bridges.createWithId( {bridgeId: val}, function (err, bridge) {} ); ``` Promises: ```javascript ari.bridges.createWithId({ bridgeId: val }) .then(function (bridge) {}) .catch(function (err) {}); ``` ###### Available Parameters - bridgeId (string) - Unique ID to give to the bridge being created. - name (string) - Set the name of the bridge. - type (string) - Comma separated list of bridge type attributes (mixing, holding, dtmf_events, proxy_media, video_sfu) to set. ##### destroy Shut down a bridge. Callbacks: ```javascript ari.bridges.destroy( {bridgeId: val}, function (err) {} ); ``` Promises: ```javascript ari.bridges.destroy({ bridgeId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - bridgeId (string) - Bridge's id ##### get Get bridge details. Callbacks: ```javascript ari.bridges.get( {bridgeId: val}, function (err, bridge) {} ); ``` Promises: ```javascript ari.bridges.get({ bridgeId: val }) .then(function (bridge) {}) .catch(function (err) {}); ``` ###### Available Parameters - bridgeId (string) - Bridge's id ##### list List all active bridges in Asterisk. Callbacks: ```javascript ari.bridges.list( function (err, bridges) {} ); ``` Promises: ```javascript ari.bridges.list() .then(function (bridges) {}) .catch(function (err) {}); ``` ##### play Start playback of media on a bridge. Callbacks: ```javascript ari.bridges.play( {bridgeId: val, media: val}, function (err, playback) {} ); ``` Promises: ```javascript ari.bridges.play({ bridgeId: val, media: val }) .then(function (playback) {}) .catch(function (err) {}); ``` ###### Available Parameters - bridgeId (string) - Bridge's id - lang (string) - For sounds, selects language for sound. - media (string) - Media URIs to play. - offsetms (int) - Number of milliseconds to skip before playing. Only applies to the first URI if multiple media URIs are specified. - playbackId (string) - Playback Id. - skipms (int) - Number of milliseconds to skip for forward/reverse operations. ##### playWithId Start playback of media on a bridge. Callbacks: ```javascript ari.bridges.playWithId( {bridgeId: val, media: val, playbackId: val}, function (err, playback) {} ); ``` Promises: ```javascript ari.bridges.playWithId({ bridgeId: val, media: val, playbackId: val }) .then(function (playback) {}) .catch(function (err) {}); ``` ###### Available Parameters - bridgeId (string) - Bridge's id - lang (string) - For sounds, selects language for sound. - media (string) - Media URIs to play. - offsetms (int) - Number of milliseconds to skip before playing. Only applies to the first URI if multiple media URIs are specified. - playbackId (string) - Playback ID. - skipms (int) - Number of milliseconds to skip for forward/reverse operations. ##### record Start a recording. Callbacks: ```javascript ari.bridges.record( {bridgeId: val, format: val, name: val}, function (err, liverecording) {} ); ``` Promises: ```javascript ari.bridges.record({ bridgeId: val, format: val, name: val }) .then(function (liverecording) {}) .catch(function (err) {}); ``` ###### Available Parameters - beep (boolean) - Play beep when recording begins - bridgeId (string) - Bridge's id - format (string) - Format to encode audio in - ifExists (string) - Action to take if a recording with the same name already exists. - maxDurationSeconds (int) - Maximum duration of the recording, in seconds. 0 for no limit. - maxSilenceSeconds (int) - Maximum duration of silence, in seconds. 0 for no limit. - name (string) - Recording's filename - terminateOn (string) - DTMF input to terminate recording. ##### removeChannel Remove a channel from a bridge. Callbacks: ```javascript ari.bridges.removeChannel( {bridgeId: val, channel: val}, function (err) {} ); ``` Promises: ```javascript ari.bridges.removeChannel({ bridgeId: val, channel: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - bridgeId (string) - Bridge's id - channel (string) - Ids of channels to remove from bridge ##### 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: ```javascript ari.bridges.setVideoSource( {bridgeId: val, channelId: val}, function (err) {} ); ``` Promises: ```javascript ari.bridges.setVideoSource({ bridgeId: val, channelId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - bridgeId (string) - Bridge's id - channelId (string) - Channel's id ##### startMoh Play music on hold to a bridge or change the MOH class that is playing. Callbacks: ```javascript ari.bridges.startMoh( {bridgeId: val}, function (err) {} ); ``` Promises: ```javascript ari.bridges.startMoh({ bridgeId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - bridgeId (string) - Bridge's id - mohClass (string) - Channel's id ##### stopMoh Stop playing music on hold to a bridge. Callbacks: ```javascript ari.bridges.stopMoh( {bridgeId: val}, function (err) {} ); ``` Promises: ```javascript ari.bridges.stopMoh({ bridgeId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - bridgeId (string) - Bridge's id #### channels ##### answer Answer a channel. Callbacks: ```javascript ari.channels.answer( {channelId: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.answer({ channelId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id ##### continueInDialplan Exit application; continue execution in the dialplan. Callbacks: ```javascript ari.channels.continueInDialplan( {channelId: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.continueInDialplan({ channelId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id - context (string) - The context to continue to. - extension (string) - The extension to continue to. - label (string) - The label to continue to - will supersede 'priority' if both are provided. - priority (int) - The priority to continue to. ##### create Create channel. Callbacks: ```javascript ari.channels.create( {app: val, endpoint: val}, function (err, channel) {} ); ``` Promises: ```javascript ari.channels.create({ app: val, endpoint: val }) .then(function (channel) {}) .catch(function (err) {}); ``` ###### Available Parameters - app (string) - Stasis Application to place channel into - appArgs (string) - The application arguments to pass to the Stasis application provided by 'app'. Mutually exclusive with 'context', 'extension', 'priority', and 'label'. - channelId (string) - The unique id to assign the channel on creation. - endpoint (string) - Endpoint for channel communication - formats (string) - The format name capability list to use if originator is not specified. Ex. "ulaw,slin16". Format names can be found with "core show codecs". - originator (string) - Unique ID of the calling channel - otherChannelId (string) - The unique id to assign the second channel when using local channels. ##### dial Dial a created channel. Callbacks: ```javascript ari.channels.dial( {channelId: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.dial({ channelId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - caller (string) - Channel ID of caller - channelId (string) - Channel's id - timeout (int) - Dial timeout ##### externalMedia Start an External Media session. Callbacks: ```javascript ari.channels.externalMedia( {app: val, external_host: val, format: val}, function (err, channel) {} ); ``` Promises: ```javascript ari.channels.externalMedia({ app: val, external_host: val, format: val }) .then(function (channel) {}) .catch(function (err) {}); ``` ###### Available Parameters - app (string) - Stasis Application to place channel into - channelId (string) - The unique id to assign the channel on creation. - connection_type (string) - Connection type (client/server) - direction (string) - External media direction - encapsulation (string) - Payload encapsulation protocol - external_host (string) - Hostname/ip:port of external host - format (string) - Format to encode audio in - transport (string) - Transport protocol - variables (containers) - The "variables" key in the body object holds variable key/value pairs to set on the channel on creation. Other keys in the body object are interpreted as query parameters. Ex. { "endpoint": "SIP/Alice", "variables": { "CALLERID(name)": "Alice" } } ##### get Channel details. Callbacks: ```javascript ari.channels.get( {channelId: val}, function (err, channel) {} ); ``` Promises: ```javascript ari.channels.get({ channelId: val }) .then(function (channel) {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id ##### getChannelVar Get the value of a channel variable or function. Callbacks: ```javascript ari.channels.getChannelVar( {channelId: val, variable: val}, function (err, variable) {} ); ``` Promises: ```javascript ari.channels.getChannelVar({ channelId: val, variable: val }) .then(function (variable) {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id - variable (string) - The channel variable or function to get ##### hangup Delete (i.e. hangup) a channel. Callbacks: ```javascript ari.channels.hangup( {channelId: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.hangup({ channelId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id - reason (string) - Reason for hanging up the channel ##### hold Hold a channel. Callbacks: ```javascript ari.channels.hold( {channelId: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.hold({ channelId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id ##### list List all active channels in Asterisk. Callbacks: ```javascript ari.channels.list( function (err, channels) {} ); ``` Promises: ```javascript ari.channels.list() .then(function (channels) {}) .catch(function (err) {}); ``` ##### move Move the channel from one Stasis application to another. Callbacks: ```javascript ari.channels.move( {app: val, channelId: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.move({ app: val, channelId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - app (string) - The channel will be passed to this Stasis application. - appArgs (string) - The application arguments to pass to the Stasis application provided by 'app'. - channelId (string) - Channel's id ##### mute Mute a channel. Callbacks: ```javascript ari.channels.mute( {channelId: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.mute({ channelId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id - direction (string) - Direction in which to mute audio ##### originate Create a new channel (originate). Callbacks: ```javascript ari.channels.originate( {endpoint: val}, function (err, channel) {} ); ``` Promises: ```javascript ari.channels.originate({ endpoint: val }) .then(function (channel) {}) .catch(function (err) {}); ``` ###### Available Parameters - app (string) - The application that is subscribed to the originated channel. When the channel is answered, it will be passed to this Stasis application. Mutually exclusive with 'context', 'extension', 'priority', and 'label'. - appArgs (string) - The application arguments to pass to the Stasis application provided by 'app'. Mutually exclusive with 'context', 'extension', 'priority', and 'label'. - callerId (string) - CallerID to use when dialing the endpoint or extension. - channelId (string) - The unique id to assign the channel on creation. - context (string) - The context to dial after the endpoint answers. If omitted, uses 'default'. Mutually exclusive with 'app'. - endpoint (string) - Endpoint to call. - extension (string) - The extension to dial after the endpoint answers. Mutually exclusive with 'app'. - formats (string) - The format name capability list to use if originator is not specified. Ex. "ulaw,slin16". Format names can be found with "core show codecs". - label (string) - The label to dial after the endpoint answers. Will supersede 'priority' if provided. Mutually exclusive with 'app'. - originator (string) - The unique id of the channel which is originating this one. - otherChannelId (string) - The unique id to assign the second channel when using local channels. - priority (long) - The priority to dial after the endpoint answers. If omitted, uses 1. Mutually exclusive with 'app'. - timeout (int) - Timeout (in seconds) before giving up dialing, or -1 for no timeout. - variables (containers) - The "variables" key in the body object holds variable key/value pairs to set on the channel on creation. Other keys in the body object are interpreted as query parameters. Ex. { "endpoint": "SIP/Alice", "variables": { "CALLERID(name)": "Alice" } } ##### originateWithId Create a new channel (originate with id). Callbacks: ```javascript ari.channels.originateWithId( {channelId: val, endpoint: val}, function (err, channel) {} ); ``` Promises: ```javascript ari.channels.originateWithId({ channelId: val, endpoint: val }) .then(function (channel) {}) .catch(function (err) {}); ``` ###### Available Parameters - app (string) - The application that is subscribed to the originated channel. When the channel is answered, it will be passed to this Stasis application. Mutually exclusive with 'context', 'extension', 'priority', and 'label'. - appArgs (string) - The application arguments to pass to the Stasis application provided by 'app'. Mutually exclusive with 'context', 'extension', 'priority', and 'label'. - callerId (string) - CallerID to use when dialing the endpoint or extension. - channelId (string) - The unique id to assign the channel on creation. - context (string) - The context to dial after the endpoint answers. If omitted, uses 'default'. Mutually exclusive with 'app'. - endpoint (string) - Endpoint to call. - extension (string) - The extension to dial after the endpoint answers. Mutually exclusive with 'app'. - formats (string) - The format name capability list to use if originator is not specified. Ex. "ulaw,slin16". Format names can be found with "core show codecs". - label (string) - The label to dial after the endpoint answers. Will supersede 'priority' if provided. Mutually exclusive with 'app'. - originator (string) - The unique id of the channel which is originating this one. - otherChannelId (string) - The unique id to assign the second channel when using local channels. - priority (long) - The priority to dial after the endpoint answers. If omitted, uses 1. Mutually exclusive with 'app'. - timeout (int) - Timeout (in seconds) before giving up dialing, or -1 for no timeout. - variables (containers) - The "variables" key in the body object holds variable key/value pairs to set on the channel on creation. Other keys in the body object are interpreted as query parameters. Ex. { "endpoint": "SIP/Alice", "variables": { "CALLERID(name)": "Alice" } } ##### play Start playback of media. Callbacks: ```javascript ari.channels.play( {channelId: val, media: val}, function (err, playback) {} ); ``` Promises: ```javascript ari.channels.play({ channelId: val, media: val }) .then(function (playback) {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id - lang (string) - For sounds, selects language for sound. - media (string) - Media URIs to play. - offsetms (int) - Number of milliseconds to skip before playing. Only applies to the first URI if multiple media URIs are specified. - playbackId (string) - Playback ID. - skipms (int) - Number of milliseconds to skip for forward/reverse operations. ##### playWithId Start playback of media and specify the playbackId. Callbacks: ```javascript ari.channels.playWithId( {channelId: val, media: val, playbackId: val}, function (err, playback) {} ); ``` Promises: ```javascript ari.channels.playWithId({ channelId: val, media: val, playbackId: val }) .then(function (playback) {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id - lang (string) - For sounds, selects language for sound. - media (string) - Media URIs to play. - offsetms (int) - Number of milliseconds to skip before playing. Only applies to the first URI if multiple media URIs are specified. - playbackId (string) - Playback ID. - skipms (int) - Number of milliseconds to skip for forward/reverse operations. ##### record Start a recording. Callbacks: ```javascript ari.channels.record( {channelId: val, format: val, name: val}, function (err, liverecording) {} ); ``` Promises: ```javascript ari.channels.record({ channelId: val, format: val, name: val }) .then(function (liverecording) {}) .catch(function (err) {}); ``` ###### Available Parameters - beep (boolean) - Play beep when recording begins - channelId (string) - Channel's id - format (string) - Format to encode audio in - ifExists (string) - Action to take if a recording with the same name already exists. - maxDurationSeconds (int) - Maximum duration of the recording, in seconds. 0 for no limit - maxSilenceSeconds (int) - Maximum duration of silence, in seconds. 0 for no limit - name (string) - Recording's filename - terminateOn (string) - DTMF input to terminate recording ##### redirect Redirect the channel to a different location. Callbacks: ```javascript ari.channels.redirect( {channelId: val, endpoint: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.redirect({ channelId: val, endpoint: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id - endpoint (string) - The endpoint to redirect the channel to ##### ring Indicate ringing to a channel. Callbacks: ```javascript ari.channels.ring( {channelId: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.ring({ channelId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id ##### ringStop Stop ringing indication on a channel if locally generated. Callbacks: ```javascript ari.channels.ringStop( {channelId: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.ringStop({ channelId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id ##### rtpstatistics RTP stats on a channel. Callbacks: ```javascript ari.channels.rtpstatistics( {channelId: val}, function (err, rtpstat) {} ); ``` Promises: ```javascript ari.channels.rtpstatistics({ channelId: val }) .then(function (rtpstat) {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id ##### sendDTMF Send provided DTMF to a given channel. Callbacks: ```javascript ari.channels.sendDTMF( {channelId: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.sendDTMF({ channelId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - after (int) - Amount of time to wait after DTMF digits (specified in milliseconds) end. - before (int) - Amount of time to wait before DTMF digits (specified in milliseconds) start. - between (int) - Amount of time in between DTMF digits (specified in milliseconds). - channelId (string) - Channel's id - dtmf (string) - DTMF To send. - duration (int) - Length of each DTMF digit (specified in milliseconds). ##### setChannelVar Set the value of a channel variable or function. Callbacks: ```javascript ari.channels.setChannelVar( {channelId: val, variable: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.setChannelVar({ channelId: val, variable: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id - value (string) - The value to set the variable to - variable (string) - The channel variable or function to set ##### snoopChannel Start snooping. Callbacks: ```javascript ari.channels.snoopChannel( {app: val, channelId: val}, function (err, channel) {} ); ``` Promises: ```javascript ari.channels.snoopChannel({ app: val, channelId: val }) .then(function (channel) {}) .catch(function (err) {}); ``` ###### Available Parameters - app (string) - Application the snooping channel is placed into - appArgs (string) - The application arguments to pass to the Stasis application - channelId (string) - Channel's id - snoopId (string) - Unique ID to assign to snooping channel - spy (string) - Direction of audio to spy on - whisper (string) - Direction of audio to whisper into ##### snoopChannelWithId Start snooping. Callbacks: ```javascript ari.channels.snoopChannelWithId( {app: val, channelId: val, snoopId: val}, function (err, channel) {} ); ``` Promises: ```javascript ari.channels.snoopChannelWithId({ app: val, channelId: val, snoopId: val }) .then(function (channel) {}) .catch(function (err) {}); ``` ###### Available Parameters - app (string) - Application the snooping channel is placed into - appArgs (string) - The application arguments to pass to the Stasis application - channelId (string) - Channel's id - snoopId (string) - Unique ID to assign to snooping channel - spy (string) - Direction of audio to spy on - whisper (string) - Direction of audio to whisper into ##### startMoh Play music on hold to a channel. Callbacks: ```javascript ari.channels.startMoh( {channelId: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.startMoh({ channelId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id - mohClass (string) - Music on hold class to use ##### startSilence Play silence to a channel. Callbacks: ```javascript ari.channels.startSilence( {channelId: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.startSilence({ channelId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id ##### stopMoh Stop playing music on hold to a channel. Callbacks: ```javascript ari.channels.stopMoh( {channelId: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.stopMoh({ channelId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id ##### stopSilence Stop playing silence to a channel. Callbacks: ```javascript ari.channels.stopSilence( {channelId: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.stopSilence({ channelId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id ##### unhold Remove a channel from hold. Callbacks: ```javascript ari.channels.unhold( {channelId: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.unhold({ channelId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id ##### unmute Unmute a channel. Callbacks: ```javascript ari.channels.unmute( {channelId: val}, function (err) {} ); ``` Promises: ```javascript ari.channels.unmute({ channelId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - channelId (string) - Channel's id - direction (string) - Direction in which to unmute audio #### deviceStates ##### delete Destroy a device-state controlled by ARI. Callbacks: ```javascript ari.deviceStates.delete( {deviceName: val}, function (err) {} ); ``` Promises: ```javascript ari.deviceStates.delete({ deviceName: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - deviceName (string) - Name of the device ##### get Retrieve the current state of a device. Callbacks: ```javascript ari.deviceStates.get( {deviceName: val}, function (err, devicestate) {} ); ``` Promises: ```javascript ari.deviceStates.get({ deviceName: val }) .then(function (devicestate) {}) .catch(function (err) {}); ``` ###### Available Parameters - deviceName (string) - Name of the device ##### list List all ARI controlled device states. Callbacks: ```javascript ari.deviceStates.list( function (err, devicestates) {} ); ``` Promises: ```javascript 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: ```javascript ari.deviceStates.update( {deviceName: val, deviceState: val}, function (err) {} ); ``` Promises: ```javascript ari.deviceStates.update({ deviceName: val, deviceState: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - deviceName (string) - Name of the device - deviceState (string) - Device state value #### endpoints ##### get Details for an endpoint. Callbacks: ```javascript ari.endpoints.get( function (err, endpoint) {} ); ``` Promises: ```javascript ari.endpoints.get() .then(function (endpoint) {}) .catch(function (err) {}); ``` ###### Available Parameters - resource (string) - ID of the endpoint - tech (string) - Technology of the endpoint ##### list List all endpoints. Callbacks: ```javascript ari.endpoints.list( function (err, endpoints) {} ); ``` Promises: ```javascript ari.endpoints.list() .then(function (endpoints) {}) .catch(function (err) {}); ``` ##### listByTech List available endoints for a given endpoint technology. Callbacks: ```javascript ari.endpoints.listByTech( function (err, endpoints) {} ); ``` Promises: ```javascript ari.endpoints.listByTech() .then(function (endpoints) {}) .catch(function (err) {}); ``` ###### Available Parameters - tech (string) - Technology of the endpoints (sip,iax2,...) ##### sendMessage Send a message to some technology URI or endpoint. Callbacks: ```javascript ari.endpoints.sendMessage( {from: val, to: val}, function (err) {} ); ``` Promises: ```javascript ari.endpoints.sendMessage({ from: val, to: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - body (string) - The body of the message - from (string) - The endpoint resource or technology specific identity to send this message from. Valid resources are sip, pjsip, and xmpp. - to (string) - The endpoint resource or technology specific URI to send the message to. Valid resources are sip, pjsip, and xmpp. - variables (containers) - undefined ##### sendMessageToEndpoint Send a message to some endpoint in a technology. Callbacks: ```javascript ari.endpoints.sendMessageToEndpoint( {from: val}, function (err) {} ); ``` Promises: ```javascript ari.endpoints.sendMessageToEndpoint({ from: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - body (string) - The body of the message - from (string) - The endpoint resource or technology specific identity to send this message from. Valid resources are sip, pjsip, and xmpp. - resource (string) - ID of the endpoint - tech (string) - Technology of the endpoint - variables (containers) - undefined #### mailboxes ##### delete Destroy a mailbox. Callbacks: ```javascript ari.mailboxes.delete( {mailboxName: val}, function (err) {} ); ``` Promises: ```javascript ari.mailboxes.delete({ mailboxName: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - mailboxName (string) - Name of the mailbox ##### get Retrieve the current state of a mailbox. Callbacks: ```javascript ari.mailboxes.get( {mailboxName: val}, function (err, mailbox) {} ); ``` Promises: ```javascript ari.mailboxes.get({ mailboxName: val }) .then(function (mailbox) {}) .catch(function (err) {}); ``` ###### Available Parameters - mailboxName (string) - Name of the mailbox ##### list List all mailboxes. Callbacks: ```javascript ari.mailboxes.list( function (err, mailboxs) {} ); ``` Promises: ```javascript ari.mailboxes.list() .then(function (mailboxs) {}) .catch(function (err) {}); ``` ##### update Change the state of a mailbox. (Note - implicitly creates the mailbox). Callbacks: ```javascript ari.mailboxes.update( {mailboxName: val, newMessages: val, oldMessages: val}, function (err) {} ); ``` Promises: ```javascript ari.mailboxes.update({ mailboxName: val, newMessages: val, oldMessages: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - mailboxName (string) - Name of the mailbox - newMessages (int) - Count of new messages in the mailbox - oldMessages (int) - Count of old messages in the mailbox #### playbacks ##### control Control a playback. Callbacks: ```javascript ari.playbacks.control( {operation: val, playbackId: val}, function (err) {} ); ``` Promises: ```javascript ari.playbacks.control({ operation: val, playbackId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - operation (string) - Operation to perform on the playback. - playbackId (string) - Playback's id ##### get Get a playback's details. Callbacks: ```javascript ari.playbacks.get( {playbackId: val}, function (err, playback) {} ); ``` Promises: ```javascript ari.playbacks.get({ playbackId: val }) .then(function (playback) {}) .catch(function (err) {}); ``` ###### Available Parameters - playbackId (string) - Playback's id ##### stop Stop a playback. Callbacks: ```javascript ari.playbacks.stop( {playbackId: val}, function (err) {} ); ``` Promises: ```javascript ari.playbacks.stop({ playbackId: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - playbackId (string) - Playback's id #### recordings ##### cancel Stop a live recording and discard it. Callbacks: ```javascript ari.recordings.cancel( {recordingName: val}, function (err) {} ); ``` Promises: ```javascript ari.recordings.cancel({ recordingName: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - recordingName (string) - The name of the recording ##### copyStored Copy a stored recording. Callbacks: ```javascript ari.recordings.copyStored( {destinationRecordingName: val, recordingName: val}, function (err, storedrecording) {} ); ``` Promises: ```javascript ari.recordings.copyStored({ destinationRecordingName: val, recordingName: val }) .then(function (storedrecording) {}) .catch(function (err) {}); ``` ###### Available Parameters - destinationRecordingName (string) - The destination name of the recording - recordingName (string) - The name of the recording to copy ##### deleteStored Delete a stored recording. Callbacks: ```javascript ari.recordings.deleteStored( {recordingName: val}, function (err) {} ); ``` Promises: ```javascript ari.recordings.deleteStored({ recordingName: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - recordingName (string) - The name of the recording ##### getLive List live recordings. Callbacks: ```javascript ari.recordings.getLive( {recordingName: val}, function (err, liverecording) {} ); ``` Promises: ```javascript ari.recordings.getLive({ recordingName: val }) .then(function (liverecording) {}) .catch(function (err) {}); ``` ###### Available Parameters - recordingName (string) - The name of the recording ##### getStored Get a stored recording's details. Callbacks: ```javascript ari.recordings.getStored( {recordingName: val}, function (err, storedrecording) {} ); ``` Promises: ```javascript ari.recordings.getStored({ recordingName: val }) .then(function (storedrecording) {}) .catch(function (err) {}); ``` ###### Available Parameters - recordingName (string) - The name of the recording ##### getStoredFile Get the file associated with the stored recording. Callbacks: ```javascript ari.recordings.getStoredFile( {recordingName: val}, function (err, binary) {} ); ``` Promises: ```javascript ari.recordings.getStoredFile({ recordingName: val }) .then(function (binary) {}) .catch(function (err) {}); ``` ###### Available Parameters - recordingName (string) - The name of the recording ##### listStored List recordings that are complete. Callbacks: ```javascript ari.recordings.listStored( function (err, storedrecordings) {} ); ``` Promises: ```javascript ari.recordings.listStored() .then(function (storedrecordings) {}) .catch(function (err) {}); ``` ##### mute Mute a live recording. Callbacks: ```javascript ari.recordings.mute( {recordingName: val}, function (err) {} ); ``` Promises: ```javascript ari.recordings.mute({ recordingName: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - recordingName (string) - The name of the recording ##### pause Pause a live recording. Callbacks: ```javascript ari.recordings.pause( {recordingName: val}, function (err) {} ); ``` Promises: ```javascript ari.recordings.pause({ recordingName: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - recordingName (string) - The name of the recording ##### stop Stop a live recording and store it. Callbacks: ```javascript ari.recordings.stop( {recordingName: val}, function (err) {} ); ``` Promises: ```javascript ari.recordings.stop({ recordingName: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - recordingName (string) - The name of the recording ##### unmute Unmute a live recording. Callbacks: ```javascript ari.recordings.unmute( {recordingName: val}, function (err) {} ); ``` Promises: ```javascript ari.recordings.unmute({ recordingName: val }) .then(function () {}) .catch(function (err) {}); ``` ###### Available Parameters - recordingName (stri