# Ассинхронные события

После запуска каскадной рассылки, вы будете получать события в контексте созданной транзакции на указанный callback URL.

API Fasttrack направляет два типа событий по каждой транзакции:

<table><thead><tr><th width="226">Тип события</th><th>Описание</th></tr></thead><tbody><tr><td><code>transaction.done</code></td><td>Обновление по успешно созданной транзакции</td></tr><tr><td><code>transaction.error</code></td><td>Ошибка в процессе обработки транзакции</td></tr></tbody></table>

{% hint style="info" %}
**Заметка:** callback-запросы будут выполняться с типом запроса POST в формате JSON.
{% endhint %}

## Событие transaction.done

Событие с типом `transaction.done` приходит по факту завершения транзакции, а также в качестве уведомления о смене статуса у провайдера для сообщения отправленного по маршруту.

Ключевые атрибуты события:

* `uuid`: Уникальный идентификатор транзакции;
* `done_status`: Статус транзакции;
* `successful_routes`: Маршрут, по которому успешно было отправлено сообщение;
* `route_details`: Информация о состоянии каждого маршрута, включая уникальный идентификатор, статус отправки, статус сообщения от провайдера и комментарий к статусу от провайдера.

Пример события `transaction.done` по завершению транзакции:

```json
{
  "event_type": "transaction.done",
  "payload": {
    "uuid": "cc1f638a-f039-48b9-8885-af161e2838f8",
    "done_at": "2024-02-01T07:43:57.106701Z",
    "done_status": "MESSAGE_SENT",
    "successful_routes": [
      "WHATSAPP"
    ],
    "route_details": {
      "BOT": {
        "uuid": "96791937-37a1-45c0-b9ee-c20f0807579a",
        "state": "ERROR",
        "response_status": null,
        "response_description": null
      },
      "WHATSAPP": {
        "uuid": "f2ff7bf0-20b4-4ece-b087-1db78866d7d0",
        "state": "SENT",
        "response_status": "DELIVERED",
        "response_description": null
      },
      "VK_NOTIFY": {
        "uuid": "fe38d2f4-af80-4e68-98a2-a3590ae2ee05",
        "state": "CANCELLED",
        "response_status": null,
        "response_description": null
      },
      "VIBER_SERVICE_MESSAGES": {
        "uuid": "d25c241a-de5b-4f6a-80cc-749bf0d90461",
        "state": "CANCELLED",
        "response_status": null,
        "response_description": null
      }
    },
    "context": {
      "some": "value"
    }
  },
  "timestamp": 1706773437.1262264
}
```

В случае, если провайдер канала (например WhatsApp) информирует о смене статуса отправленного сообщения (например, о доставке или прочтении), вы будете получать обновленное событие `transaction.done`.

Процесс может выглядеть следующим образом:

1. **Запуск каскадной рассылки**: когда рассылка завершиться, вы получите событие `transaction.done` с информацией о транзакции и состоянии каждого маршрута и контексте этой транзакции на момент ее завершения.
2. **Изменение статуса в WhatsApp (доставлено)**: вы получите дополнительное событие `transaction.done`. Это событие имеет ту же структуру, что и первое, но с обновленной информацией по каналу WhatsApp.
3. **Изменение статуса в WhatsApp (прочитано):** аналогично, \*\*\*\*вы получите событие `transaction.done` с обновленной информацией по каналу WhatsApp.

Пример события `transaction.done` с обновленным статусом в WhatsApp:

{% code lineNumbers="true" fullWidth="false" %}

```json
{
  "event_type": "transaction.done",
  "payload": {
    "uuid": "cc1f638a-f039-48b9-8885-af161e2838f8",
    "done_at": "2024-02-01T07:43:57.106701Z",
    "done_status": "MESSAGE_SENT",
    "successful_routes": [
      "WHATSAPP"
    ],
    "route_details": {
      "BOT": {
        "uuid": "96791937-37a1-45c0-b9ee-c20f0807579a",
        "state": "ERROR",
        "response_status": null,
        "response_description": null
      },
      "WHATSAPP": {
        "uuid": "f2ff7bf0-20b4-4ece-b087-1db78866d7d0",
        "state": "SENT",
        "response_status": "READ",
        "response_description": null
      },
      "VK_NOTIFY": {
        "uuid": "fe38d2f4-af80-4e68-98a2-a3590ae2ee05",
        "state": "CANCELLED",
        "response_status": null,
        "response_description": null
      },
      "VIBER_SERVICE_MESSAGES": {
        "uuid": "d25c241a-de5b-4f6a-80cc-749bf0d90461",
        "state": "CANCELLED",
        "response_status": null,
        "response_description": null
      }
    },
    "context": {
      "some": "value"
    }
  },
  "timestamp": 1706773437.1262264
}
```

{% endcode %}

В этом примере обновлено значение `response_status` для маршрута WHATSAPP.

Варианты значений атрибута `state` (статус Fasttrack) для маршрута транзакции:

<table data-header-hidden><thead><tr><th width="174"></th><th></th></tr></thead><tbody><tr><td><code>CREATED</code></td><td>Сообщение создано</td></tr><tr><td><code>ENQUEUED</code></td><td>Сообщение в очереди на отправку</td></tr><tr><td><code>IN_PROCESS</code></td><td>Сообщение отправляется</td></tr><tr><td><code>SENT</code></td><td>Сообщение отправлено</td></tr><tr><td><code>ERROR</code></td><td>Ошибка при отправке сообщения</td></tr><tr><td><code>CANCELLED</code></td><td>Отправка сообщения отменена</td></tr></tbody></table>

Варианты значений атрибута `response_status` (статус провайдера) для маршрута транзакции:

<table data-header-hidden><thead><tr><th width="171"></th><th></th></tr></thead><tbody><tr><td><code>SENT</code></td><td>Сообщение отправлено</td></tr><tr><td><code>DELIVERED</code></td><td>Сообщение доставлено</td></tr><tr><td><code>READ</code></td><td>Сообщение прочитано</td></tr><tr><td><code>ERROR</code></td><td>Ошибка при отправке сообщения</td></tr><tr><td><code>UNDELIVERED</code></td><td>Сообщение не доставлено</td></tr></tbody></table>

## Событие transaction.error

Событие с типом `transaction.error` содержит информацию об ошибках, которые возникли в процессе обработки транзакции. Вы получите подробные данные о событии, включая:

* `event_type`: Тип события;
* `uuid`: Уникальный идентификатор транзакции;
* `request`: Исходный запрос на создание транзакции;
* `errors`: Объект указывающий на атрибут с ошибкой и уточняющий комментарий.

Пример события `transaction.error`:

```json
{
  "event_type": "transaction.error",
  "payload": {
    "uuid": "1ff94733-828b-48f4-8cf0-9b843e072bf6",
    "request": {
      "phone_number": "+7999999999",
      "routing": [
        "BOT",
        "WHATSAPP"
      ],
      "bot_node_id": 1234,
      "whatsapp_template_name": "shablon_name",
      "whatsapp_template_variables": {
        "v1": "Оператор 1"
      },
      "validity_period_seconds": 300,
      "tag": "test_zapros",
      "context": {
        "cascade": "test",
        "foo": "bar"
      }
    },
    "response": null,
    "errors": {
      "whatsapp_template_name": [
        "Шаблон с идентификатором shablon_name не найден."
      ]
    }
  },
  "timestamp": 1706773647.5724614
}
```

Пример события transaction.error содержит сообщение о том, что WhatsApp-шаблон с идентификатором `shablon_name` не найден на платформе Fasttrack.
