Создание многофункционального одноразового телефона с помощью Kotlin

Автор: | 07.08.2026

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

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

Наконец, пришло время продать ту газонокосилку, которой вы не пользовались годами, на Craigslist, но в конце объявления требуется указать номер телефона, чтобы покупатели могли связаться с вами напрямую.

Давайте разберёмся, как с помощью Kotlin и Twilio создать и развернуть приложение для одноразовых телефонов, чтобы использовать несколько номеров в таких ситуациях. Если вы хотите просто скачать код, загляните в этот репозиторий или разверните его на Heroku, нажав кнопку ниже.

— Я буду использовать IntelliJ IDEA для написания кода, но вы можете использовать любую удобную IDE, если она хорошо работает с Gradle.

— Один или несколько номеров Twilio для создания различных одноразовых телефонов. Их можно получить здесь.

Начнём с создания нового проекта Gradle в IntelliJ и добавления Kotlin (Java) в качестве библиотеки.

Я подробно описал весь процесс в первой части статьи «Отправка и получение SMS-сообщений с помощью Kotlin». Вы можете ознакомиться с ним здесь. Или просто клонируйте репозиторий следующим образом.

Открыв проект в IntelliJ, начните с правого клика по файлу `App.kt` и выберите «Run».

В браузере перейдите по адресу http://localhost:8080/sms/, и вы увидите отображение контроллера по умолчанию.

Давайте изменим одну настройку в `App.kt`, чтобы приложение знало, куда перенаправлять SMS-сообщения и звонки. Внутри функции `main` добавьте следующее:

У меня номер телефона задан как переменная окружения на компьютере. Мой коллега Доминик написал отличную статью о том, как настроить переменные окружения на Mac, Windows и Linux.

Как только вы правильно установите переменную «MY_NUMBER» для своей среды со своим номером телефона, мы будем готовы начать разработку приложения.

Мы по-прежнему хотим получать все SMS-сообщения, отправленные на наши одноразовые телефоны, но хотим, чтобы они перенаправлялись на наш личный номер. Прелесть этого подхода в том, что если нам надоест получать спам с какого-то номера, мы можем просто удалить этот номер в консоли Twilio и забыть о нём.

Откройте `SMSController.kt` и создайте новое сопоставление `forwardSMS` сразу после уже существующего.

Это новое сопоставление укажет Twilio перенаправлять все входящие SMS на наш личный номер. Сообщение будет перенаправлено, и мы всё равно будем знать, с какого номера оно было отправлено изначально.

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

Перезапустите приложение и протестируйте его, отправив, например, POST-запрос с помощью cURL:

Результатом должен быть TwiML, который укажет Twilio перенаправить сообщение.

Прежде чем настраивать наши номера Twilio, добавим перенаправление звонков в наше приложение.

Для перенаправления звонков мы будем использовать тот же принцип, что и выше, но разместим его в другом контроллере для поддержания порядка. Если вы клонировали стартовое приложение, этот контроллер у вас уже должен быть.

Создайте новый контроллер Kotlin под названием `CallController.kt` рядом с `SMSController.kt`, если его ещё нет.

В этом контроллере добавьте выделенный код или просто скопируйте всё, если контроллер пока пуст.

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

Вы также можете протестировать это, отправив POST-запрос и проверив, что возвращаемый TwiML выглядит правильно.

Прежде чем настраивать наши номера Twilio для использования приложения, нам нужно развернуть его где-то. Давайте посмотрим, как это сделать с помощью Heroku.

Если вы ещё этого не сделали, создайте аккаунт на Heroku. После регистрации и установки Heroku Toolbelt войдите в систему через терминал.

В терминале создайте новое приложение Heroku.

Если вы не создавали это приложение с нуля, а клонировали репозиторий `starter-application`, вам нужно объединить его с веткой master следующим образом:

Этот шаг можно пропустить, если вы создавали проект с нуля. Просто убедитесь, что вы находитесь в ветке master, и мы готовы отправить его на Heroku.

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

Скопируйте этот URL, так как он понадобится позже для настройки номеров Twilio.

Как и в локальной среде, нам нужно задать номер телефона в качестве переменной окружения для этого развёртывания. Вы можете сделать это, выполнив следующую команду в терминале:

Убедитесь, что вы используете свой собственный номер телефона в качестве значения для `MY_NUMBER`. Теперь мы готовы настроить наши одноразовые номера.

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

Перейдите в консоль Twilio и получите столько номеров, сколько хотите, затем настройте и сохраните их следующим образом:

Убедитесь, что вы изменили URL приложения на тот, который скопировали ранее при развёртывании на Heroku.

Теперь раздавайте эти номера вместо своего и просто ждите, когда начнут поступать сообщения и звонки.

Создавать и удалять одноразовые телефоны, когда они больше не нужны, ещё никогда не было так просто.

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

Хорошим дополнением к этому приложению было бы добавление возможности блокировки отправителей до перенаправления сообщений или звонков, а также системы голосовой почты для определённых номеров, чтобы мы никогда не пропускали звонки.

Мне бы очень хотелось увидеть, какие новые функции вы добавите. Свяжитесь со мной в Twitter @marcos_placona или напишите на почту marcos@twilio.com, чтобы рассказать об этом.