Этот номер качает: Зажигаем с языком Elixir

Автор: | 11.08.2026

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

Команда взяла за основу простую концепцию Twimlet, но решила привнести в нее собственную изюминку. Используя Elixir вместе с REST API Twilio, они в кратчайшие сроки запустили систему и начали звонить!

Они создали CRUD-приложение с помощью фреймворка Phoenix и развернули его на Heroku. Таблица базы данных PostgreSQL отслеживает номера Twilio и телефонные номера, на которые они ссылаются, сохраняя их в виде встроенных структур с использованием массива словарей (maps) и встроенной схемы Ecto в Elixir.

Все вызовы Twilio маршрутизируются в две функции, которые определяют, что делать при входящем SMS-сообщении или звонке. Функция для SMS отправляет электронное письмо, а функция для звонка по очереди пытается набрать каждый «реальный» номер телефона, связанный с «виртуальным» номером Twilio.

Поступает звонок:

Приватная функция `try_real_number` ищет вызываемый номер в базе данных, пытается набрать «реальный» номер (например, телефон Анри) и задает HTTP-обратный вызов (callback) для Twilio, отслеживая текущий индекс попытки. Если никто не отвечает или звонок поступает в нерабочее время, в Twilio отправляется инструкция TwiML .

URL действия обратного вызова, указанный в инструкции , использует деструктуризацию для запуска различных процедур в зависимости от типа действия:

— Уведомления о записи голосовой почты пересылаются другому пользователю по электронной почте.

— Завершенные звонки заканчиваются.

— Попытки неотвеченных звонков инициируют новый вызов функции `try_real_number` со следующим «реальным» номером из списка.

Функция `answer` просто оборачивает фрагмент XML в ответ Twilio:

Поскольку для Elixir не существовало специальной вспомогательной библиотеки, Анри сказал, что сильно полагался на систему логирования в консоли. «Это было проще простого!»

Анри создавал это решение с учетом собственных потребностей. «Это не потребовало много работы. Это было идеально», — сказал он. Но после того, как он поделился им с друзьями из местного сообщества стартапов, людям оно очень понравилось, и они тоже захотели начать им пользоваться. «Наличие номера Twilio может принести им много пользы, как и нам». Они запустили сайт thisnumber.rocks, чтобы и другие люди, даже без технических знаний, могли обзавестись продвинутой системой переадресации звонков.

Виртуальный номер для фрилансеров и небольших организаций с использованием Twilio https://t.co/JHB7YTpbIA pic.twitter.com/iywZwsCPNU

— Simon Ashley (@simonashley) 14 марта 2017 г.

Вдохновились ли вы на то, чтобы начать создавать собственное решение с нуля, или вам больше по душе следовать руководству, чтобы начать работу на thisnumber.rocks, — мы всегда рады слышать о том, чем вы занимаетесь.

Не стесняйтесь написать по адресу:

— Email: mspeir@twilio.com

— Twitter: @meganspeir

— Github: meganspeir