Как создать собственную альтернативу Google Call Screening для любого телефона с помощью Voximplant и Dialogflow

Некоторые из вас, возможно, читали или слышали о функции Call Screening, которую Google выпустила для своих телефонов Pixel в США. Сама идея очень крутая — когда на ваш номер телефона поступает входящий звонок, ваш виртуальный помощник начинает разговор со звонящим, вы видите чат на своем экране и можете в любой момент вмешаться и поговорить со звонящим самостоятельно. Это очень полезно в наши дни, когда 50%+ звонков являются спамом, но вы не хотите пропустить важный звонок от кого-то, кого нет в вашем списке контактов. Единственная проблема с ним — использовать его можно только на телефонах Pixel и только в США. Что ж, препятствия для их преодоления существуют, верно? Я решил, что стоит объяснить, как построить подобную функцию с помощью Voximplant и Google Dialogflow. Пойдем!

Архитектура

Я не буду тратить время на объяснение того, что такое Voximplant и что такое Dialogflow, вы можете легко найти информацию в Интернете. Опишем идею и архитектуру решения.

Я предполагаю, что у каждого уже есть свой телефонный номер, который используется ежедневно, и мы должны продолжать использовать его для получения звонков, которые мы действительно хотим получать. В этом случае для создания такой услуги, как Call Screening, нам потребуется получить второй номер телефона, который будет использоваться везде — в электронной почте, на визитной карточке, когда вы где-то заполняете формы и т. д. Этот второй номер будет переадресовывать звонки на ваш основной только в том случае, если вы этого захотите, и он будет подключен к системе НЛП (в нашем случае Dialogflow) для целей проверки вызовов. Итак, схема будет выглядеть следующим образом:

Теперь мы можем реализовать этот сервис, единственное, что мы не собираемся создавать, — это мобильное приложение, которое будет показывать диалог между нашим агентом Dialogflow и вызывающим абонентом, мы создадим очень простое веб-приложение в качестве доказательства концепции и рендеринга. диалог там. В приложении также должна быть кнопка «Вмешаться», которая скажет Voximplant соединить звонящего с вызываемым, если последний решит поговорить сам.

Выполнение

Войдите в панель управления Voximplant по адресу https://manage.voximplant.com/, используя данные своей учетной записи разработчика, и создайте новое приложение, назовем его скрининг.

Откройте раздел Номера панели управления по адресу https://manage.voximplant.com/numbers/my_numbers и купите номер телефона, который будет использоваться в качестве прокси.

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

Создайте новый сценарий в приложении скрининга и назовите его myscreening, мы будем использовать пример кода из статьи Как использовать Dialogflow Connector, но мы немного изменим его, так как нам нужно получить информацию о диалоге между вызывающим абонентом и нашим помощником, чтобы показать его вызываемому, вы можете найти код на https://github.com/aylarov/callscreening/blob/master /voxengine/scenario.js

ВАЖНО: обратите внимание, что вам потребуется изменить значение переменной server на имя вашего собственного сервера ngrok. И изменить строку 31 (ваш номер телефона = ваш реальный номер мобильного телефона, номер воксимпланта = тот, который вы купили):

outbound_call = VoxEngine.callPSTN(“YOUR PHONE NUMBER”, “VOXIMPLANT NUMBER”)

Этот код используется для функции перевода вызова, если я решу вмешаться и позволить звонящему поговорить со мной.

После того, как вы сохранили сценарий, вам необходимо подключить его к ранее купленному нами номеру телефона. Откройте раздел «Маршрутизация» приложения и создайте новое правило, нажав кнопку «Новое правило» в правом верхнем углу. Указываем какое-нибудь имя для правила (например, «allcalls»), ставим .* в поле ввода Pattern (что означает, что все звонки, поступающие на наш номер телефона, будут обрабатываться по назначенным сценариям) и добавляем сценарий в список Assigned scripts выбрав myscreening в раскрывающемся списке Доступные сценарии.

Сохраните правило.

Теперь номер телефона подключен к сценарию для обработки. Последнее, что нам нужно, это подключить бота к приложению. Откройте коннектор Dialogflow (в меню слева), нажмите кнопку Добавить агент Dialogflow в правом верхнем углу и укажите JSON-файл сервисной учетной записи вашего агента Dialogflow.

Если вам нужен пример агента, вы можете скачать его с https://github.com/aylarov/callscreening/tree/master/dialogflow, вы можете импортировать его в настройках агента. Пожалуйста, не ожидайте, что это будет умно, это всего лишь пример, вы можете сделать его лучше и поделиться своими результатами :)

Простой бэкэнд NodeJS

Давайте развернем поддерживающий бэкенд NodeJS, вы можете получить его с https://github.com/aylarov/callscreening/tree/master/nodejs

Это довольно стандартное приложение NodeJS, просто выполните следующие команды:

npm install
node index.js

Сервер будет запущен на порту 3000 на вашем локальном хосте. Нам нужно будет использовать ngrok для подключения к нему Voximplant, так как серверы Voximplant находятся в облаке. После установки ngrok:

ngrok http 3000

Вы увидите доменные имена ngrok, назначенные вашему экземпляру NodeJS на локальном хосте, скопируйте и вставьте их в сценарий (помните переменную сервера?)

Клиентское приложение

Клиентское приложение выглядит как простой чат и доступно по адресу https://github.com/aylarov/callscreening/tree/master/client.

Просто скопируйте все файлы в какую-нибудь папку на вашем веб-сервере, и все должно работать. В файле script.js измените переменную server на имя вашего сервера ngrok, а переменную callee на телефон. номер, который вы купили ранее. Сохраните файл и откройте приложение в браузере. Если все в порядке, вы должны увидеть успешное соединение WebSocket в консоли браузера.

Демо

Вы можете увидеть приложение в действии в следующем видео.

P.S. Если я нажму кнопку «Вмешаться», звонящий будет переадресован на мой номер телефона, а если я нажму «Отключить» — угадайте, что? конечно, он будет отключен.