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

No packages published

Contributors 2

  •  
  •