Skip to content

enniel/adonis-asterisk-ami

Repository files navigation

Adonis Asterisk AMI

Easy control via asterisk manager interface (AMI).

Installation and configuration

Using npm:

npm i adonis-asterisk-ami --save

Using yarn:

yarn add adonis-asterisk-ami

Once it's installed, you can register the service providers in bootsrap/app.js:

const providers = [
  ...
  'adonis-asterisk-ami/providers/AsteriskAmiProvider',
  ...
]

...

const aceProviders = [
  ...
  'adonis-asterisk-ami/providers/CommandsProvider',
  ...
]

Then add ami.js file in config folder with this code:

'use strict'

const Env = use('Env')

module.exports = {
  // client's parameters
  reconnect: false,
  maxAttemptsCount: 30,
  attemptsDelay: 1000,
  keepAlive: false,
  keepAliveDelay: 1000,
  emitEventsByTypes: true,
  eventTypeToLowerCase: false,
  emitResponsesById: true,
  addTime: false,
  eventFilter: null,
  // connection parameters
  host: Env.get('ASTERISK_AMI_HOST', '127.0.0.1'),
  port: Env.get('ASTERISK_AMI_PORT', 5038),
  username: Env.get('ASTERISK_AMI_USERNAME', ''),
  secret: Env.get('ASTERISK_AMI_SECRET', ''),
  dongle: {
    sms: {
      device: Env.get('ASTERISK_AMI_SMS_DEVICE', 'dongle1')
    }
  }
}

For more information abount client's parameters see documentation.

Usage

Connection options

You are can specify connection parameters for all commands.

Option Description
--host Asterisk AMI server host
--port Asterisk AMI server port
--username Asterisk AMI server username
--secret Asterisk AMI server secret

Listen ami events

./ace ami:listen
// app/Listeners/AsteriskAmi.js
'use strict'

const AsteriskAmi = exports = module.exports = {}

AsteriskAmi.onEvent = function * (event) {
  console.log(`${event.Event} handled`)
}

// bootsrap/events.js
...
Event.when('ami.events.*', 'AsteriskAmi.onEvent')
...

For more information about event property see asterisk-ami-client documentation.

If would you like to see event log in the console use debug option

./ace ami:listen --debug

Send ami action

./ace ami:action <action> --props='<key1>:<value1>;<key2>:<value2>' --id=<UNIQUE_ID?>
const props = _.reduce({
  <key>: <value>,
  <key2>: <value2>
}, (result, value, key) => {
  if (result.length) {
    result = `${result};`
  }
  result += `${key}:${value}`
  return result
}, '')

// Foo:Bar,ActionID:<UNIQUE_ID?>
Ace.call('ami:action', [<action>], {
  props,
  id: <UNIQUE_ID?>
});

Options props and id is not required.

Send sms messages using chan dongle

./ace ami:dongle:sms <phone> <message> <device?> --id=<UNIQUE_ID?>
Ace.call('ami:dongle:sms', [
  <phone>,
  <message>,
  <device?>,
], {
  id: <UNIQUE_ID?>
});

For sending long messages use pdu mode.

./ace ami:dongle:sms <phone> <message> <device?> --pdu --id=<UNIQUE_ID?>
Ace.call('ami:dongle:sms', [
  <phone>,
  <message>,
  <device?>,
], {
  pdu: true,
  id: <UNIQUE_ID?>
});

Argument device and option id is not required.

Send ussd commands using chan dongle

./ace ami:dongle:ussd <device> <ussd> --id=<UNIQUE_ID>
Ace.call('ami:dongle:ussd', [
  <ussd>,
  <device>
], {
  id: <UNIQUE_ID>
});

Option id is not required.

Without Adonis App

See bin folder

Credits

Support

Having trouble? Open an issue!

License

The MIT License (MIT). Please see License File for more information.