

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Notificaciones de trabajos
<a name="jobs-comm-notifications"></a>

El servicio AWS IoT Jobs publica mensajes MQTT en temas reservados cuando hay trabajos pendientes o cuando cambia la primera ejecución de un trabajo de la lista. Los dispositivos pueden realizar un seguimiento de los trabajos pendientes suscribiéndose a estos temas.

## Tipos de notificaciones de trabajo
<a name="jobs-comm-notifications-types"></a>

Las notificaciones de trabajo se publican en temas MQTT como cargas JSON. Existen dos tipos de notificaciones:

**ListNotification**

Una `ListNotification` contiene una lista de no más de 15 ejecuciones de trabajos pendientes. Se almacenan por estado (ejecuciones de trabajo `IN_PROGRESS` antes que las ejecuciones de trabajo `QUEUED`) y, a continuación, por las veces que se incluyeron en la cola.

Una `ListNotification` se publica siempre que se cumple uno de los siguientes criterios.
+ Se pone en cola una nueva ejecución de trabajo o se cambia a un estado no terminal (`IN_PROGRESS` o `QUEUED`).
+ Una ejecución de trabajo antigua cambia a un estado terminal (`FAILED`, `SUCCEEDED`, `CANCELED`, `TIMED_OUT`, `REJECTED` o `REMOVED`).

