Создание SMS-переводчика на Twilio с использованием Mashape

Автор: | 26.07.2026

*Ниже представлен гостевой пост Криса Исмаэля, евангелиста разработчиков в Mashape — облачной платформе API, позволяющей разработчикам находить и распространять API. Узнайте больше о Крисе здесь.*

Привет, меня зовут Крис Исмаэль, евангелист разработчиков из Mashape. В этом руководстве мы создадим телефонный сервис, который позволит вам переводить сообщения на предпочитаемый язык с помощью SMS. Сервис также перезвонит вам, чтобы воспроизвести переведенное сообщение с произношением, характерным для родного языка.

Мы сделаем это с помощью node.js и пары API:

— API Twilio для SMS и голосовых вызовов

— API от Mashape для определения языка и перевода сообщений. Мы также будем использовать API преобразования текста в речь, чтобы зачитать сообщение с произношением на родном языке.

**Исходный код доступен на Github. Попробуйте сервис, отправив SMS-сообщение на номер +1 (415) 992-9984, например: «Take me to the bar ES». «ES» означает испанский язык. Вы можете попробовать другие языки, такие как «DE», «IT» и т. д. Вы также можете перевести сообщение не на английском языке, например «Hola mundo en».**

Начнем!

**Как мы взаимодействуем с Twilio?**

Twilio позволяет нашим приложениям легко отправлять и получать сообщения и звонки. С API Twilio можно делать гораздо больше, и я рекомендую вам посетить эту страницу для обзора. Для нашего приложения нам нужно получать и отправлять SMS, а также перезванивать. Вот схема процесса от наших телефонов к Twilio, затем к нашему приложению и обратно.

**Прием SMS в Twilio** — для этого нам нужно зарегистрировать аккаунт Twilio, чтобы: а) получить номер Twilio, на который будут отправляться SMS-сообщения, и б) связать этот номер с URL-адресом нашего приложения, который будет вызываться при каждом получении SMS. Вот как это выглядит после настройки (обратите внимание, что я размыл название приложения, чтобы снизить вероятность злоупотреблений. Вы также можете настроить аутентификацию, но я оставлю это на ваше усмотрение).

Вот фрагмент кода node.js, который получает POST-запрос от Twilio в результате отправки SMS на указанный выше номер. Мы просто получаем SMS-сообщение, номер телефона отправителя и номер, на который оно было отправлено (это мой номер выше).

**Отправка SMS из Twilio** — чтобы Twilio выполнил действия, нам нужно ответить XML-файлом (они называют его TwiML), содержащим инструкции, такие как отправка SMS, звонок на телефон, воспроизведение аудио и т. д. Когда пользователь отправляет SMS на наш номер Twilio, Twilio ожидает получить TwiML обратно, чтобы знать, что делать дальше. Вот функция, которая отправляет TwiML обратно в Twilio для отправки SMS отправителю сообщения:

**Звонок с Twilio** — чтобы позвонить с Twilio, мы можем использовать их REST-эндпоинт, как описано в коде ниже. Обратите внимание, что помимо полей «From» и «To» (номера телефонов), параметр «Url» ожидает ответ TwiML с инструкциями о том, что Twilio должен делать, когда звонок будет принят. (Мы рассмотрим это в пункте 4 ниже).

**Воспроизведение аудио при ответе на звонок** — в коде ниже мы отправляем TwiML обратно в Twilio, который воспроизводит либо голос Twilio по умолчанию, либо ссылку на mp3. Это будет воспроизведено человеку, которому мы звоним с Twilio, когда он/она ответит. Также обратите внимание, что в коде ниже мы используем API Mashape для преобразования текста в речь:

**Что такое Mashape и как вызывать их API?** Mashape — это облачный рынок API, где вы можете найти интересные и полезные API для ваших приложений. Если вы разработали собственный API, вы также можете добавить его в Mashape, чтобы его могли найти больше разработчиков. Список из 40+ API для машинного обучения доступен здесь! Для этого проекта мы использовали следующие API:

— Sprawk Language detection — определяет язык сообщения

— MyMemory Translation Memory — переводит с одного языка на другой

— Text To Voice — обертка для Google Translate, сохраняющая mp3-аудио в общедоступный URL в Dropbox

Каждая из ссылок выше ведет на страницу документации Mashape. Там есть тестовая консоль и другие инструменты, помогающие разработчикам тестировать API перед использованием в приложениях.

Для использования тестовой консоли и, что важнее, для использования API в вашем приложении, необходим аккаунт Mashape. Зарегистрируйтесь, мы подождем.

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

Вы уже видели, как вызывать API Mashape в пункте 4 выше. Если вы wondering, откуда взялись значения url и X-Mashape-Authorization, вы можете изучить curl-запрос в тестовой консоли Mashape, как показано ниже:

Как вы, вероятно, заметили, там также есть примеры кода для Java, PHP, Python, Obj-C и Ruby. Изучите их.

**Сборка воедино**

Мы описали основные компоненты нашего сервиса. Надеюсь, это дало вам понимание того, как каждая часть взаимодействует. Мы не будем детально объяснять каждую строку. Вместо этого вы можете изучить полный исходный код на Github.

Главное здесь — **поток от пользователя к Twilio, затем к нашему приложению node.js и обратно**:

— Пользователь отправляет SMS на наш номер Twilio.

— Twilio вызывает наше приложение node.js, передавая SMS-сообщение и номер отправителя. (Строки 15–19 в index.js)

— Наше приложение node.js вызывает API определения языка Mashape, чтобы определить язык сообщения. Это используется для определения, с какого и на какой язык переводить. Сам перевод выполняется API перевода. (Строки 43 и 64 в index.js)

— Мы отправляем TwiML в Twilio, чтобы отправить переведенное SMS-сообщение пользователю. (Строка 91 в index.js)

— Мы также делаем REST-запрос к Twilio, инициирующий звонок пользователю. Когда пользователь отвечает, мы вызываем API Mashape для преобразования текста в речь, чтобы получить общедоступный URL mp3-аудио с переведенным голосом. Затем мы отправляем TwiML обратно в Twilio, который воспроизводит этот mp3 пользователю. (Строки 112 и 156 в index.js)

Надеюсь, это руководство было полезным. Пишите мне на chris@mashape.com, если есть вопросы, комментарии или отзывы! Удачного кодинга!