ИИ-агент работает циклом: принимает событие, получает только нужные данные, выбирает разрешённый инструмент, вызывает его и проверяет результат. После этого он отвечает пользователю, меняет состояние в рабочей системе или передаёт исключение сотруднику. Самая важная часть находится после генерации: нужно доказать, что сообщение отправилось, запись создалась один раз, а цена и наличие пришли из правильного источника.
Шаг 1. Получить событие
События приходят разными способами:
- webhook сообщает об изменении сразу;
- polling регулярно запрашивает новые объекты;
- пользователь загружает файл или отправляет сообщение;
- планировщик запускает проверку по времени.
Webhook не всегда лучше. В Avito-проекте DOLOROSA мы использовали опрос новых чатов. На аккаунте уже были сторонние подписки, а бизнес-правило требовало паузу перед ответом. Для YCLIENTS webhook оказался полезен, чтобы получать изменения записей и обновлять локальную память.
Шаг 2. Собрать контекст
Входное сообщение редко содержит все данные. Фраза «он ещё есть?» понятна только вместе с объявлением. «Запишите вечером» требует услуги, филиала, даты и расписания.
Контекст надо собирать из источников с понятным приоритетом. В DOLOROSA наличие приходит из МойСклада, а цена для разговора в Avito берётся из объявления. Это правило появилось после сравнения данных: одна карточка могла содержать другую сумму.
Полезно хранить не только значение, но и происхождение:
{
"fact": "price",
"value": "из контекста объявления",
"source": "avito_chat_context",
"checked_at": "request_time"
}В публичном журнале настоящие значения и идентификаторы заменяются обезличенными примерами.
Шаг 3. Выбрать инструмент
Модель получает список функций и их контракты. Например:
check_stock(product_id) -> in_stock | sold | unknown
find_slots(branch_id, service_id, date) -> slots[]
escalate(reason, context_ref) -> ticket_idЧем уже инструмент, тем легче проверить вызов. Функция solve_everything() скрывает ошибки. find_slots() имеет понятные аргументы и результат.
До выполнения код проверяет типы, обязательные поля, права и бизнес-ограничения. Если модель передала название вместо UUID, вызов должен завершиться контролируемой ошибкой, а не проверить случайный товар.
Шаг 4. Выполнить действие
Чтение и запись требуют разной осторожности. Повторить запрос свободных окон обычно безопасно. Повторить создание записи после таймаута опасно: первый вызов мог успеть выполниться.
Для операций записи используют один или несколько механизмов:
- idempotency key, если его поддерживает API;
- сохранение внешнего ID результата;
- проверка состояния перед повтором;
- запрет автоматического retry для неоднозначной операции.
В YCLIENTS-проекте безопасные GET-запросы повторялись, а book_record по умолчанию не отправлялся повторно после неопределённого сбоя. В Avito перед повторной отправкой сообщения канал перечитывал чат и искал уже доставленную собственную реплику.
Таймаут: действие могло уже выполниться
Отправили запрос
Например, на создание записи или отправку сообщения.
Не получили ответ
Сетевой сбой не доказывает, что операция не состоялась.
Проверили целевую систему
Ищем внешний ID, созданную запись или собственное сообщение.
Подтвердили результат или остановились
Не повторяем неоднозначную запись вслепую. При необходимости подключаем сотрудника.
Шаг 5. Проверить результат
HTTP 200 ещё не доказывает бизнес-результат. Нужно проверить, что в ответе есть ожидаемый объект, его ID сохранён, а целевая система показывает нужный статус.
Для КП проверка другая: каждая строка должна иметь источник, соответствие товара и флаг ручного просмотра. Для обработки фотографии сравниваются исходник и результат, отдельно проверяются надписи и форма предмета.
Шаг 6. Ответить или передать человеку
Эскалация является обычной веткой процесса. Агент передаёт диалог сотруднику, когда:
- данных недостаточно;
- права не позволяют выполнить действие;
- источники противоречат друг другу;
- клиент просит решение, которое требует осмотра или полномочий менеджера;
- цена ошибки выше стоимости ручной проверки.
В Telegram-хабе DOLOROSA каждый диалог Avito получил отдельную тему. Менеджер видел контекст и мог продолжить разговор без копирования переписки.
Шаг 7. Оставить след для разбора
В журнале нужны время, тип события, выбранный инструмент, результат проверки и причина эскалации. Сырой текст клиента, телефон и токены туда без необходимости не попадают.
Такой журнал помогает отличить ошибку модели от отказа API, нехватки прав или неверного правила. Например, HTTP 403 в YCLIENTS был связан с ролью технического пользователя, а не с промтом.
Проверка перед запуском
Для каждого инструмента прогоняем успешный сценарий, пустой результат, отказ доступа, timeout и повтор события. Затем запускаем теневой режим: система выполняет чтение и готовит решение, но не пишет клиенту или в рабочую систему. Только после разбора журналов включается ограниченная запись.
Если у вас есть конкретный процесс, Geron Labs может разложить его на события, источники, инструменты и проверки до оценки разработки.
Читайте также: Что такое ИИ-агент и какие задачи он может выполнять в бизнесе, Как настроить данные, инструменты, память и эскалации ИИ-агента, Как подключить ИИ-агента к Avito через API.
Источники
- YCLIENTS, webhooks: support.yclients.ru/993 (проверено 28.09.2026).
- МойСклад, JSON API: dev.moysklad.ru/doc/api/remap/1.2/ (проверено 28.09.2026).
Как это устроено в наших проектах
DOLOROSA: Avito и Telegram-хаб
Как Geron Labs связала Avito, МойСклад и Telegram: ответы по конкретному товару, фото, события заказов и бесшовное подключение менеджера.
EST.EPIL: ИИ-администратор
Как Geron Labs связала сайт и Telegram EST.EPIL с YCLIENTS: актуальные цены, свободные окна, подтверждение записи и передача администратору.
REGION SNAB: КП-агент
Рабочее место для Регионснаб: разбор тендера, поиск товаров в прайсах и интернете, проверка характеристик, расчёт и Excel/PDF.
Если нужна такая автоматизация
Консультант и хаб продаж
Пример диалога, источник остатков и правила передачи менеджеру.
Состав работ и порядок пилотаЗапись клиентов через YCLIENTS
Филиал, услуги, права приложения и пример сценария записи.
Состав работ и порядок пилотаЗаявки, номенклатура и КП
Обезличенная заявка, справочник товаров и образец принятого результата.
Состав работ и порядок пилота