Вебхуки
Вебхуки дозволяють отримувати повідомлення в реальному часі про завершення обробки документів, замість постійного поллінгу API.
Як працюють вебхуки
- Ви вказуєте
webhook_urlпри створенні документа. - Rekognita обробляє документ.
- Після завершення Rekognita надсилає POST-запит на ваш URL із результатом.
Налаштування
Вкажіть URL вебхука при відправці документа:
curl -X POST https://api.rekognita.com/v1/documents \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@invoice.pdf" \
-F "language=uk" \
-F "webhook_url=https://your-server.com/webhooks/rekognita"Формат payload
Rekognita надсилає POST-запит з JSON-тілом:
{
"event": "document.completed",
"document_id": "doc_abc123",
"status": "completed",
"created_at": "2025-01-15T12:00:00Z",
"completed_at": "2025-01-15T12:00:03Z",
"result": {
"text": "Розпізнаний текст документа...",
"confidence": 0.991,
"pages": 1,
"language": "uk"
}
}Типи подій
| Подія | Опис |
|---|---|
document.completed | Документ успішно оброблено |
document.failed | Помилка при обробці документа |
document.partial | Частковий результат (для великих документів) |
Верифікація запитів
Кожен вебхук містить заголовок X-Rekognita-Signature для перевірки автентичності. Підпис створюється за допомогою HMAC-SHA256:
import crypto from 'crypto';
function verifyWebhook(payload: string, signature: string, secret: string) {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}
// Middleware для Express
app.post('/webhooks/rekognita', express.raw({ type: 'application/json' }), (req, res) => {
const signature = req.headers['x-rekognita-signature'] as string;
if (!verifyWebhook(req.body.toString(), signature, process.env.WEBHOOK_SECRET!)) {
return res.status(401).send('Invalid signature');
}
const event = JSON.parse(req.body.toString());
// Обробка події...
res.sendStatus(200);
});Безпека. Завжди перевіряйте підпис вебхука. Webhook secret можна знайти у Dashboard → Settings → Webhooks.
Повторні спроби
Якщо ваш сервер не повернув код 2xx, Rekognita повторить запит:
- 1-ша повторна спроба — через 30 секунд
- 2-га повторна спроба — через 5 хвилин
- 3-тя повторна спроба — через 30 хвилин
- Фінальна спроба — через 2 години
Ваш ендпоінт повинен відповідати протягом 10 секунд. Якщо обробка займає більше часу, збережіть payload та обробіть асинхронно.