Как стать автором
Обновить

Бот волонтёра или как помочь инициативным группам по помощи нуждающимся

Время на прочтение5 мин
Количество просмотров2.3K

Дисклеймер: это не руководство по созданию бота - конечный продукт не завершён. Здесь описана проблематика и предложение поддержать разработку кодом. Я не разработчик и не стремлюсь им быть, поэтому в тексте вполне могут быть технические неточности, так как написание кода это скорее хобби. Данный текст может быть интересен начинающим разработчикам

Предисловие

Мир по умолчанию несправедлив - одни со старта получают карт-бланш и золотую ложку во рту, другие всю жизнь выживают. Между этими двумя мирами, которые, кажется, никогда не пересекаются, есть средний класс, который вроде бы уже и не выживает, иногда ездит в Турцию отдыхать, но основное время жизни отводиться зарабатыванию денег. Такие люди по-своему понимают нуждающихся и, вроде бы, готовы помогать, но транзакционно - скинуть денег, отдать вещь. Меньше всего обыватель хочет потратить несколько часов на такую благотворительность.

Однако, иногда люди желают отдавать всё свободное время для помощи тем, кто попал в трудную жизненную ситуацию и в таких условиях зарождаются инициативные группы. В эти группы могут входить люди разного достатка и нет какой-то корреляции по профессии, но зачастую у них есть одна общая черта, бич. Им очень нужно дружно работать с данными. Как правило - инструментом выбирается Google Sheets, рисуется красивая структура, а дальше случается небольшой филиал ада.

«Всего-то» 6,5к человек
«Всего-то» 6,5к человек

Дело в том, что эффективность работы с таблицами (тут не принципиально - Excel или Google Sheets) группой людей соответствует самому низкому уровню навыка среди участников группы: любую красивую структуру ломает неаккуратный Ctrl+V, а так как люди работают за идею нажатий на кнопки они не считают. Следующая итерация таблички подразумевает один из вариантов:

  1. Есть только несколько избранных, которые следят за таблицей

  2. (ни разу не видел) Происходит обучение по работе с таблицами как с инструментом

Иными словами - это прям больно.

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

Простое элегантное fail

Первое, что пришло мне в голову - нужно упорядочить всё это безобразие в БД. В голове уже нарисовалась схема таблиц, кто куда и зачем ходит. Прекрасно, подумал я, но что будет управлять данными в этой базе? Примерно неделю я систематически вечерами изучал что можно взять из готовых решений. Больше всего надежд я возлагал на Wordpress и его плагины, попробовал в том числе и WooCommerce. Мельком глянул Yii. Кучку SaaS решений типа SUITECRM и Tild`ы я не обошёл стороной (сейчас, задним числом, я думаю, что раз уж взглянул тильду, то можно было и другие платные посмотреть). В результате я получил неудовлетворительный результат - всё и везде заточено под лиды и процесс реализации услуг, а у меня тут совсем другой запрос.

Что нужно-то?

Хорошо, значит это не CRM, а что-то другое. Всё ещё хочется нечто бесплатное, потому что, хоть бюджет и есть - совершенно не хочется предлагать что-то, что в практике окажется менее удобным чем таблицы

К этому моменту у меня уже начала складываться единая концепция кто и как должен взаимодействовать с этой системой

  1. Нуждающиеся - никак её не трогают. Запросы собираются кураторами

  2. Жертвователи - должны иметь наипростейший способ предлагать свои пожертвования. При этом добавление должно быть с классификацией

  3. Кураторы - собираются запросы от нуждающихся, маршрутизируют предложения от жертвователей

  4. Администраторы - подчищают БД на предмет плохо записанных данных (несоответствие категорий, пустые предложения) и выдают права

Идейно есть и дополнительное условие, что команда волонтёров старается максимально скрывать данные нуждающихся

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

Телеграм бот?

Бот показался самым подходящим решением по ряду причин

  1. В данной команде и укрупнённом сообществе Телеграм используется как основной мессенджер и нет никаких причин думать что это изменится. В целом, эта платформа переживает очередной рост числа пользователей

  2. Этот пункт вытекает из первого - авторизация. Бот работает с конкретными пользователями Телеграм, с теми же самыми с которыми происходит общение (или не происходит вообще)

  3. Для взлома БД бота нужно знать где именно она лежит, в отличии от, например сайта на Wordpress (я имею в виду, что при любительском "развёртывании" приложения база лежит примерно на том же адресе что и веб-морда)

  4. У Телеграм ботов есть богатый функционал взаимодействия с пользователем (подробнее об этом позже)

Резюмируя выше описанное - доступ к этому приложению можно получить с любого устройства с Телеграмом внутри без дополнительного ввода кред и не сильно переживать об утечке данных

Для разных команд можно запустить несколько ботов и это будут отдельные системы.

Интерфейс

Кнопки в окне сообщений в мессенджере - это выглядит солидно. Сразу чувствуется некоторая власть над ситуацией - нажал и что-то там бумкнуло.

Я же решил попробовать использовать inline-запросы: что-то вроде Power Shell внутри. Боты с таким интерфейсом встречаются довольно редко, но самый популярный из них это @gif - отправка GIF анимаций

Такой режим смотрит на то, что вводит пользователь и выводит в окне поиска различные айтемы: ссылки или медиафайлы. В чем преимущество таких запросов:

  • в сложных операциях они работают быстрее чем череда ping-pong вопросов бота и ответов пользователя

  • если выполняются однотипные операции - запрос можно скопировать и модифицировать при каждом вводе, а не вводить заново

  • при вводе текстовой информации можно оперативно выводить нужные варианты действий, которые уже будут корректно определены

  • также при вводе запроса пользователю показывается справка что можно ввести дальше - заблудиться сложно

Пример готовой реализации интерфейса:

Реализация

Так исторически сложилось, что под новый пет проект я осваиваю новую для себя технологию и медленно прожариваюсь на начальном этапе. Так и здесь - открыл для себя Python, библиотеку aiogram - стандартный стек для ботовода из ютуба. Присыпал сверху MySQL`ом и с этим пирогом потихоньку стал спекаться: нашёл неочевидную особенность работы с классами и неприятные особенности API Телеграма, которые мешали бесшовно использовать выбранный мной интерфейс.

В итоге из всех амбиций сделать крутую штуку моего запала хватило на фундамент приложения и реализацию функций управления пользователями и несколько методов работы со справочником

Зелёное - то что готово
Зелёное - то что готово

Заключение

У многих, наверняка, есть свои пет проекты - у кого-то пара, у кого-то сотня. Абсолютное большинство из них не заслуживает траты времени на написание статьи и этот бы постигла такая участь, если бы не назначение.

Очень удобно донатить деньги (особенно когда они есть) в различные фонды - бросил и забыл. Но таким небольшим командам гораздо больше денег нужен хороший инструмент чтобы работать. И как мне кажется - IT-сообщество может его дать.

Приглашаю Вас поволонтёрить. Ознакомиться с проектом можно тут.

Теги:
Хабы:
Всего голосов 8: ↑5 и ↓3+3
Комментарии2

Публикации

Истории

Работа

Python разработчик
136 вакансий
Data Scientist
77 вакансий

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
11 сентября
Митап по BigData от Честного ЗНАКа
Санкт-ПетербургОнлайн
19 сентября
CDI Conf 2024
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн