# Динамические сценарии

Динамические сценарии — это ключ к созданию по-настоящему умного и полезного ассистента. Они позволяют вашему боту выходить за рамки заготовленных ответов, обращаться к внешним системам, получать данные в реальном времени и предоставлять персонализированные ответы.

### Статические vs. Динамические сценарии

Чтобы понять силу динамических сценариев, давайте сравним их со статическими.

* **Статические сценарии** работают с заранее известной информацией. Они идеальны для ответов на общие вопросы (FAQ), где ответ всегда одинаков.
  * *Пример: «Какие у вас часы работы?» → «Мы работаем с 9:00 до 18:00.»*
* **Динамические сценарии** работают с изменяемыми, персональными данными. Они необходимы, когда ответ зависит от конкретного пользователя или внешней информации.
  * *Пример: «Где мой заказ?» → «Ваш заказ #12345 будет доставлен завтра в 15:00.»*

*Подробнее в* [razrabotka-dinamicheskogo-scenariya](https://docs.lia.chat/docs/for-developers/razrabotka-dinamicheskogo-scenariya "mention")

## Как работают динамические сценарии?

Магия динамических сценариев заключается в **сниппетах** — фрагментах кода на JavaScript, которые выполняются прямо внутри сценария.

С помощью сниппетов ваш ассистент может:

* Обращаться к вашему API для получения или отправки данных (например, проверить статус заказа, узнать баланс пользователя, создать новую заявку).
* Выполнять сложные вычисления (рассчитать стоимость доставки, применить скидку).
* Динамически формировать текст ответа, подставляя в него полученные данные.

<details>

<summary>Пример: Проверка статуса заказа</summary>

Давайте посмотрим, как это работает на практике. Пользователь спрашивает: "Где мой заказ #S-54321?"

1. **Сценарий определяет намерение** (`узнать_статус_заказа`) и извлекает **сущность** (`номер_заказа`: "S-54321").
2. Запускается **реакция "Сниппет"**, в которой выполняется следующий код:

   ```javascript
   async function main(facts) {
     // Получаем номер заказа, извлеченный из сообщения пользователя
     const orderId = facts.get('номер_заказа');

     try {
       // Отправляем запрос к API вашего магазина
       const response = await fetch(`https://api.your-shop.com/orders/${orderId}`);
       const orderData = await response.json();

       // Формируем динамический ответ
       const message = `Ваш заказ №${orderId} сейчас в статусе "${orderData.status}". Ожидаемая дата доставки: ${orderData.delivery_date}.`;

       // Отправляем ответ пользователю
       await mail.sendText(message);

     } catch (error) {
       // Если что-то пошло не так (например, заказ не найден)
       await mail.sendText('К сожалению, не удалось найти информацию по вашему заказу. Пожалуйста, проверьте номер и попробуйте еще раз.');
     }
   }
   ```
3. Пользователь получает персонализированный ответ, основанный на данных из вашей системы.

</details>

{% hint style="warning" %}
**Требования к API** Для реализации динамических сценариев на вашей стороне должен быть подготовлен соответствующий API, к которому сможет обращаться платформа. Наша команда поможет с настройкой интеграции.
{% endhint %}
