adonis-asterisk-ami
v0.2.0
Published
Asterisk AMI client for adonis framework
Downloads
16
Readme
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.