Skip to main content

Периодическое напоминание юзерам (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) до даты сохранённой в переменной юзера осталось меньше секунды, то сообщение такому юзеру БУДЕТ отправлено.