Помощь оператора
LCC.assist позволяет скрипту устройства отправить в центральную консоль запрос о помощи оператора. Скрипт может приложить снимок экрана и пояснение, дождаться ответа оператора и продолжить выполнение.
Типы запросов
| Тип | API | Подходящие сценарии | Типичная обработка в скрипте |
|---|---|---|---|
| Текстовый ответ | LCC.assist.ask_text() | Коды CAPTCHA и SMS, пароли, одноразовые токены | Ввести result.text в текущее поле |
| Выбор координат | LCC.assist.pick_point() | Нужно определить, куда нажать, например на графическую кнопку или кнопку аварийного диалога | Сразу вызвать touch.tap(result.x, result.y) |
| Удалённое управление оператором | LCC.assist.request_control() | Нестабильные сценарии: слайдеры, CAPTCHA, вход, проверки безопасности, диалоги разрешений | После удалённого управления снова захватить экран и продолжить проверку |
Инструкция для оператора должна быть конкретной и выполнимой. Не пишите абстрактное «дополнительная информация»; лучше указать: «Завершите текущую проверку удалённо и нажмите “Готово”», «Введите код с изображения» или «Нажмите в центр кнопки подтверждения».
Источники снимка экрана
К запросу помощи можно приложить изображение одним из следующих способов:
screenshotLocalPath: путь к локальному изображению на устройстве; SDK загрузит его вfiles/_temp/assist/lua-script/<udid>/<request-id>/...центральной консоли.screenshotPath: относительный путь, если изображение уже находится в корнеfilesцентральной консоли.screenshotImage: объектImageObjectиз XXTouch; SDK преобразует его в data URL, предварительно сохранять файл не нужно.screenshotImageData: двоичные данные изображения PNG/JPEG; SDK преобразует их в data URL.input.imageSrc: если скрипт уже располагает адресом изображенияdata:image/...,http(s)://...или/api/..., его можно передать вinputдля отображения во фронтенде.
SDK не перезаписывает input.imageSrc. Только если input.imageSrc и путь к снимку не переданы, SDK преобразует screenshotImage или screenshotImageData в input.imageSrc.
Жизненный цикл
Запрос начинается в состоянии pending, после открытия инструмента в центральной консоли переходит в active, а после отправки результата — в submitted. При отмене пользователем или скриптом, тайм-ауте ожидания либо истечении срока он переходит в cancelled / expired.
На стороне скрипта предусмотрены два уровня очистки:
- При тайм-ауте ожидания
LCC.assist.request()отменяет этот запрос и возвращаетnil, "timeout", task. - При завершении скрипта
XXTLanControl.luaвызываетcancel_all()и отменяет незавершённые запросы текущего скрипта.
Когда центральная консоль получает состояние остановки скрипта устройства, она также отменяет запросы этого устройства с source = "lua-script" в состоянии pending / active; запросы других устройств и уже отправленные запросы не изменяются.
Задачи хранятся в текущем оперативном хранилище консоли; после перезапуска бэкенда незавершённые задачи не сохраняются.
Если запрос содержит встроенное изображение через input.imageSrc, screenshotImage или screenshotImageData, после перехода задачи в состояние отправки, отмены или истечения срока консоль освобождает содержимое изображения и сохраняет только состояние задачи, результат и прочие структурированные данные.
Если приложение аварийно завершилось и было открыто снова, незавершённые задачи не восстанавливаются. При запуске удаляются снимки запросов помощи скриптов из files/_temp/assist/lua-script/; также очищаются каталоги старых версий в files/assist/lua-script/ и files/assist/<udid>/<request-id>/, если идентификатор запроса является UUID.
Список API
- Общие параметры и объекты результата
- Создание запроса помощи
LCC.assist.create() - Ожидание результата помощи
LCC.assist.wait() - Создание запроса и ожидание
LCC.assist.request() - Запрос текстового ответа
LCC.assist.ask_text() - Запрос выбора координат
LCC.assist.pick_point() - Запрос удалённого управления
LCC.assist.request_control() - Отмена указанного запроса
LCC.assist.cancel() - Отмена запросов текущего скрипта
LCC.assist.cancel_all()