Прослушиватели событий, похоже, не запускаются

#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’. Обновите свой ответ, и я отмечу его как принятый