Требуется настройка Asterisk
Требуется разовая помощь в настройке Asterisk под наши задачи.
Настройка требуется для дальнейшей интеграции SIP в наш сервис (домофония). Ниже размещаю описание стоящих перед нами задач, с которыми нужна помощь. Тут мы предлагаем наше видение решения проблемы, возможно у вас будет другой взгляд и лучшее решение - мы будем рады его обсудить.
Любые вопросы по задаче будем рады разъяснить - идеально созвониться и обсудить не в переписке.
Бюджет задачи обсудим с Вами лично.
1) Динамически регистрируемые пользователи на сервере Asterisk Server
Основной задачей для нас является автоматизации регистрации пользователей (SIP) аккаунтов. Это является и основной сложностью, требующей решения. Поскольку мы не знаем заранее, когда пользователь зарегистрируется в нашей системе, и мы не знаем, какое у него будет имя пользователя или номер телефона, мы не можем передать файл конфигурации в Asterisk. Нам нужно использовать что-то более динамичное. В Asterisk нет четкого способа решить эту проблему. Исходя из того, что мы прочитали, мы считаем, что решением данной задачи может стать база данных реального времени (real-time database), реализация которой присутствует в Asterisk. Конфигурации сохраняются в базе данных и могут быть добавлены / извлечены / удалены / обновлены динамически (CRUD). Один из способов сделать это заключается в том, что служба нашей системы подключается непосредственно к базе данных и манипулирует таблицами. Возможно, есть другой надежный способ добавить пользователей в Asterisk или альтернативные реализации данной задачи?
Для работы с решением и интеграцией с нашей системой, нам понадобятся инструкции и рекомендации по использованию базы данных в режиме реального времени, например, какой таблицей манипулировать в случае, когда нам нужно добавить нового пользователя.
2). Получать события от Asterisk в нашем сервисе
Цель использования этой функции - получать событие, когда кто-то звонит совершает звонок.
Мы видим эту реализацию сейчас так: квартира, как сущность, не является SIP-клиентом, это абстрактный клиент с идентификатором. В квартире могут быть зарегистрированы жильцы (один или более), которые также зарегистрированы как SIP-клиенты и могут участвовать в телефонных звонках. Sip-сервер Asterisk “знает”, как подключить (инициировать вызов) домофон к квартире, но он не знает, как кто из жильцов подключен к квартире, какие жильцы (users) могут принимать входящие звонки с домофона в эту квартиру)
Итак, нам нужно перехватить событие вызова в квартиру в сервисе домофонии и передать вызов первому ответившему жителю, т/к звонок доложен направляться всем жильцам, зарегистрированным в этой квартире одновременно. После того, как один из жильцов ответил на вызов – вызовы другим жильцам прекращаются. Когда наша система получает данные, в какую квартиру звонит домофон, мы извлекаем информацию о жильцах квартиры из базы данных и сообщаем всем жильцам, что у них есть входящий звонок с домофона. Это делается с помощью сигнального механизма, который включает в себя SignalR, GogglePush, Huawei Push и Apple VoIP Push.
Этот момент критически важен для системы. Жильцы, которые используют мобильные приложения, не имеют постоянного подключения к Sip. Приложение может быть свернуто, закрыто – чаще всего находится в неактивном состоянии. В этой ситуации мы должны прислать пользователю Push, чтобы установить вызов.
Первый житель, который ответит на телефонный звонок, будет подключен к звонку с домофона. Чтобы это сработало, необходимо прослушивать событие из Asterisk, это можно сделать с помощью ARI, WebSocket events.
3. Еще есть одна сложность в конфигурации sip:
Как работает сейчас:
Оба пользователя должны быть онлайн в SIP, только в этом случае пройдет звонок. В случае, если запрашиваемый пользователь не онлайн - звонок сразу сбросится (завершился)
Как нужно для приложения:
Независимо от того находится ли вызываемый абонент онлайн - sip должен продолжать ожидать соединений (продолжать звонок).
SIP сервер должен уведомлять наш сервер о запрашиваемом звонке, наш сервер, с помощью push уведомляет клиента, клиент по ответу на push подключается к sip, отвечает на звонок
Для корректной работы с решением и использованием обозначенного функционала нам понадобились бы инструкции, рекомендации по использованию событий ARI и других методов в интерфейсе, которые могли бы быть полезны для достижения наших целей. Кроме того, нам понадобилась бы инструкция, как правильно подключать клиентов описанным выше способом.
В резюме, нам нужен работающий SIP-сервер Asterisk с описанной выше рабочей моделью.
SIP-сервер должен быть развернут на тестовом сервере, если возможно, в docker, к которому нам нужно будет иметь доступ
Все шаги, описанные выше, потребуют разъяснения и инструкций по работе с ними от специалиста:
- База данных в режиме реального времени и требования к ее установке;
- Таблица базы данных в режиме реального времени и минимальные требования к информации, предоставляемой в эти таблицы;
- Наилучший способ использования CRUD, непосредственно в базе данных или с помощью некоторых методов в Asterisk API;
- Список событий, фильтрация в AMI или ARI Api, которые имеют отношение к задаче, описанной выше;
- Структурирование вызова с устройства domofon в квартиру и последующее подключение к жильцам;
- Описание наилучшего подхода к использованию ARI при ретрансляции и организации передачи вызовов между домофоном и жителями, как описано выше.