Это приложение Sinatra представляет собой справочник сотрудников, к которому можно обращаться из любого SMS-клиента для получения контактной информации сотрудника. Для создания этого приложения нам понадобится:
— Создать модель сотрудника.
— Принимать входящие SMS.
— Искать сотрудника по имени.
— Отвечать исходящим MMS.
Первое, что нам нужно, — это база данных сотрудников. Мы будем использовать для этого DataMapper. Он позволит нам определить структуру базы данных, не беспокоясь о специфике конкретной СУБД.
Наша сущность «сотрудник» содержит несколько полей для контактной информации, включая имя, электронную почту, номер телефона и общедоступный URL с изображением сотрудника.
Теперь давайте построим логику поиска сотрудников.
Модуль `Searcher` позволяет искать сотрудников в базе данных либо по имени, либо по их уникальному идентификатору в базе данных.
При поиске с использованием имени сотрудника в качестве параметра мы вернем список сотрудников, чьи имена могут совпадать с поисковым запросом. Если мы передадим число в качестве параметра, мы будем использовать его для поиска сотрудника по его ID.
Мы будем использовать эту функцию поиска при ответе на SMS от пользователя, что мы рассмотрим далее.
Когда ваш номер получит SMS-сообщение, Twilio отправит HTTP POST-запрос на наше приложение. Это будет обработано действием `Lookup` в `EmployeeController`.
Мы проверяем наличие числового ввода (об этом позже) или выполняем поиск нужного сотрудника. Результаты упаковываются в XML и отправляются обратно в Twilio, а затем — первоначальному отправителю SMS.
Давайте подробнее рассмотрим процесс создания ответа.
Предположим, сервис находит одного сотрудника, соответствующего текстовому сообщению. В этом случае мы просто формируем ответ, содержащий контактную информацию сотрудника, включая фотографию, что делает наш ответ сообщением MMS.
Однако одиночное совпадение — не единственный сценарий. Далее мы узнаем, как обрабатывать несколько совпадений сотрудников.
Если мы не находим ни одного сотрудника, мы можем просто вернуть сообщение «Не найдено».
А как насчет множественных совпадений? В этом случае мы хотим вернуть список имен соответствующих сотрудников вместе с числовым идентификатором, который конечный пользователь может использовать для выбора. Например, если кто-то искал «Peter», он мог бы получить что-то вроде:
«`
1-Peter Parker 2-Peter Quill
«`
Давайте посмотрим, как эти параметры хранятся дальше.
При поиске сотрудника мы проверяем, является ли тело текстового ввода числом. Если это так, мы используем его для получения сотрудника по его ID. В противном случае мы используем его для поиска по имени сотрудника.
Вот и все! Мы создали работающий справочник сотрудников.
Посмотрите код на GitHub, чтобы запустить приложение самостоятельно. Там вы найдете полное решение и инструкции по установке и запуску.
Если вы разработчик Ruby, работающий с Twilio, вам могут быть интересны другие руководства.
#### Помогло ли это?