Resplitter - сервис для разделения счёта в ресторане между гостями. Он построен на основе Telegram-бота с использованием WebApp внутри самого Telegram.
В качестве стэка используется NodeJS, TypeScript. Для взаимодействия с Telegram используется Node-Telegram-bot-API.
В качестве библиотеки для обрабокти запросов используется Axios.
В проекте используется OCR от Yandex, следовательно для запуска приложения требуется folder-key и API-secret-key сервисвного аккаунта на https://center.yandex.cloud
Проект написан под NodeJS и YandexOCR, а значит нужно провести некоторые приготовления перед запуском проекта
Для запуска проекта требуется установленная NodeJS.
Ниже приведены команды из официальной документации NodeJS для установки через PowerShell для Windows:
# Download and install fnm:
winget install Schniz.fnm
# Download and install Node.js:
fnm install 22
# Verify the Node.js version:
node -v # Should print "v22.14.0".
# Verify npm version:
npm -v # Should print "10.9.2".Набор команд для Linux:
# Download and install fnm:
curl -o- https://fnm.vercel.app/install | bash
# Download and install Node.js:
fnm install 22
# Verify the Node.js version:
node -v # Should print "v22.14.0".
# Verify npm version:
npm -v # Should print "10.9.2".В файл ⚙️.env необходимо записать:
TELEGRAM_TOKEN =
WEB_APP_URL =
RECEIPT_PROCESSOR_API =
API_KEY =
API_FOLDER_KEY = TELEGRAM_TOKEN - токен Telegram бота для работы
WEB_APP_URL - https://fuzicstgbot2.netlify.app/ - ссылка для взаимодействия с вебаппом (репозиторий: https://github.com/Fuziks/WebAppResplitter)
RECEIPT_PROCESSOR_API - https://ocr.api.cloud.yandex.net/ocr/v1/recognizeText - входная точка OCR
API_KEY - API_SECRET_KEY каждого сервисного аккаунта на https://center.yandex.cloud
API_FOLDER_KEY - идентификатор каталога по ссылке https://console.yandex.cloud/cloud/b1gr4vns0f98iqls6kee
Если каталога нет, создаете и копируете идентификатор
После установки NodeJS, необходимо установить нужные пакеты и библиотеки: Команда для загрузки пакетов из package.json проекта
npm iНепосредственно запуск проекта
npm run start # команда для запуска приложенияНиже представлен базовый юзкейс проекта в виде схемы
Ниже представлена достаточно подробная схема работы приложения с точки зрения логики
🤖 В качестве основы был выбран Telegram-бот в силу того, что такая реализация больше подходит для написания MVP проекта.
⌨️ Использование TypeScript вместо JavaScript обусловлено наличием в TS стргой типизации и отсутствием необходимости лишнего приведения типов и проверки типов данных внутри самого кода.
📱 MiniApp внутри Telegram относительно новая фича, которую нам показалось интересным использовать в данном проекте для реализации чекбокса в кейсе выбора блюд гостями. Подобное решение позволило нам использовать web-технологии внутри сервиса, не обращаясь при этом к написанию полноценного отдельного сайта, а фактически web интерфейса для взаимодействия всё с тем же API, которое уже предоставлено. Также, использоваение MiniApp позволило расширить возможности бота, без необходимости прибегания к ухищрениям и чрезмерным усложнениям итогового кода
📚 node-telegram-bot-api являются наиболее популярной и актуальной библиотекой для создания API Telegram-бота
🧊 Tessecart на данный момент служит альтернативой Yandex OCR
⚛️ React используется для создания GUI самого MiniApp
Мы посчитали, что данный пункт расписать отдельно.
Подобное решение было основано в первую очередь на малом количестве общедоступных данных для обучения OCR с открытым исходным кодом на кириллице. Также самые известные из моделей не предоставляют предобученных моделей на символах кириллицы, из этого возникает необходимость обучения модели на кириллические символы, а затем уже обучение на распознавание русского текста. Чековая структура может содержать не только кириллицу, но и латиницу, а значит модель должна будет уметь распознавать оба набора симолов, что не упрощает задачу.
🛫 В первую очередь, наша команда планирует интегрировать сервис с платежными системами, в данный момент это не реализовано из-за нехватки знаний, навыков и времени. Система Быстрых Платежей является на наш взгляд самой приоритетной в будущей реализации, ведь предоставляет возможность переводов между банками без комиссии.
🖥️ Интеграция с системами автоматизации ресторанов, например, Iiko. Это позволило бы гостям вытягивать из системы ресторана предчеки без необходимости использования OCR, что снизит количество ошибок, и предоставит еще один вариант использования сервиса.
Ниже представлена схема того, как мы видим взаимодействие пользователя с интегрированной системой автоматизации:
Следующая задача является составной, ведь без первой из них, реализация второй не предоставляется возможной:
🧑🤝🧑Добавление поддержки групповых чатов, дабы пользователи могли отдельно и независимо выбирать те блюда, которые будут оплачивать. Будет работать только в том случае, если не выбрано равное деление
📢Система нотификации для тех пользователей, которые еще не оплатили свою долю чека






