P2P Telegram-бот для электронной коммерции цифровых товаров. | Получение и обработка updates от Telegram API.

Biobalans

Client
Регистрация
28.02.2021
Сообщения
81
Благодарностей
22
Баллы
8
В качестве конкурсной работы представляю работу, которая состоит из основного проекта и подпроекта, с помощью которых работает действующий P2P Telegram-бот для электронной коммерции цифровых товаров в формате моментальных продаж и аукционов с довольно немалой аудиторией 24/7.
На данный момент Пользователи могут продавать друг другу картинки, в основном это купоны, но в ближайшем будущем добавлю поддержку и других видов файлов.

Я даже не знаю, какое точное название подошло бы для моей работы. Альтернативные названия: быстрая разработка и тестирование MPV на ZennoPoster, разработка интерфейса на ходу и т.п.


На протяжении нескольких месяцев я собрал бота с нуля и продолжаю его разработку. Очень удобно это делать через Zennoposter, так как ежедневно я меняю/добавляю что-то новое в логику обработки данных, работаю над интерфейсом бота, вношу изменения в его функциональность.
Поэтому, это не столько рабочие шаблоны, сколько принцип разработки Telegram-бота, который можно применить где угодно. Поэтому, я расскажу, как я на ходу разрабатываю P2P Telegram-бот.

Сейчас я объясню, что и как у меня происходит.

И так, основной проект/шаблон: Получение updates от Telegram API - его нужно запустить в Zennoposter.
Вот так выглядит изнутри сердце проекта:
128920

Данный шаблон получает массив обновлений от Telegram, вычисляет порядок обработки результатов и передает эти данные в двух переменных: массив + порядковый номер элемента массива в подпроект (Module), который в свою очередь обрабатывает определенный результат из массива.

Работа шаблона здесь зациклена изнутри, но для надежности можно указать значение -1 для бесконечного числа выполнений. В случае, если потребуется остановить проект, то просто прерываем его.

Идея шаблона следующая: он получает апдейты Телеграм и пропускает каждый результат через подпроект (Module), где логику обработки вы составляете сами и можете заниматься её разработкой на ходу. Просто открываете шаблон подпроекта (Module) в ProjectMaker и работаете с ним, периодически делая сохранения по мере необходимости. В качестве отладки можно ставить уведомления в местах, где вы проводите работы, чтобы видеть в Логе ZennoPoster, как обрабатываются данные.
Основной шаблон рассчитан на то, что в подпроекте могут быть любые сценарии обработки данных с множеством выходов.

Вот как выглядит подпроект - мозг проекта:
128921

Чтобы поместить весь шаблон на одну картинку, пришлось склеить из 4х частей. Рассматривать детальнее можно, скачав шаблон. А сейчас просто посмотрите, какой он огромный.
Изначально этот шаблон был маленьким, все началось только с обработки команды /start и добавления/обновления информации Пользователей в БД PostgresQL. По мере самообучения и реализации идей логика разрасталась, шаблон превратился в плотный ком из кубиков и линий... В ходе подготовки шаблона к конкурсу понадобилось 50 часов, чтобы привести в такой «красивый» вид этот шаблон.

Принцип работы:
Роутинг/Обработка (анализ и определение логики ответа)
Отправка ответа (POST-запрос в Telegram API с реакцией на update)

Сценарий его работы:
1. Получение JSON массива от главного шаблона и получение идентификатора результата, который нужно обработать через переменные;
2. Определение,чем является результат;
3. Роутинг/Обработка (анализ и определение логики ответа);
4. Отправка ответа (POST-запрос в Telegram API с реакцией на update).

На данный момент в подпроекте обрабатываются следующие результаты:
1. Нажатия кнопок;
2. Входящие сообщения и команды вместе с ними с множеством параметров;
3. Inline-запросы.

Также в шаблоне выполняются запросы к YooMoney для проверки статуса платежей.

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

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

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

Для обработки текстовых и числовых данных я применяю самовызывающиеся функции на JS, которые мне успешно генерирует нейросеть Claude.
Приведу пример такой функции.
Пользователь хочет найти все активные лоты, в названии которых есть слово "чипсы". Запрос к БД возвращает мне список из 100 строк. Мне нужно этот список разбить таким образом, чтобы количество кнопок на одно сообщение не превышало 49. С помощью Claude получаю готовую функцию JS - алгоритм равномерного распределения элементов с минимальными отклонениями в размере, который выдает результат "34,33,33" (первая часть 34 строки, две следующие по 33).
Пользователю бот присылает результаты тремя сообщениями, дополнительно нумеруя сообщения как страницы.

Этот и другие алгоритмы, а также некоторые подходы можно увидеть при детальном рассмотрении шаблона Module.
 

Вложения

Последнее редактирование:

Biobalans

Client
Регистрация
28.02.2021
Сообщения
81
Благодарностей
22
Баллы
8
1734033530953.png
Вот так выглядит лог
 
  • Спасибо
Реакции: webposter и hloroform

hloroform

Новичок
Регистрация
14.12.2024
Сообщения
2
Благодарностей
5
Баллы
3
Спасибо автору этот бот помогает мне продать некоторую, а иногда большую часть моих купонов
 

Вложения

  • Спасибо
Реакции: Skidessa и Biobalans

Biobalans

Client
Регистрация
28.02.2021
Сообщения
81
Благодарностей
22
Баллы
8
Реализовал синхронизацию публикаций лотов - теперь можно делать публикации лотов по всем чатам Телеграм, и они будут синхронно обновляться по мере изменения информации в лотах (например, изменение названия, цены или статуса лота - продан или удален).
Этим проектом я занимаюсь ради сообщества людей, обменивающихся купонами торговых сетей (Магнит). Пользователи бота выставляют свои ненужные купоны на продажу и покупают купоны других участников, делая публикации по всем тематическим чатам.
 
  • Спасибо
Реакции: webposter и seodamage

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)