Вебхуки
hooks даёт эндпоинты на https://<name>.hooks.xvii.network, которые сохраняют каждый
запрос.
Создайте эндпоинт
xvii hooks create --name my-bot --verify telegram --secret "$WEBHOOK_SECRET"
Направьте отправителя (Telegram, GitHub, GitLab, Stripe, что угодно) на https://my-bot.hooks.xvii.network.
Каждый запрос хранится срок, заданный эндпоинту (по умолчанию 7 дней, максимум 90): метод, путь, заголовки,
первый 1 МБ тела, размер и SHA-256, отправитель.
Получайте их на ноутбуке
xvii hooks listen my-bot --forward 3000
xvii hooks listen my-bot --forward http://localhost:8080/webhook
Пока работает listen, запросы идут на ваш локальный порт, а его ответ возвращается отправителю (в
течение 10 секунд). Ноутбук не обязан быть доступен извне. Без --forward запросы только печатаются, а
эндпоинт отвечает своим ответом. listen переживает обрывы сети и кратковременную недоступность id.
Ответы
Когда никто не слушает, эндпоинт отвечает тем, что задано в панели: код, заголовки, тело и необязательная
задержка. Удобно, чтобы изобразить медленного или падающего получателя.
Пересылка
До пяти адресов на эндпоинт. Каждый запрос пересылается с повторами через 1 с, 5 с, 30 с, 2 мин и 10 мин.
Приватные адреса отклоняются. Каждая попытка видна как доставка у запроса.
Повтор
xvii hooks requests my-bot
xvii hooks replay 3k9x2m7qpa # слушателю
xvii hooks replay 3k9x2m7qpa --to forwards
xvii hooks replay 3k9x2m7qpa --to https://example.com/hook
Подписи
С --verify telegram|github|gitlab|stripe и секретом каждый запрос помечается как подписан или
неверный. Ничего не отклоняется: hooks нужен, чтобы видеть, что приходит. Принимающее приложение всё
равно должно проверять подписи само и быть идемпотентным, потому что пересылка повторяется.
Хорошие привычки
- Делайте отдельные эндпоинты для несвязанных проектов, с подходящим сроком хранения.
- Не пропускайте OAuth-колбэки и подтверждения платежей через лишний узел ради логов.
- Не отправляйте токены, пароли и полные данные клиентов на отладочный эндпоинт.
Лимиты hooks.endpoints, hooks.storage. Эндпоинтам можно дать свои имена через domains.