Para obtener más información sobre los límites con y sin la configuración de programación, consulte [Límites de ejecución de trabajos](job-limits.md#job-execution-limits).

**NextNotification**
+ `NextNotification` contiene información resumida sobre la ejecución del trabajo siguiente en la cola.

  Se publica una `NextNotification` siempre que cambia la ejecución del primer trabajo de la lista.
  + Se añade a la lista una nueva ejecución del trabajo como `QUEUED` y se coloca el primero en la lista.
  + El estado de la ejecución de un trabajo existente que no estaba en el primer lugar en la lista cambia de `QUEUED` a `IN_PROGRESS` y pasa a colocarse en primer lugar en la lista. (Esto sucede cuando no hay otras ejecuciones de trabajos de `IN_PROGRESS` en la lista o cuando la ejecución del trabajo cuyo estado cambia de `QUEUED` a `IN_PROGRESS` estaba en la cola antes que cualquier otra ejecución de trabajo de `IN_PROGRESS` de la lista.) 
  + El estado de la ejecución del trabajo existente que se encuentra en el primer lugar de la lista cambia a un estado terminal y se quita de la lista.

Para obtener más información acerca de cómo publicar en temas de MQTT y suscribirse a ellos, consulte [Protocolos de comunicación de dispositivos](protocols.md).

**nota**  
Las notificaciones no están disponibles cuando se usa HTTP Signature Version 4 o HTTP TLS para comunicarse con trabajos.

## Trabajo pendiente
<a name="jobs-comm-pending"></a>

El servicio AWS IoT Jobs publica un mensaje sobre un tema de MQTT cuando se añade o elimina un trabajo de la lista de ejecuciones pendientes o cuando cambia la primera ejecución de un trabajo de la lista:
+ `$aws/things/thingName/jobs/notify`
+ `$aws/things/thingName/jobs/notify-next`

Los mensajes contienen las siguientes cargas de ejemplo:

`$aws/things/thingName/jobs/notify`:

```
{
  "timestamp" : 10011,
  "jobs" : {
    "IN_PROGRESS" : [ {
      "jobId" : "other-job",
      "queuedAt" : 10003,
      "lastUpdatedAt" : 10009,
      "executionNumber" : 1,
      "versionNumber" : 1
    } ],
    "QUEUED" : [ {
      "jobId" : "this-job",
      "queuedAt" : 10011,
      "lastUpdatedAt" : 10011,
      "executionNumber" : 1,
      "versionNumber" : 0
    } ]
  }
}
```

Si la ejecución del trabajo llamado `this-job` se originó en un trabajo con la configuración de programación opcional seleccionada y el despliegue del documento de trabajo está programado para realizarse durante un periodo de mantenimiento, solo aparecerá durante un periodo de mantenimiento periódico. Fuera del periodo de mantenimiento, el trabajo llamado `this-job` quedará excluido de la lista de ejecuciones de trabajos pendientes, como se muestra en el siguiente ejemplo.

```
{
  "timestamp" : 10011,
  "jobs" : {
    "IN_PROGRESS" : [ {
      "jobId" : "other-job",
      "queuedAt" : 10003,
      "lastUpdatedAt" : 10009,
      "executionNumber" : 1,
      "versionNumber" : 1
    } ],
    "QUEUED" : []
  }
}
```

`$aws/things/thingName/jobs/notify-next`:

```
{
  "timestamp" : 10011,
  "execution" : {
    "jobId" : "other-job",
    "status" : "IN_PROGRESS",
    "queuedAt" : 10009,
    "lastUpdatedAt" : 10009,
    "versionNumber" : 1,
    "executionNumber" : 1,
    "jobDocument" : {"c":"d"}
  }
}
```

Si la ejecución del trabajo llamado `other-job` se originó en un trabajo con la configuración de programación opcional seleccionada y el despliegue del documento de trabajo está programado para realizarse durante un periodo de mantenimiento, solo aparecerá durante un periodo de mantenimiento periódico. Fuera de un periodo de mantenimiento, el trabajo llamado `other-job` no figurará como la siguiente ejecución de trabajo, como se muestra en el siguiente ejemplo.

```
{} //No other pending jobs
```

```
{
  "timestamp" : 10011,
  "execution" : {
      "jobId" : "this-job",
      "queuedAt" : 10011,
      "lastUpdatedAt" : 10011,
      "executionNumber" : 1,
      "versionNumber" : 0,
      "jobDocument" : {"a":"b"}
  }
} // "this-job" is pending next to "other-job"
```

Los valores del estado de ejecución de trabajo posibles son `QUEUED`, `IN_PROGRESS`, `FAILED`, `SUCCEEDED`, `CANCELED`, `TIMED_OUT`, `REJECTED` y `REMOVED`.

La siguiente serie de ejemplos muestra las notificaciones publicadas en cada tema a medida que se crean las ejecuciones de trabajo y cambian de un estado a otro. 

En primer lugar se crea un trabajo llamado `job1`. La notificación se publica en el tema `jobs/notify`:

```
{
  "timestamp": 1517016948,
  "jobs": {
    "QUEUED": [
      {
        "jobId": "job1",
        "queuedAt": 1517016947,
        "lastUpdatedAt": 1517016947,
        "executionNumber": 1,
        "versionNumber": 1
      }
    ]
  }
}
```

La notificación se publica en el tema `jobs/notify-next`:

```
{
  "timestamp": 1517016948,
  "execution": {
    "jobId": "job1",
    "status": "QUEUED",
    "queuedAt": 1517016947,
    "lastUpdatedAt": 1517016947,
    "versionNumber": 1,
    "executionNumber": 1,
    "jobDocument": {
      "operation": "test"
    }
  }
}
```

Cuando se crea otro trabajo (`job2`), esta notificación se publica en el tema `jobs/notify`:

```
{
  "timestamp": 1517017192,
  "jobs": {
    "QUEUED": [
      {
        "jobId": "job1",
        "queuedAt": 1517016947,
        "lastUpdatedAt": 1517016947,
        "executionNumber": 1,
        "versionNumber": 1
      },
      {
        "jobId": "job2",
        "queuedAt": 1517017191,
        "lastUpdatedAt": 1517017191,
        "executionNumber": 1,
        "versionNumber": 1
      }
    ]
  }
}
```

No se publica una notificación en el tema `jobs/notify-next` porque el siguiente trabajo de la cola (`job1`) no ha cambiado. Cuando `job1` comienza a ejecutarse, su estado cambia a `IN_PROGRESS`. No se publican notificaciones ya que la lista de trabajos y el siguiente trabajo en la cola no han cambiado.

Cuando se añade un tercer trabajo (`job3`), esta notificación se publica en el tema `jobs/notify`:

```
{
  "timestamp": 1517017906,
  "jobs": {
    "IN_PROGRESS": [
      {
        "jobId": "job1",
        "queuedAt": 1517016947,
        "lastUpdatedAt": 1517017472,
        "startedAt": 1517017472,
        "executionNumber": 1,
        "versionNumber": 2
      }
    ],
    "QUEUED": [
      {
        "jobId": "job2",
        "queuedAt": 1517017191,
        "lastUpdatedAt": 1517017191,
        "executionNumber": 1,
        "versionNumber": 1
      },
      {
        "jobId": "job3",
        "queuedAt": 1517017905,
        "lastUpdatedAt": 1517017905,
        "executionNumber": 1,
        "versionNumber": 1
      }
    ]
  }
}
```

No se publica una notificación en el tema `jobs/notify-next` porque el siguiente trabajo en la cola sigue siendo `job1`.

Cuando `job1` finaliza, su estado cambia a `SUCCEEDED` y se publica esta notificación en el tema `jobs/notify`:

```
{
  "timestamp": 1517186269,
  "jobs": {
    "QUEUED": [
      {
        "jobId": "job2",
        "queuedAt": 1517017191,
        "lastUpdatedAt": 1517017191,
        "executionNumber": 1,
        "versionNumber": 1
      },
      {
        "jobId": "job3",
        "queuedAt": 1517017905,
        "lastUpdatedAt": 1517017905,
        "executionNumber": 1,
        "versionNumber": 1
      }
    ]
  }
}
```

En este punto, `job1` se ha eliminado de la cola y el siguiente trabajo que ejecutar es `job2`. La notificación se publica en el tema `jobs/notify-next`:

```
{
  "timestamp": 1517186269,
  "execution": {
    "jobId": "job2",
    "status": "QUEUED",
    "queuedAt": 1517017191,
    "lastUpdatedAt": 1517017191,
    "versionNumber": 1,
    "executionNumber": 1,
    "jobDocument": {
      "operation": "test"
    }
  }
}
```

Si `job3` tiene que empezar a ejecutarse antes que `job2` (lo cual no se recomienda), el estado de `job3` puede cambiarse a `IN_PROGRESS`. Si esto sucede, `job2` deja de ser el siguiente en la cola y se publica esta notificación en el tema `jobs/notify-next`:

```
{
  "timestamp": 1517186779,
  "execution": {
    "jobId": "job3",
    "status": "IN_PROGRESS",
    "queuedAt": 1517017905,
    "startedAt": 1517186779,
    "lastUpdatedAt": 1517186779,
    "versionNumber": 2,
    "executionNumber": 1,
    "jobDocument": {
      "operation": "test"
    }
  }
}
```

No se publica ninguna notificación en el tema `jobs/notify`, dado que no se ha añadido o eliminado ningún trabajo.

Si el dispositivo rechaza `job2` y actualiza su estado a `REJECTED`, se publica esta notificación en el tema `jobs/notify`:

```
{
  "timestamp": 1517189392,
  "jobs": {
    "IN_PROGRESS": [
      {
        "jobId": "job3",
        "queuedAt": 1517017905,
        "lastUpdatedAt": 1517186779,
        "startedAt": 1517186779,
        "executionNumber": 1,
        "versionNumber": 2
      }
    ]
  }
}
```

Si `job3` (que aún está en curso) se elimina de forma forzada, esta notificación se publica en el tema `jobs/notify`:

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

En este momento, la cola está vacía. La notificación se publica en el tema `jobs/notify-next`:

```
{
  "timestamp": 1517189551
}
```