Пошаговые инструкции intermediate 18 мин

Как сделать ИИ-агента для AmoCRM

Пошаговая инструкция от нуля до рабочего прототипа: AmoCRM, OAuth, n8n, Google Sheets approval, AI summary, примечания, задачи и защита от дублей.

AI-агенты n8n CRM amoCRM Google Sheets задачи сделки approval OAuth

Что получится в результате

Соберем безопасного ИИ-агента для AmoCRM, который работает с новыми сделками и не делает опасных действий без человека.

В первой рабочей версии схема такая:

  1. менеджер или форма создает сделку в AmoCRM;
  2. n8n по расписанию забирает новые сделки из выбранной воронки;
  3. агент читает сделку, контакт, примечания и открытые задачи;
  4. LLM готовит краткое резюме, оценку лида, недостающие поля и следующий шаг;
  5. результат попадает в Google Sheets со статусом `draft`;
  6. человек проверяет строку и ставит `approved`;
  7. второй workflow записывает в сделку примечание и создает задачу менеджеру;
  8. в таблицу записываются `note_id`, `task_id`, статус `done` или текст ошибки.

В этой версии агент не меняет этап сделки, не отправляет сообщение клиенту, не удаляет данные и не закрывает сделку. Это важно: сначала делаем управляемый прототип, который помогает менеджеру, а не принимает решения вместо него.

Что понадобится

  • Аккаунт AmoCRM с правами администратора.
  • Поддомен AmoCRM, например `company.amocrm.ru`.
  • Тестовая воронка или тестовый этап в существующей воронке.
  • Интеграция AmoCRM с `Integration ID`, `Secret key`, `Redirect URI` и `Authorization code`.
  • n8n Cloud или self-hosted n8n.
  • Google Sheets для approval и журнала.
  • API-ключ LLM-провайдера.
  • 60-90 минут на первую настройку и проверку.

Шаг 1. Создайте тестовый этап в AmoCRM

Откройте AmoCRM и подготовьте место, где можно безопасно проверять агента.

  1. Перейдите в раздел `Сделки`.
  2. Откройте настройки воронки.
  3. Создайте этап `AI тест`.
  4. Создайте тестовую сделку `Тест AI-агента`.
  5. Добавьте контакт с телефоном и email.
  6. Добавьте в примечание текст:
Клиент интересуется внедрением AI-агента для отдела продаж.
Бюджет предварительно 150000 рублей.
Нужно перезвонить завтра до 12:00.

Проверка: в AmoCRM есть одна тестовая сделка на этапе `AI тест`, и вы можете открыть ее карточку.

Шаг 2. Запишите технические идентификаторы

Для API нужны не названия, а id.

Пока создайте черновую таблицу `AmoCRM AI agent config` и добавьте лист `config` с колонками:

key
value
comment

Заполните строки:

amo_subdomain
company
Без .amocrm.ru

pipeline_id
пока пусто
ID воронки получим через API

status_id
пока пусто
ID этапа AI тест получим через API

responsible_user_id
пока пусто
ID менеджера получим через API

Проверка: у вас есть таблица, куда позже можно вставить id без редактирования workflow.

Шаг 3. Создайте интеграцию AmoCRM

В AmoCRM откройте раздел интеграций.

  1. Перейдите в `amoMarket`.
  2. Откройте меню с тремя точками.
  3. Создайте внешнюю интеграцию.
  4. Назовите ее `AI lead assistant`.
  5. В `Redirect URI` укажите временный адрес, например:
https://example.com/amo/oauth/callback

Если у вас уже есть публичный n8n, можно указать будущий webhook:

https://n8n.example.com/webhook/amo-oauth
  1. В правах интеграции оставьте только то, что нужно первой версии:
  • чтение сделок;
  • чтение контактов;
  • чтение задач;
  • чтение и создание примечаний;
  • создание задач.
  1. Сохраните интеграцию.
  2. Скопируйте `Integration ID` и `Secret key`.

Проверка: у вас есть `client_id` и `client_secret`. Не отправляйте их в чат и не храните в тексте статьи или публичном репозитории.

Шаг 4. Получите Authorization code

Откройте карточку созданной интеграции и установите ее в текущий аккаунт AmoCRM.

После установки AmoCRM выдаст `Authorization code`. Он нужен только для первого обмена на токены.

