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

После запуска каскадной рассылки, вы будете получать события в контексте созданной транзакции на указанный 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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fstrk.io/knowledge_base/cascades/assinkhronnye-sobytiya.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
