Skip to content

J0es1ick/Resplitter

Repository files navigation

Resplitter

Resplitter - сервис для разделения счёта в ресторане между гостями. Он построен на основе Telegram-бота с использованием WebApp внутри самого Telegram.

В качестве стэка используется NodeJS, TypeScript. Для взаимодействия с Telegram используется Node-Telegram-bot-API.

Краткая схема работы проекта

Краткая логика (1)

В качестве библиотеки для обрабокти запросов используется 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 # команда для запуска приложения

Базовый юзкейс проекта

Ниже представлен базовый юзкейс проекта в виде схемы

Базовый юзкейс проекта Image 1

🔎 Логическая схема работы приложения

Ниже представлена достаточно подробная схема работы приложения с точки зрения логики

🧩 Основная логика приложения Image 1
❌ Функция удаления позиции Image 2
✅ Функция добавления Image 3
✏️ Функция изменения позиции Image 4

Технологический стек

🤖 В качестве основы был выбран Telegram-бот в силу того, что такая реализация больше подходит для написания MVP проекта.

⌨️ Использование TypeScript вместо JavaScript обусловлено наличием в TS стргой типизации и отсутствием необходимости лишнего приведения типов и проверки типов данных внутри самого кода.

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

📚 node-telegram-bot-api являются наиболее популярной и актуальной библиотекой для создания API Telegram-бота

🧊 Tessecart на данный момент служит альтернативой Yandex OCR

⚛️ React используется для создания GUI самого MiniApp

🛸 Почему именно OCR от Yandex?

Мы посчитали, что данный пункт расписать отдельно.

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

🗒️ Планы на будущее

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

🖥️ Интеграция с системами автоматизации ресторанов, например, Iiko. Это позволило бы гостям вытягивать из системы ресторана предчеки без необходимости использования OCR, что снизит количество ошибок, и предоставит еще один вариант использования сервиса.

Ниже представлена схема того, как мы видим взаимодействие пользователя с интегрированной системой автоматизации:

💿 Логика с автоматизацией Image 4

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

🧑‍🤝‍🧑Добавление поддержки групповых чатов, дабы пользователи могли отдельно и независимо выбирать те блюда, которые будут оплачивать. Будет работать только в том случае, если не выбрано равное деление

📢Система нотификации для тех пользователей, которые еще не оплатили свою долю чека

About

Telegram bot for splitting receipts

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors