Перейти до вмісту

Джерела

Джерело — це один сторонній провайдер, якого ви підключаєте, наприклад Stripe чи GitHub, разом із тим, що потрібно Railhook, аби довести, що вебхук справді надійшов від нього. Створення джерела дає вам ingress-адресу, яку треба вставити в налаштування провайдера.

  1. Провайдер надсилає вебхук на ingress-адресу джерела.

  2. Railhook перевіряє його так, як налаштовано джерело. Вебхук, що не пройшов перевірку, відхиляється й не зберігається.

  3. Вебхук зберігається в тому вигляді, в якому надійшов, як вхідна подія. У панелі вони показані в розділі «Отримані».

  4. Railhook створює по одному пересиланню на кожне призначення джерела й працює з кожним, доки воно не вдасться або його не полишать. Див. Призначення.

import { Railhook } from '@railhook/node';
const client = new Railhook({ apiKey: process.env.RAILHOOK_API_KEY, baseUrl: process.env.RAILHOOK_URL });
const source = await client.incomingSources.create(projectId, {
name: 'Stripe',
providerType: 'STRIPE',
verificationMode: 'PROVIDER',
hmacSecret: process.env.STRIPE_WEBHOOK_SECRET,
});
console.log(source.ingressUrl);

Вставте ingressUrl у налаштування вебхуків провайдера, а потім додайте щонайменше одне призначення.

Поле Що робить
name Обов’язкове. Назва для відображення, до 255 символів.
slug Назва для URL: малі літери, цифри й дефіси, до 64 символів. Генерується, якщо не вказати.
providerType GENERIC, GITHUB, GITLAB, STRIPE, SHOPIFY, SLACK або TWILIO.
verificationMode NONE, HMAC_GENERIC або PROVIDER. Див. Перевірка вхідних вебхуків.
hmacSecret Секрет, яким підписує провайдер. Лише для запису: API ніколи його не повертає.
hmacHeaderName, hmacSignaturePrefix Де знаходиться підпис, для HMAC_GENERIC.
rateLimitPerSecond Скільки запитів за секунду приймає це джерело.
status ACTIVE або DISABLED.

Ingress-адреса — це WEBHOOK_INGRESS_BASE_URL, за яким ідуть /ingress/ і непрозорий токен. Токен — єдине, що називає джерело, тож поводьтеся з цією адресою як з обліковими даними. Саме перевірка не дає тому, хто дізнався адресу, надсилати вам події.

Ingress відповідає провайдерові, а не людині. Кожен код — це те, що побачить логіка повторів самого провайдера.

Статус Значення
202 Прийнято й збережено. У тілі — requestId.
401 Перевірку налаштовано, а підпис не збігся, або такий самий підпис уже траплявся. Нічого не збережено.
404 Жодне джерело не має такого токена.
410 Джерело існує, але вимкнене.
413 Тіло більше за обмеження, типово 512 КБ.
429 Вичерпано ліміт швидкості джерела, з Retry-After: 1. Також повертається, без Retry-After, коли організація зараз не може приймати більше вебхуків.
Змінна Типово Дія
WEBHOOK_INCOMING_MAX_PAYLOAD_SIZE_BYTES 524288 Найбільше тіло, яке приймає ingress.
WEBHOOK_INCOMING_RATE_LIMIT_PER_SECOND 100 Ліміт швидкості для джерела, яке не задало власного. 0 вимикає це типове значення.

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

Section titled “Повторні надсилання провайдера”

Провайдери надсилають той самий вебхук повторно. Якщо запит несе ідентифікатор, який Railhook розпізнає, повторне надходження з тим самим ідентифікатором повертає збережену подію замість того, щоб переслати її ще раз:

Провайдер Ідентифікатор
Загальний заголовок X-Webhook-Id
Stripe заголовок Stripe-Webhook-Id
GitHub заголовок X-GitHub-Delivery
Shopify заголовок X-Shopify-Webhook-Id
Twilio заголовок X-Twilio-Webhook-Id
Slack event_id у JSON-тілі

Провайдер, який не надсилає жодного з них, не дедуплікується.