Перейти к содержанию

Новое в октябре

Все статьи

Ответы из LinkedIn в Zapier, Make или n8n через подписанные вебхуки

Команда NudgeLink · Опубликовано · Обновлено · 2 мин чтения

Коротко: откройте Настройки → Интеграции → Вебхуки, вставьте адрес «catch hook» из Zapier, Make или n8n, выберите события и нажмите «Отправить тестовое событие». После этого NudgeLink отправляет подписанное JSON-сообщение, когда приходит ответ, добавляется лид или заканчивается последовательность. Вебхуки только сообщают о событиях: они никогда ничего не отправляют лиду.

Какие события можно отправлять

СобытиеКогда
reply.receivedЛид отвечает в LinkedIn или по почте
reply.positiveОтвет классифицирован как положительный (может прийти чуть позже reply.received)
lead.addedЛид попадает в ваш аккаунт
sequence.finishedПоследовательность лида дошла до конца

Типичные применения: положительный ответ как задача в CRM, сообщение в канал Slack, завершённая последовательность в таблице «для дальнейшего контакта».

Настройка за пять шагов

  1. В Zapier, Make или n8n создайте сценарий, который начинается с вебхука, и скопируйте его адрес. Он должен начинаться с https.
  2. В NudgeLink откройте Настройки → Интеграции → Вебхуки и вставьте адрес.
  3. Отметьте события и нажмите Добавить вебхук.
  4. Скопируйте секрет подписи. Он показывается один раз.
  5. Нажмите Отправить тестовое событие. Тест дойдёт до вашего инструмента в течение минуты.

Вебхуки входят в каждый платный тариф, до трёх на аккаунт. Отправляются только события, произошедшие после добавления вебхука.

Как проверить, что запрос от NudgeLink

В каждом запросе есть заголовок NudgeLink-Signature: t=<время unix>,v1=<hex>. Значение v1 — HMAC-SHA256 от "<t>.<сырое тело>" с вашим секретом. Сравнивайте за постоянное время и отклоняйте запросы, где t старше пяти минут.

import hashlib, hmac, time

def verify(secret, raw_body, header):
    parts = dict(p.split("=", 1) for p in header.split(","))
    if abs(time.time() - int(parts["t"])) > 300:
        return False
    expected = hmac.new(secret.encode(), parts["t"].encode() + b"." + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, parts["v1"])

Catch hook в Zapier сам подписи не проверяет. Если это важно, поставьте перед ним небольшой шаг проверки (шаг Code или свой endpoint).

Что будет, если ваш инструмент недоступен

Отвечайте любым кодом 2xx в течение 10 секунд. Иначе запрос повторяется через 1 минуту, 5 минут, 30 минут, 2 часа и 12 часов, после чего мы прекращаем попытки. После 20 неудач подряд вебхук отключается, а в Настройках указана причина. После повтора один и тот же запрос может прийти дважды, поэтому все попытки для одного события имеют один и тот же id: сохраняйте обработанные идентификаторы.

Полное описание: Вебхуки в документации.