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

Предисловие

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

Однако, иногда люди желают отдавать всё свободное время для помощи тем, кто попал в трудную жизненную ситуацию и в таких условиях зарождаются инициативные группы. В эти группы могут входить люди разного достатка и нет какой-то корреляции по профессии, но зачастую у них есть одна общая черта, бич. Им очень нужно дружно работать с данными. Как правило - инструментом выбирается 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-сообщество может его дать.

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

Комментарии (2)


  1. FanatPHP
    03.07.2022 10:12
    +1

    Прямо противоречивые чувства. С одной стороны, актуальной информации — один раздел и короткое видео. С другой — я раньше не знал про inline-запросы. С одной стороны, каким местом, я извиняюсь, к этому посту хаб mysql? Ну вот серьёзно? Эта БД вскользь упоминается в посте ровно один раз. Я и сам сильно мучаюсь с выбором хабов, но стараюсь всё-таки совсем за уши не притягивать. С другой — если бы не это, то я бы этот пост и не увидел.


    Но плюсик поставил. Хоть этот пост и только наполовину технический, и обрывается на самом интересном месте, но даже таких на Хабре почти не осталось. Автор, пишите ещё.


    1. Taenfox Автор
      03.07.2022 10:44

      Большое спасибо за честный отзыв!
      Да, качество написанного не вызывает восторга и у меня, но на то у меня есть причины :( Будет пища - буду писать более вдумчиво