#node.js #asterisk #asterisk-ari
#node.js #звездочка #asterisk-ari
Вопрос:
Я работаю с ARI Asterisk Node.js клиент и хотел бы прослушать определенные события, а затем выполнить действие. Насколько я понимаю, после подключения к серверу вы можете настроить несколько различных типов прослушивателей событий для событий, публикуемых через WebSockets для выполнения задач. В моем коде ниже я не получаю никаких выходных данных, хотя я запускаю эти конкретные события и могу подключиться через WSCat и посмотреть потоковую передачу событий.
Приложение, которое я создаю, должно просто прослушивать происходящие события и обновлять базу данных. Мне никогда не понадобится обращаться к приложению Node через HTTP-запрос, поэтому я возвращаю forbidden при каждом запросе на сервер. Моя конечная цель — просто разместить это приложение на сервере, реагирующем на события.
'use strict';
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const client = require('ari-client');
const util = require('util');
const server = http.createServer((req, res) => {
res.statusCode = 403;
res.end('FORBIDDEN');
});
server.listen(port, hostname, () => {
client.connect('http://127.0.0.1:8088', 'username', 'password')
.then(function(ari) {
ari.on('DeviceStateChanged', function(event) {
console.log(event);
})
ari.on('ChannelCreated', function(event) {
console.log(event);
})
ari.on('BridgeCreated', function(event) {
console.log(event);
})
ari.on('StasisStart', function(event) {
console.log(event);
})
ari.on('PeerStatusChange', function(event) {
console.log('blah', event);
})
ari.on('Dial', function(event) {
console.log('Dial', event);
})
})
.catch(function(err) {
console.log(err);
})
});
Ответ №1:
Зачем тогда создавать сервер? Вы могли бы протестировать следующее.
'use strict';
const client = require('ari-client');
const util = require('util');
client.connect('http://127.0.0.1:8088', 'username', 'password')
.then(function(ari) {
ari.on('DeviceStateChanged', function(event) {
console.log(event);
})
ari.on('ChannelCreated', function(event) {
console.log(event);
})
ari.on('BridgeCreated', function(event) {
console.log(event);
})
ari.on('StasisStart', function(event) {
console.log(event);
})
ari.on('PeerStatusChange', function(event) {
console.log('blah', event);
})
ari.on('Dial', function(event) {
console.log('Dial', event);
})
})
.catch(function(err) {
console.log(err);
});
Комментарии:
1. Это то, с чего я начал, но я только что решил свою проблему. Я пропустил добавление строки, которая была в примерах. Вам нужно вызвать
ari.start('dialer');
, чтобы заставить его функционировать должным образом. Итак, да, ваш ответ сработает, но только если вы добавите строку, о которой я упоминал, после прослушивателя событий ‘Dial’. Обновите свой ответ, и я отмечу его как принятый