2 заметки с тегом

программирование

Бот для акции «Помним»

В преддверии Дня Победы ежегодно и повсеместно проходят акции в формате «Бессмертного полка».

В этом году, в связи с известными коронавирусными обстоятельствами, бо́льшая часть акций перешла в онлайн-формат. В частности «Российское движение школьников» запустило акцию «Помним».

Участникам акции предлагается:

  1. Скачать файл с рамкой;
  2. Наложить слой с рамкой на слой с фото в нужном порядке (да, рамка должна быть на переднем слое, т. к. у неё есть «уголочки», которые должны быть на фотографии, а не под);
  3. Добавить подписи (желательно — уместным шрифтом);
  4. Сохранить фото.

Очевидно, что для многих потенциальных участников акции выполнение алгоритма станет не такой уж тривиальной задачей: требуются навыки работы с графическими редакторами или хотя бы онлайн-сервисами аналогичного назначения. Либо использования «костылей» вроде PowerPoint’а.

Для того, чтобы повысить потенциальную вовлечённость наших обучающихся и их родителей в акцию, мы решили поэкспериментировать и максимально оптимизировать процесс подготовки фото в рамке для публикации в школьной онлайн-колонне «Бессмертного полка».

Был реализован следующий пользовательский сценарий:

  1. Бот в сети ВКонтакте принимает в качестве входных данных фотографию, ФИО и (опционально) звание героя.
  2. Подготавливает изображение, присылает его пользователю.
  3. Предлагает пользователю выполнить публикацию в сообществе.
  4. Если пользователь соглашается, фото загружается в альбом сообщества и публикуется на стене с заранее заготовленным набором соответствующих хэштегов. Получившийся пост отправляется пользователю, который может принять решение о лайке, репосте (или каком-либо другом действии в рамках стандартного взаимодействия с соцсетью).

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

По сути сейчас нет никакой технической фильтрации ни текстового, ни графического контента, которые подаются на вход боту (кроме, разве что, «загрузите, пожалуйста, вертикальное фото»). Поэтому в целях предупреждения потенциального вандализма была организована команда модераторов, состоящая из педагогов и ребят-активистов, готовых оперативно устранять последствия актов вандализма, если таковые будут иметь место.

Вот что получилось:


Дальше — чуть-чуть технических подробностей разработки. Можете смело пропустить два следующих абзаца, если вас пугают слова и аббревиатуры PHP, API, SDK, NoSQL, «токен» или «standalone» :)

Технически взаимодействие с пользователем осуществляется через чат-бота VK, серверной частью которого является PHP-приложение, написанное с использованием официального SDK VK:

  • Для генерации изображений используются библиотеки-обёртки над GD: ImageArtist и gd-text.
  • Для хранения состояния сессии взаимодействия с пользователем используется NoSQL-хранилище Redis и его PHP-клиент Predis.
  • В целом архитектура проекта такова, что при желании можно изменить (или расширить) платформы взаимодействия с ботом на другие соцсети и/или мессенджеры, используя их API.

Взаимодействие с пользователем осуществляется от имени специально созданного сообщества, однако в процессе разработки я столкнулся с одним логически неочевидным ограничением (однако прямо оговорённым в документации): токен доступа сообщества не позволяет загружать фотографии в альбомы сообщества и создавать записи на его стене. Это возможно только с ключом доступа пользователя, обладающего правами на такие действия в конкретном сообществе. Из этой ситуации был найден следующий выход: создано техническое standalone-приложение, для которого был получен токен пользователя-администратора сообщества с неограниченным сроком действия.

 120   5 мес   Бессмертный полк   боты   программирование   школа № 509
 167   2018   TED   образование   программирование