

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
<a name="jobs-workflow-jobs-online"></a>

A seguir, são mostradas as diferentes etapas no fluxo de trabalho, desde o início de um novo trabalho até o relatório do status de conclusão da execução de um trabalho.

## Iniciar um novo trabalho
<a name="jobs-respond-new-job"></a>

Quando um novo trabalho é criado, o AWS IoT Jobs publica uma mensagem sobre o `$aws/things/{{thing-name}}/jobs/notify` tópico para cada dispositivo de destino.

A mensagem contém as seguintes informações:

```
{
    "timestamp":1476214217017,
    "jobs":{
        "QUEUED":[{
            "jobId":"0001",
            "queuedAt":1476214216981,
            "lastUpdatedAt":1476214216981,
            "versionNumber" : 1
        }]
    }
}
```

O dispositivo recebe essa mensagem no tópico `'$aws/things/{{thingName}}/jobs/notify'` quando a execução do trabalho é enfileirada.

**nota**  
Para trabalhos com a `SchedulingConfig` opcional, o trabalho manterá um estado de status inicial de `SCHEDULED`. Quando o trabalho atingir o `startTime` selecionado, ocorrerá o seguinte:  
O estado do status do trabalho será atualizado para `IN_PROGRESS`.
O trabalho iniciará a distribuição do documento de trabalho em todos os dispositivos do grupo de destino.

## Obter informações do trabalho
<a name="jobs-respond-get-job"></a>

Para obter mais informações sobre a execução de um trabalho, o dispositivo chama a API MQTT [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) com o campo `includeJobDocument` definido como `true` (o padrão).

Se a solicitação for bem-sucedida, o serviço AWS IoT Jobs publicará uma mensagem sobre o `$aws/things/MyThing/jobs/0023/get/accepted` tópico:

```
{
    "clientToken" : "client-001",
    "timestamp" : 1489097434407,
    "execution" : {
        "approximateSecondsBeforeTimedOut": number,
        "jobId" : "023",
        "status" : "QUEUED",
        "queuedAt" : 1489097374841,
        "lastUpdatedAt" : 1489097374841,
        "versionNumber" : 1,
        "jobDocument" : {
            < contents of job document >
        }
    }
}
```

Se a solicitação falhar, o serviço AWS IoT Jobs publicará uma mensagem sobre o `$aws/things/MyThing/jobs/0023/get/rejected` tópico.

O dispositivo agora tem o documento de trabalho, que ele pode usar para executar as operações remotas do trabalho. Se o documento de trabalho contiver um URL pré-assinado do Amazon S3, o dispositivo poderá usar esse URL para fazer download de todos os arquivos necessários do trabalho.

## Relatar o status da execução de um trabalho
<a name="jobs-job-processing"></a>

Enquanto executa o trabalho, o dispositivo pode chamar a API MQTT [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) para atualizar o status da execução do trabalho.

Por exemplo, um dispositivo pode atualizar o status da execução do trabalho para `IN_PROGRESS` publicando a seguinte mensagem no tópico `$aws/things/MyThing/jobs/0023/update`:

```
{
    "status":"IN_PROGRESS",
    "statusDetails": {
        "progress":"50%"
    },
    "expectedVersion":"1",
    "clientToken":"client001"
}
```

O serviço trabalhos responde publicando uma mensagem no tópico `$aws/things/MyThing/jobs/0023/update/accepted` ou `$aws/things/MyThing/jobs/0023/update/rejected`:

```
{
    "clientToken":"client001",
    "timestamp":1476289222841
}
```

O dispositivo pode combinar as duas solicitações anteriores chamando [StartNextPendingJobExecution](jobs-mqtt-api.md#mqtt-startnextpendingjobexecution). Isso obtém e inicia a próxima execução de trabalho pendente e permite que o dispositivo atualize o status de execução do trabalho. Essa solicitação também retorna o documento de trabalho quando há uma execução de trabalho pendente.

Se o trabalho contiver um [TimeoutConfig](https://docs.aws.amazon.com//iot/latest/apireference/API_TimeoutConfig.html), o cronômetro em andamento começará a ser executado. Você também pode definir um cronômetro de etapas para a execução de um trabalho definindo um valor para `stepTimeoutInMinutes` quando você chama [UpdateJobExecution](https://docs.aws.amazon.com//iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html). O temporizador de etapa se aplica apenas à execução do trabalho que você atualizar. É possível definir um novo valor para esse temporizador cada vez que você atualizar uma execução de trabalho. Você também pode criar um cronômetro de etapas ao ligar [StartNextPendingJobExecution](https://docs.aws.amazon.com//iot/latest/apireference/API_iot-jobs-data_StartNextPendingJobExecution.html). Se a execução de trabalho permanecer com o status `IN_PROGRESS` por mais tempo que o intervalo do temporizador de etapa, ela falhará e alternará para o status `TIMED_OUT` terminal. O temporizador de etapa não tem efeito sobre o temporizador em andamento que você define ao criar um trabalho.

O campo `status` pode ser definido como `IN_PROGRESS`, `SUCCEEDED` ou `FAILED`. Você não pode atualizar o status da execução de um trabalho que já esteja em um estado terminal.

## Relatar a conclusão da execução
<a name="jobs-job-completed"></a>

Quando o dispositivo conclui a execução do trabalho, ele chama a API MQTT [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution). Se o trabalho tiver sido bem-sucedido, defina `status` como `SUCCEEDED` e, na carga da mensagem, em `statusDetails`, adicione outras informações sobre o trabalho, como pares nome/valor. Os temporizadores de etapa e em andamento terminam quando a execução do trabalho é concluída.

Por exemplo:

```
{
    "status":"SUCCEEDED",
    "statusDetails": {
        "progress":"100%"
    },
    "expectedVersion":"2",
    "clientToken":"client-001"
}
```

Se o trabalho não foi bem-sucedido, defina `status` como `FAILED` e, em `statusDetails`, adicione informações sobre o erro que ocorreu:

```
{
    "status":"FAILED",
    "statusDetails": {
        "errorCode":"101",
        "errorMsg":"Unable to install update"
    },
    "expectedVersion":"2",
    "clientToken":"client-001"
}
```

**nota**  
O atributo `statusDetails` pode conter qualquer número de pares de nome e valor.

Quando o serviço AWS IoT Jobs recebe essa atualização, ele publica uma mensagem sobre o `$aws/things/MyThing/jobs/notify` tópico para indicar que a execução do trabalho foi concluída:

```
{
    "timestamp":1476290692776,
    "jobs":{}
}
```

## Trabalhos adicionais
<a name="jobs-additional-job"></a>

Se houver outras execuções de trabalho pendentes para o dispositivo, elas serão incluídas na mensagem publicada em `$aws/things/MyThing/jobs/notify`.

Por exemplo:

```
{
    "timestamp":1476290692776,
    "jobs":{
        "QUEUED":[{
            "jobId":"0002",
            "queuedAt":1476290646230,
            "lastUpdatedAt":1476290646230
        }],
        "IN_PROGRESS":[{
            "jobId":"0003",
            "queuedAt":1476290646230,
            "lastUpdatedAt":1476290646230
        }]
    }
}
```