Дисклеймер: это не руководство по созданию бота - конечный продукт не завершён. Здесь описана проблематика и предложение поддержать разработку кодом. Я не разработчик и не стремлюсь им быть, поэтому в тексте вполне могут быть технические неточности, так как написание кода это скорее хобби. Данный текст может быть интересен начинающим разработчикам
Предисловие
Мир по умолчанию несправедлив - одни со старта получают карт-бланш и золотую ложку во рту, другие всю жизнь выживают. Между этими двумя мирами, которые, кажется, никогда не пересекаются, есть средний класс, который вроде бы уже и не выживает, иногда ездит в Турцию отдыхать, но основное время жизни отводиться зарабатыванию денег. Такие люди по-своему понимают нуждающихся и, вроде бы, готовы помогать, но транзакционно - скинуть денег, отдать вещь. Меньше всего обыватель хочет потратить несколько часов на такую благотворительность.
Однако, иногда люди желают отдавать всё свободное время для помощи тем, кто попал в трудную жизненную ситуацию и в таких условиях зарождаются инициативные группы. В эти группы могут входить люди разного достатка и нет какой-то корреляции по профессии, но зачастую у них есть одна общая черта, бич. Им очень нужно дружно работать с данными. Как правило - инструментом выбирается Google Sheets, рисуется красивая структура, а дальше случается небольшой филиал ада.
Дело в том, что эффективность работы с таблицами (тут не принципиально - Excel или Google Sheets) группой людей соответствует самому низкому уровню навыка среди участников группы: любую красивую структуру ломает неаккуратный Ctrl+V
, а так как люди работают за идею нажатий на кнопки они не считают. Следующая итерация таблички подразумевает один из вариантов:
Есть только несколько избранных, которые следят за таблицей
(ни разу не видел) Происходит обучение по работе с таблицами как с инструментом
Иными словами - это прям больно.
Пару месяцев назад я внезапно обнаружил у себя силы присоединиться к команде волонтёров, которые занимаются тем, что помогают беженцам вещами, советом и делом. Вошёл я в команду на правах человека, который поможет с организацией информационной работы в гугл-табличках - там содержалась информация по запросам от нуждающихся и предложениями от жертвователей. По началу всё было довольно безобидно, но чем дальше тем больше проблем возникало
Простое элегантное fail
Первое, что пришло мне в голову - нужно упорядочить всё это безобразие в БД. В голове уже нарисовалась схема таблиц, кто куда и зачем ходит. Прекрасно, подумал я, но что будет управлять данными в этой базе? Примерно неделю я систематически вечерами изучал что можно взять из готовых решений. Больше всего надежд я возлагал на Wordpress и его плагины, попробовал в том числе и WooCommerce. Мельком глянул Yii. Кучку SaaS решений типа SUITECRM и Tild`ы я не обошёл стороной (сейчас, задним числом, я думаю, что раз уж взглянул тильду, то можно было и другие платные посмотреть). В результате я получил неудовлетворительный результат - всё и везде заточено под лиды и процесс реализации услуг, а у меня тут совсем другой запрос.
Что нужно-то?
Хорошо, значит это не CRM, а что-то другое. Всё ещё хочется нечто бесплатное, потому что, хоть бюджет и есть - совершенно не хочется предлагать что-то, что в практике окажется менее удобным чем таблицы
К этому моменту у меня уже начала складываться единая концепция кто и как должен взаимодействовать с этой системой
Нуждающиеся - никак её не трогают. Запросы собираются кураторами
Жертвователи - должны иметь наипростейший способ предлагать свои пожертвования. При этом добавление должно быть с классификацией
Кураторы - собираются запросы от нуждающихся, маршрутизируют предложения от жертвователей
Администраторы - подчищают БД на предмет плохо записанных данных (несоответствие категорий, пустые предложения) и выдают права
Идейно есть и дополнительное условие, что команда волонтёров старается максимально скрывать данные нуждающихся
Также уже понятно, что нужна удобная система ввода и менеджмента данных - на тот момент у моей команды появился склад вещей, на котором нужно периодически проводить инвентаризацию
Телеграм бот?
Бот показался самым подходящим решением по ряду причин
В данной команде и укрупнённом сообществе Телеграм используется как основной мессенджер и нет никаких причин думать что это изменится. В целом, эта платформа переживает очередной рост числа пользователей
Этот пункт вытекает из первого - авторизация. Бот работает с конкретными пользователями Телеграм, с теми же самыми с которыми происходит общение (или не происходит вообще)
Для взлома БД бота нужно знать где именно она лежит, в отличии от, например сайта на Wordpress (я имею в виду, что при любительском "развёртывании" приложения база лежит примерно на том же адресе что и веб-морда)
У Телеграм ботов есть богатый функционал взаимодействия с пользователем (подробнее об этом позже)
Резюмируя выше описанное - доступ к этому приложению можно получить с любого устройства с Телеграмом внутри без дополнительного ввода кред и не сильно переживать об утечке данных
Для разных команд можно запустить несколько ботов и это будут отдельные системы.
Интерфейс
Кнопки в окне сообщений в мессенджере - это выглядит солидно. Сразу чувствуется некоторая власть над ситуацией - нажал и что-то там бумкнуло.
Я же решил попробовать использовать inline-запросы: что-то вроде Power Shell внутри. Боты с таким интерфейсом встречаются довольно редко, но самый популярный из них это @gif - отправка GIF анимаций
Такой режим смотрит на то, что вводит пользователь и выводит в окне поиска различные айтемы: ссылки или медиафайлы. В чем преимущество таких запросов:
в сложных операциях они работают быстрее чем череда ping-pong вопросов бота и ответов пользователя
если выполняются однотипные операции - запрос можно скопировать и модифицировать при каждом вводе, а не вводить заново
при вводе текстовой информации можно оперативно выводить нужные варианты действий, которые уже будут корректно определены
также при вводе запроса пользователю показывается справка что можно ввести дальше - заблудиться сложно
Пример готовой реализации интерфейса:
Реализация
Так исторически сложилось, что под новый пет проект я осваиваю новую для себя технологию и медленно прожариваюсь на начальном этапе. Так и здесь - открыл для себя Python, библиотеку aiogram - стандартный стек для ботовода из ютуба. Присыпал сверху MySQL`ом и с этим пирогом потихоньку стал спекаться: нашёл неочевидную особенность работы с классами и неприятные особенности API Телеграма, которые мешали бесшовно использовать выбранный мной интерфейс.
В итоге из всех амбиций сделать крутую штуку моего запала хватило на фундамент приложения и реализацию функций управления пользователями и несколько методов работы со справочником
Заключение
У многих, наверняка, есть свои пет проекты - у кого-то пара, у кого-то сотня. Абсолютное большинство из них не заслуживает траты времени на написание статьи и этот бы постигла такая участь, если бы не назначение.
Очень удобно донатить деньги (особенно когда они есть) в различные фонды - бросил и забыл. Но таким небольшим командам гораздо больше денег нужен хороший инструмент чтобы работать. И как мне кажется - IT-сообщество может его дать.
Приглашаю Вас поволонтёрить. Ознакомиться с проектом можно тут.
FanatPHP
Прямо противоречивые чувства. С одной стороны, актуальной информации — один раздел и короткое видео. С другой — я раньше не знал про inline-запросы. С одной стороны, каким местом, я извиняюсь, к этому посту хаб mysql? Ну вот серьёзно? Эта БД вскользь упоминается в посте ровно один раз. Я и сам сильно мучаюсь с выбором хабов, но стараюсь всё-таки совсем за уши не притягивать. С другой — если бы не это, то я бы этот пост и не увидел.
Но плюсик поставил. Хоть этот пост и только наполовину технический, и обрывается на самом интересном месте, но даже таких на Хабре почти не осталось. Автор, пишите ещё.
Taenfox Автор
Большое спасибо за честный отзыв!
Да, качество написанного не вызывает восторга и у меня, но на то у меня есть причины :( Будет пища - буду писать более вдумчиво