Интеграция нейросети в amoCRM для автоответов и анализа лидов
Новая сделка в amoCRM отправляет вебхук на ваш сервер, модель оценивает заявку, а подсказка менеджеру появляется примечанием в карточке.
4 мин · · бизнес · автоматизация
Менеджеры в amoCRM тратят заметную часть дня на то, чтобы прочитать новую заявку, понять её срочность и решить, что делать дальше. Нейросеть может делать первичный разбор за них: amoCRM сообщает вашему серверу о новой сделке, сервер отправляет описание модели через Zukko, а ответ появляется примечанием в карточке. Ниже — настройка вебхука, токен для API, рабочий обработчик на PHP и расчёт стоимости.
Как работает интеграция amoCRM с нейросетью
- В amoCRM создаётся сделка → вебхук отправляет её данные на ваш адрес.
- Обработчик собирает из полей сделки текст для анализа.
- Текст уходит модели через
https://api.zukko.pro/v1/chat/completions. - Ответ записывается в сделку примечанием через REST API amoCRM (
/api/v4/leads/notes).
В amoCRM лиды называются сделками, поэтому в API и вебхуках это сущность leads.
Шаг 1: вебхук в amoCRM
По документации amoCRM (международная версия — Kommo, API у них общий) вебхуки настраиваются так:
- Откройте Настройки → Интеграции и нажмите Веб-хуки в правом верхнем углу.
- Укажите URL обработчика, например
https://ваш-сервер.ru/amo-handler.php?key=длинная_случайная_строка. - Выберите событие «Сделка добавлена» и сохраните.
Две особенности, от которых зависит код:
- Данные приходят не в JSON, а как обычная форма (
application/x-www-form-urlencoded):leads[add][0][id],leads[add][0][name],leads[add][0][custom_fields][...]. В PHP они уже разобраны в$_POST. - amoCRM ждёт ответ около 2 секунд. Если обработчик не успел или вернул ошибку, вебхук считается недоставленным. Поэтому сначала отвечаем
200, а модель вызываем после.
У вебхуков CRM нет подписи, поэтому добавьте в URL секретный параметр key и проверяйте его в обработчике — иначе кто угодно сможет слать запросы на ваш адрес и тратить баланс.
Шаг 2: токен для API amoCRM
Чтобы записывать примечания, обработчику нужен доступ к API аккаунта. Для интеграции, которая работает только в вашем аккаунте, проще всего долгосрочный токен:
- В разделе Интеграции создайте собственную (внешнюю) интеграцию.
- На вкладке ключей и доступов сгенерируйте долгосрочный токен, выбрав срок действия.
- Сохраните его в переменную окружения сервера.
Токен работает с правами администратора, который его создал, поэтому храните его как пароль. Точные названия кнопок зависят от версии интерфейса — сверяйтесь с документацией для разработчиков amoCRM. Если интеграция будет ставиться в чужие аккаунты, нужна полноценная OAuth-авторизация с обновлением токенов.
Шаг 3: обработчик на PHP
<?php
// amo-handler.php — обработчик вебхука amoCRM «Сделка добавлена»
if (!hash_equals((string) getenv('AMO_HOOK_KEY'), (string) ($_GET['key'] ?? ''))) {
http_response_code(403);
exit;
}
// amoCRM ждёт ответ не дольше ~2 секунд: отвечаем сразу (PHP-FPM)
http_response_code(200);
echo 'OK';
if (function_exists('fastcgi_finish_request')) {
fastcgi_finish_request();
}Переменные окружения: ZUKKO_API_KEY, AMO_SUBDOMAIN, AMO_TOKEN и AMO_HOOK_KEY (та самая секретная строка из URL вебхука). Названия полей в ALLOWED_FIELDS замените на свои: так в модель уходят только нужные для оценки данные, без контактов клиента.
Если PHP работает не через FPM и fastcgi_finish_request недоступна, сохраняйте входящие события в базу или файл, а обрабатывайте их отдельным скриптом по cron.
Задача вместо примечания
Для срочных сделок удобнее сразу ставить задачу ответственному. Это метод POST /api/v4/tasks:
function addTask(int $leadId, string $text): void
{
$subdomain = getenv('AMO_SUBDOMAIN');
$ch = curl_init("https://{$subdomain}.amocrm.ru/api/v4/tasks");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode([[
'entity_id' => $leadId,
'entity_type' => 'leads',
'text' => $text,
'complete_till' => time() + 3600, // срок — через час
]], JSON_UNESCAPED_UNICODE),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('AMO_TOKEN'),
'Content-Type: application/json',
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
]);
curl_exec($ch);
}Чтобы понять, когда ставить задачу, попросите модель начинать ответ со слова «ВЫСОКАЯ», «СРЕДНЯЯ» или «НИЗКАЯ» и проверяйте первое слово в коде.
Сколько стоит
Пример: 50 сделок в день, на каждую около 300 входных и 100 выходных токенов. За день это 50 × 400 = 20 000 токенов, то есть 0,02M.
| Модель | Цена вход/выход за 1M | В день | За 30 дней |
|---|---|---|---|
glm-5.3-flash | $0.04 / $0.04 | 0,02 × 0,04 = $0.0008 | $0.024 |
gpt-5.6-luna | $0.1 / $0.1 | 0,02 × 0,1 = $0.002 | $0.06 |
claude-sonnet-5 | $0.3 / $0.3 | 0,02 × 0,3 = $0.006 | $0.18 |
При 500 сделках в день суммы умножаются на 10: на glm-5.3-flash это $0.24 за 30 дней. Реальное число токенов видно в поле usage ответа и в истории расходов в кабинете. Насколько модель полезна именно для ваших заявок, проверьте на выборке: прогоните 30–50 прошлых сделок с известным результатом через две-три модели и сравните. Параметры запроса — в документации Chat Completions.
Персональные данные
В запросе к модели оказываются данные клиентов, поэтому:
- Отправляйте только поля, нужные для оценки (список
ALLOWED_FIELDSв коде). Телефон, email и ФИО для оценки срочности не нужны. - Не пишите полные данные сделок в логи — достаточно ID и кода ошибки.
- Проверьте, что обработка данных внешним сервисом не противоречит вашей политике и согласиям клиентов.
Частые вопросы
Вебхук не приходит — что проверить?
- Вебхук сохранён и для него выбрано нужное событие.
- Адрес открывается из интернета по HTTPS.
- Обработчик отвечает
200быстрее чем за 2 секунды. Для отладки временно запишите входящие данные в файл:file_put_contents('/tmp/amo.log', print_r($_POST, true), FILE_APPEND);
Как проверить, что токен рабочий?
Запросите список сделок:
curl -H "Authorization: Bearer ВАШ_ТОКЕН" \
"https://ваш_аккаунт.amocrm.ru/api/v4/leads?limit=1"Ответ с данными означает, что токен действует; 401 — токен неверный или истёк.
Примечания не добавляются — почему?
Посмотрите error_log: amoCRM возвращает код и описание ошибки. Частые причины — неверный поддомен, истёкший токен или ID сделки, к которой у владельца токена нет доступа.
Где взять ключ Zukko и как ограничить расходы?
Создайте отдельный ключ для amoCRM в кабинете, задайте дневной лимит и разрешите только нужную модель — тогда случайный цикл в обработчике не потратит лишнего. Подробнее — в разделе о лимитах ключей.
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- Нейросеть для тестировщика: тест-кейсы, чек-листы и баг-репортыКак QA-инженеру использовать модель для тест-кейсов, чек-листов и баг-репортов, проверять полноту покрытия и не получить придуманные требования.
- Обезличивание данных перед отправкой в нейросеть: практический подходПерсональные данные не нужно отправлять модели, чтобы она обработала документ. Показываем, как заменять их метками, возвращать в ответ и проверять, что ничего не просочилось.
- Нейросеть для HR: вакансии, письма кандидатам и разбор резюмеМодель может готовить черновики вакансий и писем и делать первичный разбор резюме. Разбираем, что отдавать, как работать с персональными данными кандидатов и как не допустить предвзятых решений.
- Генерация FAQ нейросетью: вопросы из обращений и ответы по базе знанийХороший FAQ строится на том, что клиенты правда спрашивают. Показываем пайплайн: группируем обращения, отвечаем по базе знаний со ссылкой на источник и проверяем результат.