Важные ограничения:

  • `Authorization code` живет ограниченное время;
  • если код протух, выпустите новый;
  • `access_token` живет около суток;
  • `refresh_token` нужно хранить и обновлять, иначе интеграция перестанет работать.

Проверка: у вас есть четыре значения:

subdomain
client_id
client_secret
authorization_code

Шаг 5. Обменяйте code на access_token и refresh_token

Откройте терминал на своем компьютере или сервере и выполните запрос.

Замените:

  • `company` на поддомен AmoCRM;
  • `CLIENT_ID` на Integration ID;
  • `CLIENT_SECRET` на Secret key;
  • `AUTHORIZATION_CODE` на код авторизации;
  • `REDIRECT_URI` на тот же Redirect URI, который указан в интеграции.
curl -X POST "https://company.amocrm.ru/oauth2/access_token" \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": "CLIENT_ID",
    "client_secret": "CLIENT_SECRET",
    "grant_type": "authorization_code",
    "code": "AUTHORIZATION_CODE",
    "redirect_uri": "REDIRECT_URI"
  }'

В ответе должны прийти поля:

{
  "token_type": "Bearer",
  "expires_in": 86400,
  "access_token": "ACCESS_TOKEN",
  "refresh_token": "REFRESH_TOKEN"
}

Сохраните `access_token` и `refresh_token` в n8n credentials или в защищенные переменные окружения. Не храните их в Google Sheets.

Проверка: ответ не содержит ошибки `invalid_grant`, `invalid_client` или `redirect_uri_mismatch`.

Шаг 6. Проверьте доступ к API AmoCRM

Выполните простой запрос к аккаунту:

curl "https://company.amocrm.ru/api/v4/account" \
  -H "Authorization: Bearer ACCESS_TOKEN"

Ожидаемый результат: JSON с id аккаунта, названием, поддоменом и другой служебной информацией.

Если пришел `401`, проверьте:

  • не протух ли `access_token`;
  • верный ли поддомен;
  • нет ли пробела в заголовке `Bearer ACCESS_TOKEN`;
  • установлена ли интеграция в нужный аккаунт.

Шаг 7. Получите id воронки, этапа и пользователя

Сначала запросите воронки:

curl "https://company.amocrm.ru/api/v4/leads/pipelines" \
  -H "Authorization: Bearer ACCESS_TOKEN"

Найдите в ответе воронку и этап `AI тест`. Запишите в таблицу:

pipeline_id
status_id

Потом запросите пользователей:

curl "https://company.amocrm.ru/api/v4/users" \
  -H "Authorization: Bearer ACCESS_TOKEN"

Найдите менеджера, которому агент будет ставить задачи, и запишите:

responsible_user_id

Проверка: в листе `config` заполнены `pipeline_id`, `status_id` и `responsible_user_id`.

Шаг 8. Создайте таблицу approval

В той же Google Sheets создайте лист `agent_log`.

Сделайте колонки:

run_id
lead_id
lead_name
contact_name
phone
email
pipeline_id
status_id
summary
qualification
missing_fields
next_step
task_text
note_text
confidence
review_status
note_id
task_id
error
created_at
approved_at
processed_at

Статусы в `review_status` используйте такие:

  • `draft` - агент подготовил результат;
  • `approved` - человек разрешил запись в AmoCRM;
  • `rejected` - человек отклонил результат;
  • `done` - примечание и задача созданы;
  • `error` - workflow упал и записал причину.

Проверка: таблица готова принимать черновики и хранить следы действий.

Шаг 9. Создайте первый workflow в n8n

Назовите workflow:

AmoCRM AI draft

Добавьте узлы:

  1. `Schedule Trigger`;
  2. `Google Sheets` для чтения листа `config`;
  3. `HTTP Request` для получения сделок;
  4. `HTTP Request` для получения контакта;
  5. `HTTP Request` для получения примечаний;
  6. `HTTP Request` для получения задач;
  7. `Code` для сборки контекста;
  8. `LLM` или `HTTP Request` к LLM API;
  9. `Code` для проверки JSON;
  10. `Google Sheets` для записи строки в `agent_log`.

Проверка: workflow пока не активирован, но все узлы на схеме есть.

Шаг 10. Настройте чтение сделок из AmoCRM

