Контракт для разработчика
Раздел для того, кто поднимает HTTP-обработчик на стороне клиента.Запрос от платформы
Адрес, заголовки, параметры и тело собираются из полей формы с подстановкой{{переменная}}. Доступны переменные звонка (from_number, to_number, direction и всё, что настроено в агенте и кампании), результаты уже выполненных функций и — только в блоке после звонка — call и analysis.
Секреты в поля не вписываются: только ссылкой {{env.ИМЯ_ПЕРЕМЕННОЙ}}, значение подставляется платформой при выполнении. В истории звонка запрос сохраняется маскированным.
Таймаут запроса — поле функции, по умолчанию 10 с, потолок 30 с. Эффективный таймаут ещё урезается остатком бюджета блока: остаток берётся один раз на строку и становится потолком для каждой её функции.
Ответ и маппинг
Из ответа платформа пишет в переменные сценария служебный набор (<имя>_status, _success, _error, _result, плюс глобальные http_*) и то, что перечислено в маппинге.
Маппинг — это словарь «имя переменной → JSONPath в ответе»; имя переменной здесь ключ, а не значение. В форме он и выглядит так: слева имя, справа путь (balance ← $.data.balance). Имена задаёт настройщик агента в кабинете, вы их не выбираете — договоритесь заранее, какие поля отдаёте.
Решение о звонке
Чтобы остановить набор из кампании, верните поля, которые в маппинге положены вcall_decision, call_decision_reason и call_retry_after (значения и последствия — в разделе Решение о звонке в кампании).
Минимальный обработчик, отменяющий звонок:
call_decision ← $.decision, call_decision_reason ← $.reason. Дальше — кампания с одним контактом: телефон не зазвонит, контакт закроется, в разбивке исходов появится «Отменены функцией».
Пробный вызов
Кнопки «Проверить» и «Проверить блок» бьют в эндпоинт кабинетаPOST /api/flows/{name}/call-functions/run. Тело: {function, phase: "pre"|"post", variables?, mock?, budget?} либо {functions: [...]} для прогона всего блока. Для phase="pre" поле budget выбирает бюджет: inbound (10 с, по умолчанию) или outbound (60 с). Для phase="post" тело принимает analysis — заглушку результата аналитики.
В ответе: status, elapsed_ms, имена записанных переменных, маскированный запрос, status_code, номер строки и зависимости, дифф переменных, а также when: {expression, result} — как отработало условие. Для phase="pre" добавляется decision — как прочиталось ваше решение: {action, reason, retry_after, retry_at, warning, declared}.