Периодическое напоминание юзерам (push-уведомление)
Данное пособие поможет вам создать периодическое напоминание (push-уведомление) юзерам зайти в бот, если они не заходили в него в течение указанного вами времени.
Подход основан на функции «Периодической Рассылки» с Условием. Суть подхода: при нажатии указанных кнопок, бот ставит отметку времени. Если с момента последнего доступа прошло заданное админом время, то при следующей Периодической Рассылке бот отправит сообщение (напоминание) данному пользователю.
❖ Приобретение функционала
Весь функционал приобретается В ВАШЕМ БОТЕ, для этого перейдите в свой бот:☞ 🔐Админ | 🧩Расширения
ВАЖНО: Приобретение функционала для бота доступно только Создателю (хозяину) бота. Админы покупать функционал - НЕ МОГУТ!
Вам понадобится:
1. Переменная - 3 штуки☞ 🔐Админ | 🧩Расширения | 📂Переменные
2. Action-ы - 3 штуки (ПЛЮС по количеству проверяемых кнопок)☞ 🔐Админ | 🧩Расширения | 📂Action-ы
3. Плагин - Условия для Кнопки☞ 🔐Админ | 🧩Расширения | 📂Кнопки
4. Плагин - Макросы и Выражения для Кнопок☞ 🔐Админ | 🧩Расширения | 📂Кнопки
5. (НЕ ОБЯЗАТЕЛЬНО) Плагин - Бонус в Глобальной Переменной☞ 🔐Админ | 🧩Расширения | 📂Кнопки
6. Представление о том, что такое функция addl()
и bool_symb()
из Руководства по Выражениям.
7. Рассылка с Условиями☞ 🔐Админ | 🧩Расширения | 📂Рассылка
❖ Создание напоминания
1. Необходимые переменные
1.1 Создайте Глобальную переменную, значение которой будет задействовано в Условии. В переменной вы укажите время в часах для обновления даты последнего доступа (чем меньше - тем реже будет обновляться).
Переходим в вашем боте:☞ 🔐Админ | 🗄Переменные | 📘Глобальные | ➕Создать Переменную
Название: "gap_hours
" - вы можете выбрать своё.
1.2 Поскольку глобальные переменные являются текстовыми, то такой переменной необходимо присвоить начальное значение. Поэтому, не выходя из редактора переменной, присвойте ей значение 6 (шесть) - можете использовать своё значение.
1.3 Создайте Числовую переменную. В переменной будет храниться флаг отключения рассылки для отдельного юзера.
Переходим в вашем боте:☞ 🔐Админ | 🗄Переменные | 📙Цифровые | ➕Создать Переменную
Название: "reminder_off
" - вы можете выбрать своё.
1.4 Создайте переменную Даты и Времени. В переменной будет храниться дата ПОСЛЕ которой (при следующей запланированной Периодической Рассылке) можно отправлять напоминание данному юзеру.
Переходим в вашем боте:☞ 🔐Админ | 🗄Переменные | 📕Время | ➕Создать Переменную
Название: "reminder_date
" - вы можете выбрать своё.
2. Функция обновления даты
Задача функции, в переменной сохранить дату ПОСЛЕ КОТОРОЙ юзеру можно отправлять напоминание при следующей рассылке. Фактически в этой функции - сохраняя некую дату в будущем - вы определяете с какой периодичностью юзеры будут получать сообщения.
2.1 Создаём кнопку.
О том, как создать кнопку, читайте в Руководстве по Базовым Функциям.
2.2 Не выходя из "Редактора Кнопок" (если вышли - зайдите снова) нажимаем инлайн кнопку настроек [ * ].
Нажимаем «Только Админ» (кнопка не должна быть видна юзеру)
Нажимаем «Назначить Команду» - /rdate
(по этой команде вы будете обращаться к функции)
Нажимаем «Назначить Pre-Action»:
● Выбираем "Action Чисел"
Переменная для изменения: "reminder_date
"
Тип операции: Задать Значение
Значение: {dt_add(dt_now(), 24)}
Условие: нет
Функция берёт текущее время и добавляет к нему указанное количество часов (в данном примере - 24)
24
- это количество часов которое должно пройти с момента последнего доступа, прежде чем, при следующей запланированной рассылке, юзеру будет отправлено сообщение. Вы можете установить своё количество часов в зависимости от необходимости (12 - 48 и т.п.).
Наиболее проницательным, может показаться что в переменной "reminder_date
" проще сохранять время последнего доступа "сейчас", а не сразу время следующей рассылки напоминания в будущем. Но это не так. Это создаст сложности инициализации переменных для новых юзеров. Чтобы не обновлять время в переменной при каждом нажатии кнопки, в функционале присутствует задержка в несколько часов и отсчитывать её можно только от времени в переменной. Однако НОВАЯ переменная всегда возвращает время "сейчас", и отсчитывать о неё задержку - не получится, а заначит и не получится задать первое значение для нового юзера.
3. Триггер функции обновления даты
Триггер помещается в каждую кнопку нажатие которой должно говорить о том что юзер заходил в бот и напоминание отправлять ему НЕ нужно.
ПРИМЕЧАНИЕ: Чисто технически вы можете НЕ использовать подход с "Триггером" вызова "Функции Обновления Даты". Вы можете просто поместить саму функцию обновления даты в каждую кнопку (просто добавьте ей соответствующее условие). Однако данный подход является БОЛЕЕ УНИВЕРСАЛЬНЫМ (лучше подходит для ПУБЛИЧНОГО руководства) и позволяет создавать комплексные функции обновления даты - с дополнительными действиями - поэтому в данном руководстве приведён именно этот вариант реализации. Мы создаём ОДНУ функцию и обращаемся к ней из нужных нам мест.
3.1 Кнопка у вас уже должна быть создана (это любая кнопка меню вашего проекта). Если не создана - создаём.
О том, как создать кнопку, читайте в Руководстве по Базовым Функциям.
3.2 Не выходя из "Редактора Кнопок" (если вышли - зайдите снова) нажимаем инлайн кнопку настроек [ * ].
Нажимаем «Назначить Pre-Action»:
● Выбираем "Action Команд"
Команда: "/rdate
" (команда обращения в функции обновления даты)
Тип операции: Без перехода
Условие: {dt_left("%reminder_date%") < %gap_hours%}
Данный экшен сработает при нажатии кнопки и вызовет функцию обновления даты. Условие данного триггера предназначено для того чтобы не вызывать функцию обновления при КАЖДОМ нажатии. Функция будет вызываться только если в переменной юзера до следующей рассылки остаётся меньше часов чем указано в глобальной переменной "gap_hours
".
Чем МЕНЬШЕ число в глобальной переменной "gap_hours
" тем РЕЖЕ будет вызываться функция обновления времени (и тем менее точно будет работать условие Рассылки).
4. Функция отключения напоминания для отдельного юзера
Задача функции - позволить админу исключить отдельных юзеров из рассылки напоминаний вне зависимости от даты посещения бота.
4.1 Создаём кнопку.
О том, как создать кнопку, читайте в Руководстве по Базовым Функциям.
4.2 Не выходя из "Редактора Кнопок" (если вышли - зайдите снова) нажимаем инлайн кнопку настроек [ * ].
Нажимаем «Только Админ» (кнопка не должна быть видна юзеру)
Нажимаем «Назначить Команду» - /reminder
(по этой команде к функции можно будет обратиться из любого места)
Нажимаем «Назначить Pre-Action»:
● Выбираем "Action Чисел"
Переменная для изменения: "reminder_off
"
Тип операции: Задать Значение
Значение: {addl(%roff%, 1, 2)}
Условие: нет
4.3 Добавляем сообщение кнопки
От том как добавить сообщение кнопки, читайте в Руководстве по Базовым Функциям.
Сообщение кнопки:
🔔 Reminder State: {bool_symb((%roff% == 1), "❌ Reminder OFF", "✅ Reminder ON")}
Функция работает как «Кнопка Переключатель» - меняет "флаг" 0 и 1 - в переменной которая используется в условии рассылки.
В данном случае показан БАЗОВЫЙ принцип Кнопки Переключателя. Как конкретно вы реализуете отключение функции напоминания в вашем проекте - решать только вам. Это может быть:
• отдельная кнопка в профиле пользователя
• команда в самом сообщении с push-уведомлением которое позволит юзеру отключить уведомление
• функцию "Отключения" можно вообще не делать доступной для юзера и менять состояние переменной САМОМУ, вручную (при необходимости) для каждого отдельного пользователя.
5. Создание push-уведомления в рассылке
Суть рассылки состоит в том что она автоматически запускается в указанное время или с заданной периодичностью и при помощи условия отправляет сообщения только тем пользователям, дата в переменной которых соответствует заданному условию (тем кто достаточно давно не был в боте).
Создание самого уведомления, ничем не отличается от создания Периодической Рассылки с Условием. Тонкость кроется лишь в самом условии для такой рассылки. О том как создать Периодическую Рассылку с Условием смотри в «Руководстве по Рассылке».
В качестве Условия рассылки добавьте следующее Выражение:{(%reminder_off% == 0) and (dt_left("%reminder_date%", "s") < 1)}
Условие состоит в том, что если (1) напоминание не отключено для данного юзера и (2) до даты сохранённой в переменной юзера осталось меньше секунды, то сообщение такому юзеру БУДЕТ отправлено.