В узле `HTTP Request` укажите:

Method: GET
URL: https://{{$json.amo_subdomain}}.amocrm.ru/api/v4/leads
Authentication: None

Добавьте header:

Authorization: Bearer {{$json.access_token}}

Если токен хранится в n8n credentials, берите его из credentials, а не из Google Sheets.

Query parameters:

with=contacts
filter[statuses][0][pipeline_id]={{$json.pipeline_id}}
filter[statuses][0][status_id]={{$json.status_id}}
limit=50

Проверка: узел возвращает массив сделок, а тестовая сделка `Тест AI-агента` есть в `_embedded.leads`.

Шаг 11. Отфильтруйте уже обработанные сделки

Перед отправкой в LLM проверьте, нет ли `lead_id` в `agent_log` со статусами:

  • `draft`;
  • `approved`;
  • `done`.

В первой версии достаточно простого правила:

если lead_id уже есть в agent_log и review_status не error, пропустить сделку

Проверка: повторный запуск workflow не создает новый черновик для той же сделки.

Шаг 12. Получите контакт сделки

Если в сделке есть связанный контакт, заберите его id из:

_embedded.contacts[0].id

Сделайте запрос:

curl "https://company.amocrm.ru/api/v4/contacts/CONTACT_ID" \
  -H "Authorization: Bearer ACCESS_TOKEN"

В n8n это будет `HTTP Request`:

Method: GET
URL: https://{{$json.amo_subdomain}}.amocrm.ru/api/v4/contacts/{{$json.contact_id}}

Из контакта заберите:

  • имя;
  • телефон;
  • email;
  • компанию, если есть;
  • ответственного.

Проверка: в контексте агента есть контактные данные, а не только название сделки.

Шаг 13. Получите примечания по сделке

Сделайте запрос:

curl "https://company.amocrm.ru/api/v4/leads/LEAD_ID/notes" \
  -H "Authorization: Bearer ACCESS_TOKEN"

В n8n:

Method: GET
URL: https://{{$json.amo_subdomain}}.amocrm.ru/api/v4/leads/{{$json.lead_id}}/notes

Оставьте для LLM только полезные поля:

  • текст примечания;
  • дата;
  • автор;
  • тип примечания.

Не отправляйте в LLM лишние системные поля, токены и внутренние id, которые не нужны для вывода.

Проверка: тестовое примечание про бюджет и звонок попало в контекст.

Шаг 14. Получите открытые задачи по сделке

Сделайте запрос задач:

curl "https://company.amocrm.ru/api/v4/tasks?filter[entity_type]=leads&filter[entity_id]=LEAD_ID" \
  -H "Authorization: Bearer ACCESS_TOKEN"

В контекст передайте:

  • текст задачи;
  • дедлайн;
  • выполнена задача или нет;
  • ответственный.

Проверка: если у сделки уже есть задача, агент не предлагает создать дубль с тем же смыслом.

Шаг 15. Соберите контекст для LLM

В узле `Code` сформируйте один объект:

{
  "lead": {
    "id": 123456,
    "name": "Тест AI-агента",
    "price": 150000,
    "pipeline_id": 111,
    "status_id": 222
  },
  "contact": {
    "name": "Иван Петров",
    "phone": "+79990000000",
    "email": "ivan@example.com"
  },
  "notes": [
    "Клиент интересуется внедрением AI-агента для отдела продаж. Бюджет 150000 рублей. Нужно перезвонить завтра до 12:00."
  ],
  "tasks": []
}

Проверка: в контексте нет пустой каши из полного API-ответа. Только данные, по которым можно принять следующий шаг.

Шаг 16. Добавьте prompt для агента

В LLM-узле используйте такой системный prompt:

Ты помощник менеджера по продажам в AmoCRM.
Твоя задача - подготовить краткое резюме сделки, оценить лида, найти недостающие данные и предложить одну безопасную задачу менеджеру.

Запрещено:
- обещать клиенту скидки;
- менять этап сделки;
- закрывать сделку;
- отправлять сообщения клиенту;
- придумывать факты, которых нет в CRM;
- писать юридические или финансовые обещания.

Верни только валидный JSON.

User prompt:

Данные сделки:
{{ JSON.stringify($json.context) }}

