Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii

Пишем свой стартап: отправка напоминаний

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Dynamic Ajax Forms for Scheduling
Building Your Startup: The Dashboard Foundation

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

Final product image
What You'll Be Creating

Этот учебник является частью серии статей Пишем свой стартап на PHP на Envato Tuts +. В этой серии я направляю вас через запуск приложения от концепции до готового продукта, используя приложение Планировщик встреч в качестве реального приложения. На каждом шаге я делаю релиз кода планировщика собраний в качестве примеров с открытым исходным кодом, из которых вы можете узнать что-то новое. Я также рассмотрю связанные с запуском бизнес-вопросы по мере их возникновения.

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

Если вы еще не опробовали Планировщик собраний, то обязательно запланируйте свою первую встречу. Я участвую в комментариях ниже, так что скажите мне, что вы думаете! Меня особенно интересует, если вы хотите предложить новые функции или темы для будущих учебников.

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

Мониторинг времени для напоминаний

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

Запуск фоновых задач

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

Этот скрипт вызывает MeetingReminder::check(), который находит напоминания о встречах и отправляет их в метод process():

Обработка напоминания

Метод MeetingReminder::process() собирает сведения, необходимые для создания электронного напоминания. Сюда входят получатель напоминания, подробности собрания и время:

Функция User::checkEmailDelivery() проверяет, что пользователь не заблокировал электронные письма из системы (или от определенных людей). Это гарантирует, что вы можете отправить напоминание:

Ниже приведен метод User::checkEmailDelivery. Во-первых, он проверяет, полностью ли заблокирован весь адрес электронной почты (надеюсь, что нет) или сообщение отправлено заблокированным пользователем:

Шаблон электронной почты для напоминания

В эпизоде Доставка приглашения на встречу я написал об отправке сообщений электронной почты в рамках Yii Framework. В эпизоде об обновлении шаблонов электронной почты я описал обновление шаблонов для наших новых отзывчивых шаблонов на основе Oxygen.

Вот новый шаблон электронной почты reminder_html.php:

Он включает дату, время и выбранное местоположение (с адресом и ссылкой на карту). Я также добавил несколько полезных параметров с исходной командой "Сообщить, что я опаздываю":

Meeting Planner - Reminder of Your Meeting Email

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

Возможно, в конечном итоге мобильная версия Планировщика собраний будет знать ваше местоположение GPS и сообщит им, насколько далеко вы находитесь. Я начал отслеживать подобные идеи в Асане для планирования продукта. Я спрошу у редакторов Envato Tuts +, если я могу написать о реализации этой функции в следующем учебнике.

Meeting Planner Reminders - Game of Thrones Daenerys Targaryen and Dragon our editorial goddess

Улучшения для напоминаний

В электронном письме с напоминанием можно использовать несколько улучшенных функций:

  • Отправка письма о том, что кто-то опаздывает.
  • Отображение контактной информации других участников, таких как номера телефонов и адреса электронной почты. Письмо о том, что человек опаздывает, может показывать только контактную информацию человека, который работает с опозданием.
  • Показывать статическую карту Google, показывающую местоположение собрания.
  • Возможность запроса на перенос встречи.
  • Ссылка не на только карту, но и направления к местоположению.
  • Ссылка для настройки напоминаний.

Оказывается, для большинства этих функций требуется больше работы, чем в этом учебнике.

Например, идея отправки письма об опоздании кажется простой функцией, не так ли? Это хороший пример проблемы, которую MVC иногда накладывает на разработчиков. Внедрение функции позднего оповещения по электронной почте требует кода в нескольких файлах, включая новый шаблон электронной почты.

Реализация функции об опоздании

Meeting Planner Reminders - Late Notice Email

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

  • В Письме с напоминанием нужно добавить ссылку на новую комнаду
  • COMMAND_RUNNING_LATE должен был быть определен в модели Meeting и контроллере, и нужно было отобразить подтверждающее сообщение.

Вот пример того, что вы видите после того, как просили отправить последнее уведомление:

Meeting Planner Reminders - Late Notice Confirmation
  • Метод sendLateNotice() должен был быть создан в Meeting.php
  • Необходимо было создать шаблон электронной почты late-html.php. Это включает в себя возможность для другого участника сообщить о том, что они «опаздывают».
  • Метод UserContact::buildContactString() должен включать контактную информацию для человека, который опоздывает.
  • ACTION_SENT_RUNNING_LATE должен был быть создан для записи отправки оповещения от имени этого человека в MeetingLog.
  • Метод sendLateNotice() должен был проверить журнал и отобразить сообщение об ошибке, если последнее уведомление уже было отправлено один раз.

Вот что уже отображается, когда уведомление об опоздании уже отправлено:

Meeting Planner Reminders - Error message - Late Notice Already Sent

Понадобилось много кода для реализации того, что казалось простым дополнением.

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

Внедрение отображения контактной информации участника

Хотя эта функция уже существовала для файлов iCal, мне нужно было завершить эту функцию для приглашений на собрание по электронной почте. Поэтому я расширил UserContact::buildContactString($user_id, $mode) для $mode='html'.

Вот обновленный код:

Я уверен, что это понадобится, когда мы перейдем к альфа-и бета-тестированию, но функциональность уже есть.

Вы можете увидеть контактные данные, отображаемые в готовом уведомлении выше, но вот сегмент, который он генерирует:

Meeting Planner Reminder - Contact Details

Улучшаем напоминания

С этими мини-функциями всё прошло насколько хорошо, что я решил добавить ссылку для настройки ваших напоминаний также и в оригинальное письмо.

Со всем этим новым кодом я уверен, что в течение следующих нескольких недель я буду улучшать функцию напоминаний и регулярно ее исправлять. Однако, поскольку Планировщик собраний собрался вместе, часто возможно добавление новой функциональности - часто с небольшой доработкой. Чистая модель данных и структура MVC делают регулярные инкрементные улучшения относительно простыми.

Все это - то, что делает создание стартапа забавным и сложным. И работу с драконами тоже (иногда я не могу поверить, что они мне платят).

Что дальше?

Планировщик собраний добился огромного прогресса в последние несколько месяцев. Я начинаю экспериментировать с WeFunder, основываясь на реализации новых правил SEC. Пожалуйста, обратите внимание на наш профиль. Я надеюсь написать об этом больше в следующем учебнике.

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

Надеюсь, что вам понравился этот эпизод. Следите за предстоящими учебниками в нашей серии статей Пишем свой стартап на PHP - впереди у нас еще много работы.

Пожалуйста, не стесняйтесь добавлять ваши вопросы и комментарии ниже; я активно участвую в этих обсуждениях. Вы также можете связаться со мной в Twitter @reifman.

Ссылки по теме

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.