

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Flux de travail des appareils
<a name="jobs-workflow-device-online"></a>

Un appareil peut gérer les tâches qu’il exécute de l’une des manières suivantes. 
+ 

**Trouvez le prochain emploi**

  1. Lorsqu'un appareil est mis en ligne pour la première fois, il doit s'abonner à la rubrique `notify-next` de l'appareil.

  1. Appelez l'API MQTT [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) avec le jobId `$next` pour obtenir la tâche suivante, son document de tâche et d'autres détails, y compris tout état enregistré dans `statusDetails`. Si le document de tâche possède une signature de fichier de code, vous devez vérifier la signature avant de continuer le traitement de la demande de tâche.

  1. Appelez l'API MQTT [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) pour mettre à jour le statut de la tâche. Ou, pour combiner cette étape et la précédente en un seul appel, l'appareil peut appeler [StartNextPendingJobExecution](jobs-mqtt-api.md#mqtt-startnextpendingjobexecution).

  1. Le cas échéant, vous pouvez ajouter un minuteur d'étape en définissant une valeur pour `stepTimeoutInMinutes` lorsque vous appelez [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) ou [StartNextPendingJobExecution](jobs-mqtt-api.md#mqtt-startnextpendingjobexecution).

  1. Exécutez les actions spécifiées par le document de tâche à l'aide de l'API MQTT [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) pour faire état de l'avancement de la tâche.

  1. Continuez de surveiller l'exécution de tâche en appelant l'API MQTT [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) avec ce jobId. Si l’exécution de la tâche est supprimée, [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) renvoie un `ResourceNotFoundException`.

     L’appareil doit être en mesure de revenir à un état valide si l’exécution de la tâche est annulée ou supprimée pendant que l’appareil exécute la tâche.

  1. Une fois que la tâche est terminée, appelez l'API MQTT [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) pour mettre à jour le statut de la tâche et faire état de sa réussite ou de son échec.

  1. Comme le statut d'exécution de cette tâche est passé à un état terminal, la prochaine tâche disponible pour une exécution (le cas échéant) change également. L'appareil est averti que la prochaine exécution de tâche en attente a changé. À ce stade, l'appareil doit continuer comme décrit à l'étape 2. 

  Si l’appareil reste en ligne, il continue de recevoir des notifications concernant l’exécution de la prochaine tâche en attente. Cela inclut ses données d’exécution de tâche, lorsqu’elle termine une tâche ou lorsqu’une nouvelle tâche en attente est ajoutée. Dans ce cas, l'appareil continue comme décrit à l'étape 2.
+ 

**Choisissez parmi les tâches disponibles**

  1. Lorsqu'un appareil est mis en ligne pour la première fois, il doit s'abonner à la rubrique `notify` de l'objet.

  1. Appelez l'API MQTT [GetPendingJobExecutions](jobs-mqtt-api.md#mqtt-getpendingjobexecutions) pour obtenir la liste des exécutions de tâche en attente.

  1. Si la liste contient une ou plusieurs exécutions de tâche, sélectionnez-en une.

  1. Appelez l'API MQTT [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) pour obtenir le document de tâche et autres détails, y compris tout état enregistré dans `statusDetails`.

  1. Appelez l'API MQTT [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) pour mettre à jour le statut de la tâche. Si, dans cette commande, le champ `includeJobDocument` a la valeur `true`, l'appareil peut ignorer l'étape précédente et récupérer le document de tâche à ce stade.

  1. Le cas échéant, vous pouvez ajouter un minuteur d'étape en définissant une valeur pour `stepTimeoutInMinutes` lorsque vous appelez [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution).

  1. Exécutez les actions spécifiées par le document de tâche à l'aide de l'API MQTT [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) pour faire état de l'avancement de la tâche.

  1. Continuez de surveiller l'exécution de tâche en appelant l'API MQTT [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) avec ce jobId. Si l’exécution de la tâche est annulée ou supprimée alors que l’appareil est en cours d’exécution, ce dernier doit être en mesure de retrouver un état valide.

  1. Une fois que la tâche est terminée, appelez l'API MQTT [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) pour mettre à jour le statut de la tâche et faire état de sa réussite ou de son échec.

  Si l'appareil demeure en ligne, il est averti de toutes les exécutions de tâche en attente chaque fois qu'une nouvelle exécution de tâche en attente devient disponible. Dans ce cas, l'appareil continue comme décrit à l'étape 2.

Si l’appareil n’est pas en mesure d’exécuter la tâche, il doit appeler l’API MQTT [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) pour mettre à jour le statut de la tâche avec la valeur `REJECTED`.