Верни JSON строго по схеме:
{
  "summary": "2-4 коротких предложения по фактам из CRM",
  "qualification": "hot|warm|cold|unknown",
  "missing_fields": ["что нужно уточнить"],
  "next_step": "одно следующее действие",
  "task_text": "короткая задача менеджеру",
  "note_text": "примечание для AmoCRM без внутренних рассуждений",
  "confidence": 0.0,
  "risk_flags": ["риски или пустой массив"]
}

Проверка: LLM возвращает JSON, а не красивый текст с пояснениями.

Шаг 17. Проверьте JSON перед записью

Добавьте узел `Code`, который валидирует ответ.

Минимальные правила:

  • `summary` не пустой;
  • `task_text` не пустой;
  • `note_text` не пустой;
  • `qualification` одно из `hot`, `warm`, `cold`, `unknown`;
  • `confidence` от `0` до `1`;
  • в тексте нет фраз вроде `я думаю`, `возможно`, `как AI`.

Если проверка не прошла, запишите строку в `agent_log` со статусом `error`.

Проверка: сломанный JSON не попадает в AmoCRM.

Шаг 18. Запишите черновик в Google Sheets

В узле `Google Sheets` добавьте строку в `agent_log`.

Заполняйте:

run_id: {{$execution.id}}
lead_id: id сделки
lead_name: название сделки
contact_name: имя контакта
phone: телефон
email: email
pipeline_id: id воронки
status_id: id этапа
summary: из JSON
qualification: из JSON
missing_fields: список через точку с запятой
next_step: из JSON
task_text: из JSON
note_text: из JSON
confidence: из JSON
review_status: draft
created_at: текущая дата

Проверка: после запуска workflow в таблице появилась строка `draft`, но в AmoCRM еще ничего не записалось.

Шаг 19. Проверьте черновик руками

Откройте строку в `agent_log`.

Проверьте:

  • резюме совпадает с карточкой сделки;
  • задача понятная и выполнимая;
  • агент не придумал бюджет, имя, срок или потребность;
  • `note_text` можно безопасно показать внутри CRM;
  • нет команды отправить сообщение клиенту.

Если все нормально, поставьте:

review_status: approved
approved_at: текущая дата

Если плохо, поставьте:

review_status: rejected

Проверка: только строка `approved` может уйти обратно в AmoCRM.

Шаг 20. Создайте второй workflow для записи в AmoCRM

Назовите workflow:

AmoCRM AI writeback

Добавьте узлы:

  1. `Schedule Trigger`;
  2. `Google Sheets` для чтения `agent_log`;
  3. `Filter` по `review_status = approved`;
  4. `HTTP Request` для создания примечания;
  5. `HTTP Request` для создания задачи;
  6. `Google Sheets` для обновления строки.

Проверка: workflow пишет только approved-строки и не трогает draft/rejected.

Шаг 21. Запишите примечание в сделку

Для создания обычного примечания используйте endpoint примечаний сделки:

curl -X POST "https://company.amocrm.ru/api/v4/leads/LEAD_ID/notes" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "note_type": "common",
      "params": {
        "text": "AI summary: клиент интересуется внедрением AI-агента для продаж. Бюджет 150000 рублей. Следующий шаг: перезвонить завтра до 12:00."
      }
    }
  ]'

В n8n подставляйте:

LEAD_ID = lead_id из Google Sheets
text = note_text из Google Sheets

Проверка: в карточке сделки появилось новое примечание с текстом агента.

Шаг 22. Создайте задачу менеджеру

Для задачи используйте endpoint задач:

curl -X POST "https://company.amocrm.ru/api/v4/tasks" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "text": "Перезвонить клиенту и уточнить сроки внедрения AI-агента",
      "complete_till": 1766606400,
      "entity_id": 123456,
      "entity_type": "leads",
      "responsible_user_id": 111111
    }
  ]'

`complete_till` - Unix timestamp. Для первой версии ставьте дедлайн на следующий рабочий день в 12:00.

Проверка: в сделке появилась задача менеджеру, а не просто примечание.

Шаг 23. Обновите строку в agent_log

После успешной записи в AmoCRM обновите строку:

review_status: done
note_id: id созданного примечания
task_id: id созданной задачи
processed_at: текущая дата
error: пусто

