Как обрабатывать каналы в приложении очереди ARI?

Я пытаюсь немного поиграть с ARI, чтобы создать очередь, способную обслуживать несколько экземпляров asterisk. После некоторой базовой документации кажется, что ARI — это способ сделать это.

Чего я уже добился, так это простого плана нумерации, который отправляет входящий вызов в мое стазисное приложение. Как только вызов перешел в стазис, запускается событие STASIS_START, и я считаю это точкой входа в мою очередь (это моя первая проблема). После того, как звонок был получен, я помещаю некоторые записи в базу данных H2 и начинаю проигрывать мох на этом канале.

Просто для демонстрации я сразу же пытаюсь создать другой канал для свободного агента, чтобы обработать вызов.

Проблема в том, что когда я создаю канал, я должен установить приложение, и если я установлю то же приложение, я получу новое событие STASIS_START (еще одна запись в базе данных H2, что нежелательно), но в этом случае это подделка, так как я считал, что STASIS_START должен срабатывать только тогда, когда в мою «очередь» поступает новый вызов. Я думал поместить некоторые переменные в «истинные внешние вызовы», которые входят в стазис-приложение, а затем проверить, есть ли эти переменные в поступивших вызовах ... но я боюсь, что делаю что-то не так, возможно, с архитектурной точки зрения. .

Каков наилучший подход здесь?

Еще два бонусных вопроса:

  1. Зачем мне использовать мост для воспроизведения MOH для ожидающего абонента, когда я могу воспроизводить MoH прямо на этом канале? Это потому, что мост дал мне возможность записывать или захватывать события DTMF?

  2. Верно ли мое предположение, что когда Im trying to call for queue agents (in order to match these with the waiting call in the queue) I should usePOST /channels/createcombined with POST /channels/{channelId}/dialinstead of usingPOST /channels` будет использовать originate?


person Videanu Adrian    schedule 03.05.2020    source источник


Ответы (1)


Я не лучший программист ARI в мире, но что касается вашего кода, вызывающего stasisStart() во второй раз, я считаю, что у вас есть только следующие два варианта:

  1. Да, реализуйте свою первоначальную идею глобальной переменной, чтобы отметить первый вызов stasisStart и обходить его каждый раз после этого. Я попробовал этот подход, и он работает очень хорошо для меня.
  2. Если вы можете организовать свой сценарий таким образом, что ответ первого агента считается одним телефонным звонком, а передача следующему оператору считается новым телефонным звонком (хотя и с тем же каналом вызывающего абонента), тогда вы можете разделить код в двух приложениях ARI, оба из которых зарегистрированы в стазисе одновременно, где агент1 отвечает на вызов с помощью приложения1, а затем переводит вызов на приложение2.
person King David    schedule 28.12.2020
comment
С тех пор я нашел лучший вариант: используйте ari.once('StasisStart', function() {}) вместо ari.on('StasisStart', function() {}); Разница в том, что один раз будет называться... один раз! - person King David; 11.03.2021