Подписка на блог

Контент автора в социальных сетях

Всю сознательную жизнь работаю в образовании.

В настоящее время — заместитель директора по учебно-воспитательной работе и учитель школы № 509: руковожу центром цифрового образования «ИнфинITи» школы и веду уроки информатики.
Ранее (в т.ч. по совместительству): зам. директора по информатизации школы № 509, программист СПбЦОКОиИТ, сотрудник Инспекции Комитета по образованию Санкт-Петербурга, заведующий ЦИО ИМЦ Петродворцового района, сотрудник поддержки ВКонтакте, инженер ЦИО ИМЦ Красносельского района, педагог дополнительного образования УМЦ «ИНФОБ» и лицея № 395, переводчик, индивидуальный предприниматель и проч., проч., проч.…

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

Меня можно найти: VKTelegramХабрахабрWebfolio

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

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

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

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

  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-приложение, для которого был получен токен пользователя-администратора сообщества с неограниченным сроком действия.

Подписаться на блог
Отправить
Поделиться
Запинить
Дальше