Easy control via asterisk manager interface (AMI).
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.
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
Having trouble? Open an issue!
The MIT License (MIT). Please see License File for more information.