В 2010 году мы опубликовали статью, в которой подробно рассказывалось, как создать простое приложение для групповой переписки с использованием Twilio и ASP.NET MVC. За четыре года многое изменилось, и мы решили обновить эту статью. В этом посте я покажу, как можно использовать последние версии Twilio и ASP.NET MVC для создания простого приложения для групповой переписки.
Я расскажу, как обрабатывать входящие сообщения, управлять запросами на подписку и отписку, а самое главное — как пересылать сообщения от участников группы остальным её членам.
Обратите внимание, что хотя я буду использовать ASP.NET MVC для создания своего приложения, представленные концепции легко применимы практически к любому другому языку программирования или фреймворку.
Наше простое приложение для групповой переписки основано на трёх базовых концепциях: участники группы, команды и сообщения. В нашем приложении участники могут присоединиться к группе, отправив команду **START** на телефонный номер Twilio группы. После присоединения любые сообщения, отправленные на номер группы, будут пересылаться всем остальным участникам. Чтобы оставить место для номера отправителя в пересылаемом сообщении, длина сообщений ограничена 140 символами. Для выхода из группы участники могут отправить команду **STOP**.
Когда пользователи отправляют сообщения на телефонный номер Twilio группы, Twilio инициирует POST-запрос к моему приложению на ASP.NET MVC. Задача этого приложения — обработать эти сообщения: либо добавить или удалить участников из группы на основе описанных выше команд, либо транслировать текстовые сообщения участникам группы через REST API. В любом случае моё приложение отвечает отправителю исходного сообщения, возвращая набор команд TwiML в ответ на POST-запрос Twilio.
На изображении ниже показан базовый поток работы приложения:
Для создания этого приложения я буду использовать Visual Studio 2013, .NET 4.5, ASP.NET MVC 5 и EntityFramework 6. Также я буду использовать библиотеку Twilio .NET Helper Library, о которой можно узнать больше на сайте Twilio.
Для моего приложения необходимо хранить телефонные номера участников группы, чтобы при поступлении сообщений я знал, кому их транслировать. Для этого я создам простую модель данных с использованием Entity Framework 6, но вы можете использовать любую стратегию хранения данных по своему усмотрению.
При работе с Entity Framework я предпочитаю использовать подход «code-first», поэтому начинаю создание модели данных с класса контекста базы данных, а затем создаю простой класс модели Members:
На этом работа с бэкендом завершена. Entity Framework позаботится о создании самой базы данных при запуске приложения.
Теперь, когда у меня есть бэкенд, мне нужно создать новый контроллер MVC и метод действия, который будет обрабатывать входящие POST-запросы от Twilio каждый раз при получении текстового сообщения. Вся обработка сообщений будет выполняться внутри метода действия *IncomingMessage*.
Обратите внимание, что при определении метода действия *IncomingMessage* я включил три параметра метода: *To*, *From* и *Body*. Когда Twilio отправляет POST-запрос, он включает несколько параметров в формате формы. Используя функцию привязки моделей ASP.NET MVC, я могу определить набор параметров метода, имена которых совпадают с входящими параметрами формы, и ASP.NET MVC автоматически сопоставит их с параметрами моего метода. Это позволяет мне узнать, от кого пришло входящее сообщение, куда оно направлено и что оно содержит, чтобы обработать его.
Обработка начинается с проверки наличия одной из четырёх поддерживаемых команд в теле сообщения. Если найдена поддерживаемая команда, приложение добавляет или удаляет телефонный номер из группы соответствующим образом.
Методы управления членством в группе реализованы следующим образом. Вы можете заменить эту реализацию на любой предпочитаемый вами метод доступа к данным.
Если сообщение содержит любой другой текст, я сначала проверяю, является ли отправитель существующим участником группы, и если да, то пересылаю сообщение всем остальным участникам группы.
Наконец, я хочу уведомить отправителя о том, что его сообщение обработано, для чего отвечаю на POST-запрос Twilio с помощью TwiML. Twilio выполняет этот TwiML, отправляя ответное текстовое сообщение первоначальному отправителю.
Как я показал в этом посте, создать приложение для групповой переписки с помощью Twilio и ASP.NET MVC очень просто. Если вы хотите настроить этот пример для собственного использования, ознакомьтесь с исходным кодом на GitHub. Легко создать бесплатную учётную запись Twilio и начать общение!
Конечно, существует множество способов расширить это приложение. Вот несколько идей, чтобы начать:
— Требовать PIN-код для присоединения к группе
— Позволять участникам устанавливать отображаемое имя
— Обрабатывать сообщения длиннее 140 символов
— Добавить возможность отключать уведомления на X часов
— Позволять участникам указывать часы тишины
Мне было бы интересно узнать, как вы используете Twilio для создания собственных приложений для групповой переписки, так что пишите мне на почту или в Twitter со своими идеями.