Периодические действия в Deta

· nikoontelegram's blog


В этой статье мы разберём, как настроить своё приложение в deta на выполнение действий с заданной регулярностью. Это третья статья из цикла, посвящённого бесплатному хостингу deta.space, если вы не видели предыдущие две, рекомендую с ними ознакомиться:

Как это можно применить? #

Чтобы сразу привязать тему статьи к реальности, опишу несколько самых чаcтых задач, которые я решаю с помощью этого механизма.

Проверка живости других ботов #

Чем больше ботов у вас работает - тем больше вероятность что где-то что-то может сломаться, увы, и чем быстрее вы об этом узнаете и почините - тем лучше. Особенно, если это проект, за который платят деньги 😅

Поэтому рано или поздно полезность добавления мониторинга к своим ботам перевешивает лень. Самое простое, что тут можно сделать - добавить в бота ручку /ping и дёргать её из регулярно запускаемой задачи. При отсутствии ответа - посылать предупреждение администратору, т.е. себе любимому. Тогда есть шанс начать реагировать на сбой как только он произошёл, а не когда об этом узнает любимый пользователь или заказчик.

Рассылка напоминалок #

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

Мёртвые души #

На моей практике неоднократно встречались такие люди, которые заходили в бота, нажимали кнопку START и после этого пропадали навсегда. Негоже пропадать такому ценному ресурсу! Как было бы круто, если бы можно было сохранить их id после первого захода, и при отсутсвии активности в течении произвольно выбранного периода, напомнить о себе скромным сообщением с предложением продолжить диалог.

Главное - не злоупотреблять этой возможностью😈

Action! Action! Action! #

Добавление регулярно вызываемых действий происходит с помощью редактирования Spacefile, который создаётся автоматически вместе c проектом по команде space new. Как всегда, оставлю ссылку для интересующихся на оригинальную документацию.

Регулярное действие в терминологии Deta называется Action. Оно определяется в секции micros следующим образом:

1actions:
2  - id: "notifications"
3    name: "Notifications for users"
4    trigger: "schedule"
5    default_interval: "1 hour"

Экшнов может быть несколько, в данном случае мы описали один. Здесь id и name - уникальные идентификаторы экшна, trigger всегда должен быть выставлен в schedule, а default_interval позволяет задать периоды, через которые экшн будет вызываться. Периодичность запуска может варьироваться от минут до месяцев, подробнее язык задания интервалов описан здесь.

После того как вы создали секцию, разобранную выше, в Spacefile своего проекта, у вашего вебаппа будет раз в заданный период дёргаться ручка /__space/v0/actions методом POST. В ней нам и предстоит реализовать всю желаемую логику. Расширим пример из предыдущей статьи следующим кодом в функции setup_app:

1    @app.post('/__space/v0/actions')
2    async def action():
3        await bot.send_message(*your_telegram_id*, "Регулярное действие сработало!")

С помощью такого кода, подставив свой telegram_id, вы сможете убедиться, что всё работает правильно.

Итоги #

Action-ы существенно расширяют возможности deta-приложений, главное уметь правильно их готовить и обладать бурной фантазией😁

Заходите в чат, буду рад увидеть, какие ещё интересные применения для этого механизма в своих ботах вы смогли придумать. Live Long and Prosper🖖


Мой канал про разработку под телеграм: @NikoOnTelegram