Webhooks
Webhooks уведомляют ваш сервис о любых изменениях на объекте Trello (доска, карточка, список, участник). Trello шлёт POST на ваш callback URL.
Создание webhook'а
ts
const webhook = await trello.webhooks.createWebhook({
idModel: boardId,
callbackURL: 'https://my-app.example.com/trello/hook',
description: 'Стрим активности доски',
active: true,
});
console.log(webhook.id);Callback URL должен быть доступен
Trello проверяет callback URL HEAD-запросом в момент создания. Он должен ответить 200, иначе webhook не сохранится. Если эндпоинт ещё не поднят — вызов упадёт.
Список webhook'ов токена
ts
const all = await trello.tokens.getTokenWebhooks({ token: process.env.TRELLO_TOKEN! });Trello API отдаёт webhooks через токен, который их создал, а не через модель.
Приостановка и возобновление
ts
await trello.webhooks.updateWebhook({ id: webhook.id, active: false });
// ... позже
await trello.webhooks.updateWebhook({ id: webhook.id, active: true });Удаление webhook'а
ts
await trello.webhooks.deleteWebhook({ id: webhook.id });Приём callback'ов
Когда на отслеживаемой модели происходит событие, Trello шлёт POST такой формы:
json
{
"action": { "type": "updateCard", "data": { ... }, "memberCreator": { ... } },
"model": { "id": "...", "name": "...", ... }
}Проверяйте подпись через заголовок X-Trello-Webhook — см. документацию Trello по HMAC-алгоритму.
Минимальный Express-handler:
ts
app.head('/trello/hook', (_req, res) => res.sendStatus(200));
app.post('/trello/hook', express.json(), (req, res) => {
// проверка подписи здесь
const { action, model } = req.body;
console.log(action.type, 'on', model.id);
res.sendStatus(200);
});Отвечайте 200 быстро. Trello ретраит на non-2xx с экспоненциальным backoff, а после нескольких подряд провалов webhook отключается.