Если один из запросов упал, запишите:

review_status: error
error: текст ошибки AmoCRM или n8n

Проверка: по таблице видно, что именно сделал агент и где он упал, если что-то пошло не так.

Шаг 24. Настройте обновление access_token

Access token живет ограниченное время, поэтому добавьте отдельный workflow `AmoCRM token refresh`.

Запрос:

curl -X POST "https://company.amocrm.ru/oauth2/access_token" \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": "CLIENT_ID",
    "client_secret": "CLIENT_SECRET",
    "grant_type": "refresh_token",
    "refresh_token": "REFRESH_TOKEN",
    "redirect_uri": "REDIRECT_URI"
  }'

После обновления сохраните оба новых значения:

  • новый `access_token`;
  • новый `refresh_token`.

Старый refresh token после обновления больше не используйте.

Проверка: workflow обновляет токены до того, как основной workflow получает `401`.

Шаг 25. Добавьте защиту от дублей

Перед созданием задачи проверьте, нет ли уже открытой задачи с похожим текстом.

Простое правило для первой версии:

если у сделки уже есть открытая задача, где встречается "перезвонить" или "follow-up", новую задачу не создавать

В этом случае агент может записать только примечание:

AI summary обновлен, задача уже существует.

Проверка: повторный запуск writeback не создает две одинаковые задачи.

Шаг 26. Добавьте webhook после стабильной проверки

Когда расписание работает без ошибок, можно перейти с polling на webhook.

Для этого создайте endpoint в n8n:

POST https://n8n.example.com/webhook/amocrm-lead-event

В AmoCRM подключите webhook на события по сделкам, например добавление или изменение сделки. Учитывайте, что webhook API доступен не на всех тарифах.

Для первой версии webhook должен только запускать обработку и передавать `lead_id`. Все данные сделки агент все равно должен дочитывать через API.

Проверка: изменение тестовой сделки запускает workflow, но запись в AmoCRM все равно происходит только после `approved`.

Минимальная проверка результата

Прототип работает, если выполняются все пункты:

  • тестовая сделка на этапе `AI тест` попадает в n8n;
  • агент читает сделку, контакт, примечания и задачи;
  • в `agent_log` появляется строка `draft`;
  • человек ставит `approved`;
  • в AmoCRM появляется примечание с AI summary;
  • в AmoCRM появляется задача менеджеру;
  • в `agent_log` записаны `note_id`, `task_id` и `done`;
  • повторный запуск не создает дубли;
  • при ошибке строка получает статус `error`, а не исчезает молча.

Что нельзя автоматизировать в первой версии

  • автоматическую смену этапа сделки;
  • закрытие сделки как успешной или проигранной;
  • изменение бюджета;
  • удаление контактов, сделок, задач и примечаний;
  • отправку сообщений клиенту без проверки;
  • массовые действия по всем сделкам;
  • обещания скидок, сроков и условий от имени менеджера;
  • обработку персональных данных без понятных прав доступа и журнала.

Частые вопросы

Можно ли сделать агента без Google Sheets?

Да. Вместо Google Sheets можно использовать базу данных, Airtable, Notion или админку сайта. Для первой версии Google Sheets удобен тем, что редактор сразу видит `draft`, `approved`, `done`, ошибку и id созданных объектов.

Почему нельзя сразу писать результат в AmoCRM без approval?

Потому что AI может неверно понять сделку, придумать недостающий факт или поставить неподходящую задачу. Approval оставляет человека между генерацией и изменением CRM.

Что делать, если AmoCRM возвращает 401?

Сначала обновите `access_token` через `refresh_token`. Потом проверьте поддомен, права интеграции, установлена ли интеграция в аккаунт и не был ли refresh token заменен новым при предыдущем обновлении.

Можно ли использовать встроенного AI-агента AmoCRM?

Да, если он закрывает ваш сценарий. Эта инструкция нужна для случая, когда вы хотите контролировать prompt, approval, запись примечаний, логику задач, журнал ошибок и интеграции с внешними сервисами.

Какой минимум нужен для запуска?

Одна тестовая сделка, интеграция AmoCRM, рабочий access token, n8n, Google Sheets, LLM API, один workflow для черновика и второй workflow для записи approved-результата обратно в сделку.

Дальше по теме

Похожие материалы