Задача: связать предложение с дальнейшей работой по заявке
Объявление описывает предложение: какую валюту участник хочет купить или продать, сколько и на каких условиях. Заявка — конкретный отклик другого участника на это предложение. В ней важно сохранить обе стороны, выбранный объём, курс и условия, а затем связать с ними решение автора и дальнейшие действия администратора.
Именно этот процесс я объединил в P2P Exchanger. Участники работают в Telegram, а для административной работы предусмотрена отдельная веб-панель. Условия и состояние заявки сохраняются в системе, а не остаются только в сообщениях.
Как предложение становится заявкой
Рассмотрим путь покупателя, который откликается на объявление о продаже.
- Автор размещает предложение. Выбирает валютную пару, задаёт свой курс, объём и условия. Перед созданием проверяет сводку и подтверждает публикацию. Открытое объявление становится доступно другим участникам, которые хотят купить эту валюту.
- Покупатель выбирает объявление и вводит нужный объём. Бот создаёт связанную с предложением заявку: сохраняет обе стороны, переносит курс и условия, рассчитывает сумму. Покупателю не нужно заново вводить параметры выбранного предложения — он указывает количество для своего отклика.
- Заявка поступает автору на решение. Покупателю направляется карточка заявки, автору — уведомление о запросе. Доступное количество в объявлении уменьшается уже при создании заявки, до ответа автора: система учитывает запрошенный объём предложения, а не блокирует деньги.
- Автор принимает или отклоняет заявку. При принятии предусмотрены сообщения участникам и администратору, который продолжает работу с заявкой. При отказе заявка отменяется, а запрошенное количество возвращается в доступный объём объявления. На этом ветка отказа заканчивается — передачи администратору нет.
- Администратор ведёт принятую заявку в веб-панели. Он вручную отмечает ожидание и затем завершение. Для отметки о завершении предусмотрены сообщения обеим сторонам. Согласие автора и завершение заявки — разные события: дальнейшие этапы отмечает человек, бот не определяет поступление оплаты самостоятельно.
Предусмотрен и обратный путь: продавец откликается на объявление о покупке. Поэтому автор объявления — не обязательно продавец; его роль в процессе — задать предложение и решить, принимать ли отклик.
Автор размещает объявление о покупке или продаже валюты с курсом, объёмом и условиями. Другой участник указывает объём отклика. Создаётся связанная заявка, и доступное количество в объявлении уменьшается ещё до ответа автора. Далее две ветки. Если автор принимает заявку, администратор ведёт её в веб-панели, вручную отмечает ожидание и затем завершение; для завершения предусмотрены сообщения обеим сторонам. Если автор отклоняет заявку, она отменяется, запрошенное количество возвращается в доступный объём объявления, и эта ветка заканчивается без передачи администратору. Платежи и переводы стороны выполняют вне бота.
Что я разработал
Я лично создал весь проект с нуля: Telegram-интерфейс, серверную логику, базу данных и веб-панель. Связал действия участников с сохранением условий, решением автора и административным ведением заявки.
- Рабочий интерфейс участников в Telegram. Кроме размещения и откликов, автор может снять своё объявление с публикации и позже вернуть его в выдачу. Для удаления предусмотрено подтверждение.
- Веб-панель для администратора. В ней можно вести пользователей и их статусы, находить объявления конкретного автора, менять их видимость и вручную отмечать дальнейшие этапы заявок. Администратор работает с записями того же процесса, который участники начинают в Telegram.
- Поддержку текстов и меню существующих действий. В панель вынесены шаблоны сообщений, кнопки, меню и справочные данные. Текстовое оформление можно поддерживать там, без правки каждой фразы в коде. Это настройка уже реализованных действий, а не конструктор новой логики бота.
Результат: переданный инструмент, который используется в работе
Я передал заказчику готовое решение, и оно используется в реальной работе компании. В одном процессе связаны условия предложения, отклик другого участника, ответ автора и дальнейшее ведение заявки администратором.
Практический результат этой связки — заявка создаётся по выбранному объявлению с его курсом и условиями, без повторного ввода этих данных при отклике. Администратор продолжает работу с записью, в которой уже сохранены участники, объём, расчётная сумма и статус.
Технологии: Python, Telegram Bot API, Flask / Flask-Admin, SQLAlchemy, HTTP-интеграция.