> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hubtalk.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# История, ограничения и диагностика

> Что видно в ленте событий звонка, чего механизм не делает и что означает каждый симптом.

# История, ограничения и диагностика

## Что видно в истории звонка

Раздел **История**, нужная сессия. В ленте событий рядом с репликами стоят события **«Функция до звонка»** и **«Функция после звонка»**. У каждого — статус, время выполнения, имена записанных переменных, номер строки и стадия исполнения (до набора, до первой реплики или поздняя доставка).

| Что видно                                 | Что произошло                                                                 |
| ----------------------------------------- | ----------------------------------------------------------------------------- |
| «Успех»                                   | функция отработала, переменные записаны                                       |
| «Ошибка»                                  | ваша система ответила ошибкой; текст ошибки рядом                             |
| «Таймаут»                                 | не сложилась в отведённое время                                               |
| «Пропущена (бюджет исчерпан)»             | время блока кончилось раньше, чем до неё дошла очередь                        |
| «ждём результат», а следом второе событие | поздняя доставка: агент начал говорить, не дожидаясь, результат приехал позже |
| «пропущено по условию»                    | условие «Выполнять, только если» оказалось ложным; выражение показано рядом   |
| «без результата аналитики»                | функция после звонка выполнилась, не дождавшись оценки разговора              |

События функций до звонка у исходящих стоят **выше** первой реплики: они и правда выполнились раньше набора номера.

## Ограничения

* **Функции не вызываются посреди разговора.** Всё, что нужно спросить по ходу диалога, — это узлы сценария на схеме.
* **Уже сказанная реплика не переигрывается.** Поздние данные агент использует в следующей реплике, а не переспрашивает задним числом.
* **Входящие звонки решением не отменяются** — оно действует только при наборе из кампании.
* **Блок не переигрывается.** Упавшая функция не срывает звонок, агент продолжает разговор без её данных, но после завершения блока второй раз она не пойдёт, и лога доставок нет. Повторы самого HTTP-запроса — это поле «Повторы» в форме функции, по умолчанию 0. Идемпотентность — на вашей стороне: один и тот же звонок может прийти к вам дважды при повторной финализации.
* **Число функций в блоке не ограничено**, но одновременно внутри одной строки выполняется не более 16 — это защита сервера, а не авторский лимит; сколько поместится в бюджет, решает самая длинная цепочка.
* **Функции после звонка делят очередь с оценкой разговоров.** Долгий запрос задерживает разбор следующих звонков — держите таймаут минимально достаточным.
* **Результат функций никуда не «переезжает».** В пост-аналитику и в вебхуки `call_ended` / `call_analyzed` он не попадает; форма вебхуков не менялась.
* **Пост-аналитика, базы знаний и вебхуки из конвейера не редактируются** — эти блоки показывают настройки и ведут к их формам.

## Диагностика

| Симптом                                                                           | Где смотреть и что это значит                                                                            |
| --------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| Функция со статусом «Таймаут»                                                     | не сложилась в бюджет блока или в свой таймаут; у входящих ждите второе событие с окончательным статусом |
| Переменные пустые, `<имя>_success = "false"`                                      | смотрите `<имя>_error` в событии функции: сеть, код ответа, маппинг                                      |
| Функция «отработала», но переменные пустые                                        | поле в ответе называется иначе, чем в маппинге, — сверьте JSONPath                                       |
| Событие «ждём результат», потом «Успех»                                           | поздняя доставка сработала; данные пришли после первой реплики, это норма                                |
| Событие «пропущено по условию»                                                    | условие «Выполнять, только если» оказалось ложным; в событии лежит само выражение                        |
| Решение не сработало, в событии «решение действует только при наборе из кампании» | звонок не из кампании; решение действует только там                                                      |
| Предупреждение о нераспознанном решении                                           | в `call_decision` пришло значение вне `proceed` / `cancel` / `retry`, набор пошёл                        |
| Кампания встала на паузу с причиной `function_cancel_share`                       | ваша система отменяет всё подряд; проверьте её, кампанию нужно снять с паузы вручную                     |
| Функции появились в истории через десятки секунд после конца звонка               | блок ждал завершения оценки разговора; это норма, потолок ожидания — 60 секунд                           |
| Пометка «без результата аналитики»                                                | ждать дольше не стали, `analysis.status = pending`                                                       |
| Строка «Самая длинная цепочка» больше бюджета                                     | уменьшите таймауты или поставьте независимые функции в одну строку                                       |

Граница простая: до отправки запроса и после получения ответа — наша сторона; что происходит внутри вашей системы и что она вернула — ваша.
