Все статьи

Webhook + AmoCRM + Telegram: автоматизируем обработку опросов

Ответ из опроса должен мгновенно превращаться в задачу, лида или уведомление. Показываем три рабочих сценария на Webhook без кода.

Команда аскио · · #разработчикам#интеграции#webhook

Опрос без интеграции – это файл Excel в почте. Опрос с интеграцией – это автоматизированный процесс: лид в CRM, задача оператору, алёрт в Telegram-канал. Разбираем три рабочих сценария, которые включаются за 10 минут.

Что такое Webhook в аскио

При каждом сданном ответе аскио отправляет HTTP POST на ваш URL с JSON-ом вида:

{
  "surveyId": "nps-feedback-v3",
  "responseId": "r_2k9a8b7c",
  "submittedAt": "2026-04-22T10:30:00Z",
  "answers": {
    "score": 9,
    "comment": "Очень понравилось, особенно граф-редактор",
    "email": "user@example.com"
  },
  "variables": {
    "userId": "user-42",
    "plan": "pro"
  },
  "respondent": {
    "userAgent": "Mozilla/5.0 ...",
    "language": "ru",
    "country": "RU"
  }
}

Дальше – на ваше усмотрение. Передать в CRM, в чат, в свою БД, в n8n / Make / Zapier для дальнейшего ветвления.

Сценарий 1: NPS-критики автоматически идут в AmoCRM

Задача: клиент поставил 0–6 → создаём лида в AmoCRM, тегаем «retention-risk», вешаем задачу менеджеру в течение 2 часов.

Шаги:

  1. В аскио в редакторе опроса откройте «Интеграции» → добавьте Webhook.
  2. URL: https://your-bridge.example.com/askyo-to-amo – это ваш эндпоинт. Можно поднять на n8n / make.com или написать AWS Lambda на 30 строк.
  3. В аскио поставьте фильтр: «отправлять только если answer.score ≤ 6». Это делается в одном клике, без кода.
  4. На стороне моста:
// Псевдокод – реальная реализация на n8n / Lambda / любом стеке
async function handle(req, res) {
  const { answers, respondent } = req.body;

  // Создаём лида в AmoCRM
  const lead = await amo.leads.create({
    name: `NPS ${answers.score} – риск ухода`,
    custom_fields_values: [
      { field_id: AMO_FIELD_NPS, values: [{ value: answers.score }] },
      { field_id: AMO_FIELD_COMMENT, values: [{ value: answers.comment }] },
      { field_id: AMO_FIELD_EMAIL, values: [{ value: answers.email }] },
    ],
    _embedded: { tags: [{ name: 'retention-risk' }] },
  });

  // Задача менеджеру: связаться в течение 2 часов
  await amo.tasks.create({
    entity_id: lead.id,
    entity_type: 'leads',
    text: `Связаться с критиком NPS (${answers.score}). Комментарий: ${answers.comment}`,
    complete_till: Math.floor(Date.now() / 1000) + 2 * 3600,
  });

  res.status(200).send('ok');
}

Готово. Каждый раз, когда критик отправляет ответ, в AmoCRM появляется лид и задача. Менеджер видит её в общем потоке.

Сценарий 2: важные ответы в Telegram-чат команды

Задача: все ответы от платящих клиентов (plan == 'pro') – сразу в групповой Telegram продакт-команды, чтобы видели в реалтайме.

Шаги:

  1. В Telegram создайте бота через @BotFather. Получите токен.
  2. Добавьте бота в групповой чат, узнайте chat_id (через https://api.telegram.org/bot<TOKEN>/getUpdates после любого сообщения в чат).
  3. В аскио добавьте Webhook с фильтром variables.plan == 'pro'.
  4. Используйте готовый шаблон «Telegram via Webhook» – вписываете только токен и chat_id, текст шаблонизируется автоматически:
🔔 Pro-клиент ответил на «NPS-feedback»

⭐️ Оценка: {{ answers.score }}/10
💬 Комментарий: {{ answers.comment }}
👤 userId: {{ variables.userId }}
🌐 Страна: {{ respondent.country }}

🔗 Открыть в аскио: https://app.askyo.ru/r/{{ responseId }}

Никакого кода – шаблон в визуальном редакторе. За 5 минут.

Сценарий 3: ответы в Google Sheets для маркетинга

Старая школа, но работает: маркетологи любят видеть данные в табличке.

Шаги:

  1. В Google Sheets создайте таблицу, добавьте Apps Script:
function doPost(e) {
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = JSON.parse(e.postData.contents);
  sheet.appendRow([
    new Date(data.submittedAt),
    data.responseId,
    data.answers.score,
    data.answers.comment,
    data.answers.email,
    data.variables.utmSource ?? '',
  ]);
  return ContentService.createTextOutput('ok');
}
  1. Deploy → Web app → Anyone can access.
  2. Скопируйте URL вебхука.
  3. В аскио: Интеграции → Webhook → вставляете URL. Всё.

Каждый ответ – новая строка в Google Sheets. Никаких CSV-выгрузок руками.

Что делать с failed-доставкой

Webhooks ненадёжны. Сеть, таймауты, ваш сервер упал. аскио:

  • Делает 3 retry с экспоненциальным backoff (5с, 30с, 5 мин).
  • Хранит все попытки в журнале с кодом ответа и временем.
  • На 4-й неудачной – письмо в почту owner-а опроса и пометка ответа как webhook_failed.
  • При успехе позднее – статус сам перепишется.

Для критичных интеграций (платежи, биллинг) лучше использовать polling через API – мы такое тоже умеем, но это уже отдельная статья.

Чек-лист безопасности

Webhook принимает данные с открытого интернета. Защищаемся:

  • HMAC-подпись. аскио подписывает каждый запрос заголовком X-Askyo-Signature: sha256=.... Проверяйте его на стороне моста.
  • Allow-list IP. Все запросы идут из нашей подсети 185.x.x.x/24 (фиксирован, опубликован в security.txt).
  • Idempotency. Используйте responseId как ключ дедупликации – retry могут привести к двум доставкам, не плодите дубли.
  • Rate limit. При шторме ответов (тысячи в минуту) ставьте очередь между Webhook и CRM – AmoCRM имеет свой rate limit.

Когда Webhook не нужен

Если интеграция простая и нужна раз в день, а не в реалтайме – используйте экспорт CSV / Google Sheets / API-pull. Webhook оправдан, когда:

  • нужна быстрая реакция (минуты),
  • ответ ветвится по логике («только критики»),
  • есть downstream-сервис с собственной логикой обработки.

Иначе можно обойтись без них и спать спокойно.


Готовый шаблон под n8n мы выложили в public GitHub-репозитории – форкайте и адаптируйте под свой стек.

Тарифы Создать опрос