Для телеграма разработали SIP-коннектор (@siptg). Voximplant – это платформа телефонии. Правильно, они могут прекрасно работать в паре и сегодня мы покажем, как. Добро пожаловать под кат!
Регистрируем софтфон в Voximplant
SIP-коннектор может работать в двух режимах: софтфон и SIP-шлюз. Мы рассмотрим первый вариант, так как он позволяет зарегистрировать бота «под видом» внутреннего юзера вашего приложения Voximplant. Именно поэтому сперва надо создать приложение Voximplant и пользователей внутри него.
- Зайдите в ваш аккаунт https://manage.voximplant.com/.
- Перейдите в раздел «Приложения» и создайте приложение с именем sip.
- Находясь внутри приложения, перейдите на вкладку «Пользователи» и создайте пользователя usertelegram. Не забудьте про пароль, он скоро понадобится:
- Здесь же создайте пользователя userbob (он нам пригодится чуть позже).
Внимание. На момент написания статьи коннектор @siptg имеет особенность: при исходящих звонках он приводит имена пользователей к нижнему регистру. Поэтому необходимо создавать пользователей Voximplant как указано: usertelegram, userbob и т.д. Если вы назовете пользователей в стиле camelCase, то телеграм будет принимать входящие звонки, а вот исходящие работать не будут.Теперь идем на сторону мессенджера. Сам софтфон находится под именем @siptg, а его настройки под именем @siptg_bot – открываем их. Нажимаем Start, далее вводим команду /tariff и выбираем Free (для демонстрации его более чем достаточно, однако у него есть ограничения – например, после 5 неуспешных звонков наступает временная блокировка. Точное время разблокировки можно будет увидеть также с помощью команды /tariff).
Затем используем команду /softphone и клацаем кнопку New. Здесь поочередно надо ввести данные пользователя Voximplant и нажать Apply. Поле server состоит из sip. + имя аккаунта Voximplant + .voximplant.com:
Если все введено правильно, зарегистрированный клиент будет подсвечен зеленым светом.
Отлично, теперь можем проверить, приходят ли в телеграм…
… входящие звонки
Для этого необходимо на стороне Voximplant зайти в приложение sip, чтобы создать сценарий и правило обработки звонков. Сценарий простейший: когда в облако приходит звонок от пользователя приложения sip, облако звонит второму пользователю того же приложения и соединяет их. Выглядит это так:
VoxEngine.addEventListener(AppEvents.CallAlerting, e => {
const inc = e.call
const out = VoxEngine.callUser(e.destination, e.callerid)
VoxEngine.easyProcess(inc, out)
})
Сохраните сценарий под именем callUser. Оставаясь там же, в приложении sip, переключитесь на вкладку «Правила» и создайте правило call user rule с такими настройками (обратите внимание на маску):
Помните пользователя userbob, созданного в самом начале? Отлично, залогиньтесь с его именем и паролем в нашем вебфоне:
Введите usertelegram и нажмите «Позвонить» – вы получите входящий звонок от бота @siptg на всех устройствах, где у вас открыт мессенджер.
Исходящие звонки пользователям Voximplant
Сценарий и правило – те же самые, ничего нового создавать не нужно.
Единственный нюанс я уже упоминал выше – имена пользователей Voximplant должны быть написаны в нижнем регистре. Если же имя пользователя будет userBob, то когда вы укажете его, бот @siptg в итоге преобразует его в userbob, а такого пользователя в вашем приложении Voximplant попросту нет. Как итог – ошибка дозвона.Откройте бота @siptg, отправьте ему сообщение userbob и увидите якобы входящий звонок от бота (контринтуитивно, но уж как есть).
Нажмите на зеленую трубку и после этого звонок поступит на софтфон в браузере, то есть пользователю userbob.
Исходящие звонки на сотовые номера
Для того, чтобы телеграм-бот мог звонить на стационарные номера, понадобятся:
- еще один сценарий и правило;
- валидный номер телефона для коллбэка (Caller ID). Это может быть либо ваш личный номер телефона, который вы подтвердили в панели, либо номер, купленный у Voximplant. Обратите внимание, что тестовые номера не подходят для этих целей.
В приложении sip создайте сценарий callPSTN с таким кодом (обратите внимание на строку 4 – здесь надо подставить валидный номер):
VoxEngine.addEventListener(AppEvents.CallAlerting, e => {
const inc = e.call
const out = VoxEngine.callPSTN(e.destination, "real callback number")
VoxEngine.easyProcess(inc, out)
})
Затем создайте правило call PSTN rule, маску можно оставить по умолчанию:
Важно: это новое правило переместите вниз в списке правил. Таким образом, у него понизится приоритет и оно будет срабатывать только если не выполнилось правило для user.*
Отлично, теперь можно звонить: отправляете боту @siptg целевой номер телефона, он показывает вам интерфейс звонка, нажимаете зеленую трубку и звонок уходит на указанный мобильный/городской номер.
Вывод
Интеграция телеграма с облачной телефонией может быть удобна бизнесу, ведь это еще один способ «дотянуться» до клиентов – читай, omnichannel. Также это можно применить и внутри компании, если телеграм – ваш корпоративный мессенджер. Пожалуй, для личных нужд это тоже может быть востребовано. Возможность делать звонки из телеграма актуальна в любом случае, когда вы используете этот мессенджер, а тот, кому вы хотите позвонить – не использует. В итоге и вам не надо менять среду для общения – звонок идет прямо из мессенджера, и для вашего собеседника ничего не меняется, он получит звонок на свой софтфон/телефон.
avegorov
Спасибо за упоминание нашей платформы! Хочу уточнить: в чём важность регистрозависимой политики в отношении имени пользователя? Это очень редкий случай, когда регистр оказался важен (ведь ни в почте, ни в самом Telegram регистр в адресе/имени значения не имеет).
nvpushkarskiy2 Автор
Регистрозависимые имена у нас реализованы как еще одна степень гибкости – разработчик при желании может пользоваться camelCase'ом, чтобы длинные имена были более читаемые, в том числе в логах.
Подозреваю, что Voximplant – не единственная платформа, у кого имена юзеров регистрозависимы, однако вы же не были обязаны проверять, у каких платформ это реализовано, а у каких – нет. Если захотите, то внесете изменения, мы же в статье просто рассказали об этом нюансе. В любом случае, это не критичный момент. Ваш коннектор работает исправно – это главное.