

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Fluxo de trabalho do dispositivo
<a name="jobs-workflow-device-online"></a>

Um dispositivo pode lidar com trabalhos executados usando uma das seguintes formas. 
+ 

**Consiga o próximo trabalho**

  1. Quando um dispositivo se torna online pela primeira vez, ele deve assinar o tópico `notify-next` do dispositivo.

  1. Chamar a API MQTT [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) com o jobId `$next` para obter o próximo trabalho, seu documento de trabalho e outros detalhes, incluindo qualquer estado salvo em `statusDetails`. Se o documento de trabalho tiver uma assinatura de arquivo de código, você deverá verificar a assinatura antes de continuar com o processamento da solicitação de trabalho.

  1. Chamar a API MQTT [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) para atualizar o status do trabalho. Ou, para combinar essa e a etapa anterior em uma chamada, o dispositivo pode chamar [StartNextPendingJobExecution](jobs-mqtt-api.md#mqtt-startnextpendingjobexecution).

  1. (Opcional) Você pode adicionar um temporizador de etapa. Para isso, defina um valor para `stepTimeoutInMinutes` ao chamar [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) ou [StartNextPendingJobExecution](jobs-mqtt-api.md#mqtt-startnextpendingjobexecution).

  1. Executar as ações especificadas pelo documento de trabalho usando a API MQTT [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) para relatar o andamento do trabalho.

  1. Continue monitorando a execução do trabalho chamando a [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) API MQTT com esse jobId. Se a execução do trabalho for excluída, [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) retornará um `ResourceNotFoundException`.

     O dispositivo deve conseguir voltar para um estado válido se a execução do trabalho for cancelada ou excluída enquanto o dispositivo estiver executando o trabalho.

  1. Chame a [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) API MQTT quando finalizar o trabalho para atualizar o respectivo status e relatar êxito ou falha.

  1. Como o status de execução desse trabalho foi alterado para o estado final, o próximo trabalho disponível para execução (se houver) será alterado. O dispositivo é notificado sobre a alteração da próxima execução de trabalho pendente. Neste ponto, o dispositivo deve continuar conforme descrito na etapa 2. 

  Se o dispositivo permanecer on-line, ele continuará recebendo notificações da próxima execução do trabalho pendente. Isso inclui seus dados de execução do trabalho, quando ele conclui um trabalho ou quando uma nova execução de trabalho pendente é adicionada. Quando isso ocorre, o dispositivo continua, conforme descrito na etapa 2.
+ 

**Selecione entre os trabalhos disponíveis**

  1. Quando um dispositivo se torna online pela primeira vez, ele deve assinar o tópico `notify` do objeto.

  1. Chamar a API MQTT [GetPendingJobExecutions](jobs-mqtt-api.md#mqtt-getpendingjobexecutions) para obter uma lista de execuções de trabalhos pendentes.

  1. Se a lista contiver uma ou mais execuções de trabalho, selecione uma.

  1. Chamar a API MQTT [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) para obter o documento de trabalho e outros detalhes, incluindo qualquer estado salvo em `statusDetails`.

  1. Chamar a API MQTT [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) para atualizar o status do trabalho. Se o campo `includeJobDocument` estiver definido como `true` nesse comando, o dispositivo poderá ignorar a etapa anterior e recuperar o documento de trabalho neste ponto.

  1. Você pode adicionar um temporizador de etapa. Para isso, defina um valor para `stepTimeoutInMinutes` ao chamar [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution).

  1. Executar as ações especificadas pelo documento de trabalho usando a API MQTT [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) para relatar o andamento do trabalho.

  1. Continue monitorando a execução do trabalho chamando a [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) API MQTT com esse jobId. Se a execução de trabalho for cancelada ou excluída enquanto o dispositivo estiver executando o trabalho, o dispositivo deve conseguir voltar para um estado válido.

  1. Chame a [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) API MQTT quando finalizar o trabalho para atualizar o respectivo status e relatar êxito ou falha.

  Se o dispositivo permanecer online, ele será notificado de todas as execuções de trabalho pendentes quando uma nova execução de trabalho se tornar disponível. Quando isso ocorrer, o dispositivo poderá continuar, conforme descrito na etapa 2.

Se o dispositivo não puder executar o trabalho, ele deverá chamar a API MQTT [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) para atualizar o status do trabalho para `REJECTED`.