Passer au contenu principal

Assistance humaine

LCC.assist permet aux scripts exécutés sur l'appareil d'envoyer des demandes d'assistance humaine au centre de contrôle. Le script peut joindre une capture d'écran et des instructions, attendre de manière bloquante la réponse de l'opérateur, puis poursuivre son exécution.

Types de demandes​

TypeAPICas d'utilisationTraitement habituel du script
Réponse textuelleLCC.assist.ask_text()CAPTCHA, code SMS, mot de passe, jeton à usage uniqueSaisir result.text dans le champ actif
Sélection de coordonnéesLCC.assist.pick_point()L'opérateur doit décider où cliquer, par exemple un bouton graphique ou une boîte de dialogue d'erreurAppeler directement touch.tap(result.x, result.y)
Contrôle humain à distanceLCC.assist.request_control()Curseur, vérification anti-robot, connexion, contrôle de sécurité, boîte de dialogue d'autorisation ou autre flux instableUne fois le contrôle à distance terminé, reprendre une capture d'écran et réévaluer l'écran

Les instructions destinées à l'opérateur doivent être concrètes et exécutables. N'écrivez pas une indication abstraite comme « informations complémentaires ». Préférez « Contrôlez l'appareil à distance, terminez la vérification puis cliquez sur Terminé », « Saisissez le code affiché sur la capture » ou « Cliquez au centre du bouton de confirmation ».

Sources des captures d'écran​

Une demande d'assistance peut recevoir une image de plusieurs façons :

  • screenshotLocalPath : chemin d'une image locale à l'appareil ; le SDK la téléverse vers files/_temp/assist/lua-script/<udid>/<request-id>/... du centre de contrôle.
  • screenshotPath : si l'image se trouve déjà sous la racine files du centre de contrôle, transmettez directement son chemin relatif.
  • screenshotImage : ImageObject de XXTouch ; le SDK le convertit en data URL sans enregistrer préalablement un fichier.
  • screenshotImageData : données binaires d'une image PNG/JPEG ; le SDK les convertit en data URL.
  • input.imageSrc : si le script possède déjà une adresse d'image data:image/..., http(s)://... ou /api/..., transmettez-la dans input afin que l'interface l'affiche.

input.imageSrc n'est pas remplacé par le SDK. Ce n'est que si input.imageSrc et les captures par chemin ne sont pas fournis que le SDK convertit screenshotImage ou screenshotImageData en input.imageSrc.

Cycle de vie​

Une demande commence à l'état pending. Lorsque le centre de contrôle ouvre l'outil, elle passe à active, puis à submitted après l'envoi du résultat. Une annulation par l'utilisateur, une annulation explicite du script, un dépassement du délai d'attente ou une expiration la fait passer à cancelled / expired.

Le script dispose de deux niveaux de nettoyage :

  • En cas de dépassement du délai dans LCC.assist.request(), le SDK révoque la demande et renvoie nil, "timeout", task.
  • À la fin du script, XXTLanControl.lua appelle cancel_all() pour révoquer les demandes encore inachevées de ce script.

Lorsque le centre de contrôle reçoit l'état d'arrêt d'un script exécuté sur un appareil, il révoque également les demandes de cet appareil dont source = "lua-script" et qui sont encore à l'état pending / active. Les demandes des autres appareils ne sont pas annulées et les demandes déjà envoyées ne sont pas modifiées.

Le stockage des tâches utilise le stockage mémoire actuel du centre de contrôle ; les tâches inachevées ne sont pas conservées après le redémarrage du serveur.

Si la demande fournit une image intégrée via input.imageSrc, screenshotImage ou screenshotImageData, le centre de contrôle libère le contenu de cette image lorsque la tâche passe à l'état envoyé, annulé ou expiré, tout en conservant l'état, le résultat et les autres informations structurées.

Si le logiciel se ferme anormalement puis est relancé, les tâches inachevées elles-mêmes ne sont pas restaurées. Au démarrage, les fichiers de capture téléversés par les demandes d'assistance de script sous files/_temp/assist/lua-script/ sont nettoyés ; les fichiers des anciennes versions sous files/assist/lua-script/ ou files/assist/<udid>/<request-id>/ dont l'ID de demande est un UUID sont également pris en charge.

Liste des API​