5.5 KiB
Технический протокол извлечения SBP-данных (Deep Discovery)
Твоя цель — получить текстовую ссылку формата https://qr.nspk.ru/.... Эта ссылка является универсальной: она позволяет пользователю оплатить заказ в один клик через банковское приложение на телефоне.
Шаг 1: Глубокий поиск в DOM (Инструкция для браузера)
Прикажи Исполнителю выполнить поиск по следующим техническим признакам. В параметре task для браузера укажи:
- Поиск по атрибутам: "Проверь все элементы
<a>,<button>и<div>на наличие подстрок 'nspk', 'sbp', 'qr' в атрибутахhref,data-url,data-qr,valueилиsrc." - Поиск мобильных протоколов: "Ищи ссылки, начинающиеся с
intent://,air.ru.nspk.sbpилиbank1000.... Если найдешь — верни их полностью, Менеджер их конвертирует." - Анализ скриптов: "Найди теги
<script>, содержащие текст 'payload' или 'qr'. Извлеки содержимое этих скриптов, если там есть упоминание доменаqr.nspk.ru."
Шаг 2: Работа с Iframe (Переключение контекста)
Платежные шлюзы (Сбербанк, ЮKassa, Альфа) часто изолируют QR-код во фрейме.
- Инструкция: "Если на странице оплаты есть
<iframe>, переключи контекст внутрь него и повтори поиск ссылки СБП. Обрати внимание на домены фрейма:*.sberbank.ru,*.yoomoney.ru,*.nspk.ru."
Шаг 3: Программное декодирование (Python OCR Fallback)
Если в коде страницы нет прямой ссылки (код отрисован через <canvas> или защищенную картинку), ты обязан использовать «техническое зрение» через Python.
Алгоритм действий:
- Захват: Прикажи браузеру: "Сделай скриншот области, где отображается QR-код, и сохрани его по пути
/app/workspace/payment_qr.png". - Распознавание: Используй
execute_codeдля запуска следующего скрипта (библиотекаpyzbarпредустановлена в среде лаборатории):
import json
import os
from PIL import Image
from pyzbar.pyzbar import decode
def extract_sbp_url(image_path):
if not os.path.exists(image_path):
return {"error": "Файл скриншота не найден"}
img = Image.open(image_path)
# Попытка найти и декодировать QR-код
decoded_objects = decode(img)
for obj in decoded_objects:
data = obj.data.decode('utf-8')
if 'qr.nspk.ru' in data:
return {"success": True, "url": data}
return {"success": False, "error": "QR-код не найден или не распознан"}
result = extract_sbp_url('/app/workspace/payment_qr.png')
print(json.dumps(result))
Шаг 4: Конвертация и Валидация
Получив данные (из DOM или через Python), ты (Менеджер) должен убедиться в их корректности:
- Паттерн ссылки: Ссылка ОБЯЗАТЕЛЬНО должна содержать
qr.nspk.ru. - Конвертация мобильных ссылок: Если браузер нашел ссылку вида
air.ru.nspk.sbp://qr.nspk.ru/AD1000..., очисти её от префикса протокола, превратив в стандартнуюhttps://qr.nspk.ru/AD1000.... - Сумма рядом с кодом: Попроси браузер подтвердить: "Какая сумма написана текстом непосредственно над или под QR-кодом?". Сверь её с утвержденным бюджетом.
Шаг 5: Обработка ошибок
- Если ссылка не найдена: Сделай еще одну попытку, приказав браузеру нажать кнопку «Оплатить другим банком» или «Показать QR-код».
- Критический отказ: Если после 3-х попыток ссылка не получена, вызови пользователя через сообщение: "Я вижу экран оплаты, но не могу извлечь цифровую ссылку. Пожалуйста, завершите оплату через VNC: [ссылка]".
ВАЖНО: Как только ссылка получена и валидирована, немедленно переходи к этапу выдачи ссылки в Telegram и последующей архивации заказа. Не оставляй сессию браузера открытой дольше необходимого.