Ein erstes ARI-Beispiel
Das folgende Beispiel ist minimal. Ein Anrufer wählt eine
Dialplan-Extension, die Anwendung empfängt das StasisStart-Event,
nimmt das Gespräch an, spielt einen Soundprompt ab und legt auf.
Der Dialplan-Teil (extensions.conf):
exten => 3000,1,NoOp(Uebergabe an ARI-App)
same => n,Stasis(demo)
same => n,Hangup()
Die ARI-Anwendung als Node.js-Script. Wir benutzen das offizielle
ari-client-Modul:
// demo-app.js
// $ npm install ari-client
// $ node demo-app.js
const ari = require('ari-client');
const ARI_URL = 'http://127.0.0.1:8088';
const ARI_USER = 'meine-app';
const ARI_PASS = 'IHR-ARI-PASSWORT';
const APP_NAME = 'demo';
ari.connect(ARI_URL, ARI_USER, ARI_PASS)
.then(client => {
client.on('StasisStart', async (event, channel) => {
console.log('Channel betritt Stasis:', channel.id);
try {
await channel.answer();
// hello-world abspielen
const playback = client.Playback();
await channel.play({ media: 'sound:hello-world' }, playback);
playback.once('PlaybackFinished', async () => {
await channel.hangup();
});
} catch (err) {
console.error(err);
channel.hangup().catch(() => {});
}
});
client.on('StasisEnd', (event, channel) => {
console.log('Channel verlaesst Stasis:', channel.id);
});
client.start(APP_NAME);
})
.catch(err => {
console.error('Verbindungsfehler:', err);
process.exit(1);
});
Starten Sie die App, rufen Sie 3000 an — die App übernimmt, spielt die Ansage ab und legt auf.
|
Die offiziellen Swagger-Definitionen aller ARI-Endpoints stehen unter
|
Von hier aus weiter
Sobald die Basis läuft, baut sich ARI-Logik wie jede andere Event-getriebene Anwendung: Channels anlegen und verbinden (externe Rückrufe starten), Bridges für Konferenzen (bridge type=mixing), Recording starten/stoppen, DTMF empfangen, externe Medienquellen (Stream) einspielen. Die volle API-Liste steht unter https://docs.asterisk.org/Latest_API/API_Documentation/Asterisk_REST_Interface/.
Für Projekte, die eine komfortable Abstraktion wollen, lohnt sich ein Blick auf:
-
node-ari-client (Node.js)
-
ari-py /
aioari(Python) -
ari-go (Go)