Электронная почта сломана. Мы получаем слишком много писем. Нам приходит много ненужного. Ответ всем по умолчанию и копирование — это норма. Хуже того, смартфоны постоянно прерывают наш день уведомлениями о каждом сообщении практически без какого-либо интеллекта. Как же отсортировать почту и убедиться, что мы получаем важную информацию своевременно и в удобной форме? Недавно я открыл для себя API Context.io и увидел свет в конце тоннеля.
Кратко: Context.io — это API для вашего почтового ящика. После создания учетной записи и синхронизации её с вашим аккаунтом, вы можете извлекать любые письма, сортировать их по дате, отправителю, содержимому или множеству других параметров. Что ещё важнее, вы можете создавать вебхуки для запуска событий при изменениях в вашем почтовом ящике. Как и Twilio, они абстрагируют сложные детали за более простым интерфейсом. Более того, объединив Twilio и Context.io, вы можете создать интеллектуальный почтовый ящик, который позволит отфильтровывать важные детали и игнорировать остальное.
Начнем с простого: создадим текстовое уведомление каждый раз, когда приходит новое письмо. Да, любой смартфон покажет уведомление о новом сообщении, но давайте сначала научимся ходить, прежде чем бегать.
Все следующие примеры активно используют вебхуки Context.io. Чтобы создать свой первый вебхук, зарегистрируйте аккаунт в Context.io, зайдите в их веб-консоль и подключите хотя бы один почтовый аккаунт. По умолчанию вам понадобятся только callback_url и failure_notif_url. Остальные параметры мы обсудим позже.
Эти вебхуки работают точно так же, как голосовые и SMS URL в Twilio. Когда приходит новое письмо, Context.io выполняет HTTP POST-запрос, включая полезную нагрузку с информацией о сообщении. Полная структура полезной нагрузки описана в их документации, но основные поля, которые нас интересуют, — это account_id и message_id. Мы можем извлечь их с помощью простого PHP-кода:
Как видно выше, этот файл принимает входящую полезную нагрузку и извлекает имя отправителя и тему письма. Мы объединяем их и генерируем текстовое сообщение с нашего номера Twilio на мобильный телефон. Теперь, когда я отправляю сообщение самому себе, я получаю SMS примерно следующего содержания через несколько минут:
Теперь, когда наше доказательство концепции завершено, сделаем сообщения более полезными. Хотя вебхуки Context.io включают message_id и всех участников переписки в полезной нагрузке, они не содержат тело сообщения. Чтобы получить его, нам нужно сделать второй API-запрос:
Этот запрос использует message_id из полезной нагрузки для запроса всего тела сообщения. Мы можем получить тело как в формате HTML, так и в виде простого текста, но в данном случае мы возьмем простой текст. Это будет самый простой способ встроить его в текстовое сообщение.
*Хотя тело сообщения включает вложенные файлы, мы не будем использовать их в этих примерах. Одним из направлений улучшения может быть использование короткого кода для отправки этих вложенных изображений через MMS-сообщения.*
Объединив получение тела сообщения с предыдущим скриптом, мы получаем следующее:
Теперь, когда я отправляю себе тестовое сообщение, я получаю такое SMS через несколько минут:
Кит Кейси только что прислал письмо:
Это моя тестовая тема
Это тело моего сообщения.
—
Кит Кейси
Старший евангелист разработчиков – Остин, Техас
Найдите меня на предстоящем мероприятии:
http://bit.ly/trackDKC
Обратите внимание, что это включает подпись из самого письма. Одним из направлений улучшения может быть парсинг сообщения и удаление подписи. Это будет непростой задачей, если только вы не придумаете, как схитрить. Мы рассмотрим это в последнем разделе.
Поскольку мы уже включаем тело сообщения в текстовое сообщение, мы можем так же легко преобразовать это в телефонный звонок. В этом случае мы будем использовать TwiML для генерации серии глаголов Say, чтобы озвучить каждую часть сообщения. Первый скрипт очень похож на скрипт для SMS, который мы использовали ранее:
С другой стороны, для генерации TwiML мы делаем почти то же самое, что и при создании SMS. Сначала получаем message_id, извлекаем информацию о заголовке и теле сообщения, а затем объединяем всё с помощью Say:
Хотя в этом примере используются фразы для разделения каждого сегмента, лучший подход может заключаться в использовании разных голосов Twilio. Это даст четкое различие с минимальными усилиями.
Теперь, когда мы можем получать сообщения голосом или текстом, следующим логичным шагом будет возможность управлять ими, и хорошим аналогом здесь является голосовая почта. В нашем случае мы реализуем способ удаления сообщения, при этом действием по умолчанию будет сохранение сообщения.
В этом случае мы заменим нашу исходную структуру Say на Gather для сбора ввода одной клавиши:
И наконец, мы принимаем этот ввод и делаем последний вызов к API Context.io для фактического удаления сообщения:
Наш последний шаг возвращает нас к началу с нашими вебхуками. На данный момент вышеуказанные скрипты будут генерировать текстовое сообщение или голосовой звонок для каждого полученного сообщения. Проще говоря, это не масштабируемо для душевного спокойствия. Чтобы сделать это немного более избирательным и, следовательно, мощным, мы вернемся в консоль вебхуков Context.io и углубимся в необязательные параметры.
Используя необязательные параметры, мы можем добавить функциональность и даже упростить то, что мы уже написали. Например, установив параметр «include_body» в 1, мы можем получить тело сообщения в исходной полезной нагрузке и полностью устранить второй API-запрос. Используя параметры filter_*, мы можем ограничить вызовы вебхуков сообщениями от или к определенным адресам, только теми, которые содержат файлы, или даже теми, которые содержат файлы с определенными именами. На данном этапе мы действительно ограничены только сложностью правил, которые хотим создать.
Здесь также вступает в игру наша хитрость, упомянутая выше. Хотя обнаружение и удаление подписи из каждого письма — задача непростая, если вы пересылаете сообщения только от определенных людей, вы можете ограничить парсинг для обработки этих конкретных случаев.
Хотя вышеуказанные скрипты учитывают ряд базовых сценариев, их можно легко расширить для поддержки перемещения сообщений между папками, архивирования писем или даже использования транскрипции Twilio для составления ответов. Как только вы начинаете рассматривать текст и голос как ещё один пользовательский интерфейс, открывается множество возможностей. Если вы разовьете эти скрипты дальше, мне было бы интересно узнать, что вы создадите и как.