adonis-asterisk-ami

0.2.0 • Public • Published

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 provider in bootsrap/app.js in the aceProviders:

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

And add commands in commands:

const commands = [
  ...
  'Adonis/Commands/Ami:Listen',
  'Adonis/Commands/Ami:Action',
  'Adonis/Commands/Ami:Dongle:Sms',
  'Adonis/Commands/Ami:Dongle:Ussd'
  ...
]

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.

Readme

Keywords

Package Sidebar

Install

npm i adonis-asterisk-ami

Weekly Downloads

8

Version

0.2.0

License

MIT

Unpacked Size

16.2 kB

Total Files

11

Last publish

Collaborators

  • enniel