Тема
Вебхуки
InLog может отправлять на URL вашей системы уведомление о смене статуса заявки.
Подключение
URL для уведомлений задаётся в настройках вашей компании в InLog. Чтобы подключить или изменить URL, обратитесь к менеджеру InLog. Если URL не задан, уведомления не отправляются.
Какие статусы отправляются
| Статус | Отправляется на ваш URL | Когда |
|---|---|---|
COMPLETED | да | Получатель забрал посылку |
SUBTRACTED | да | Посылку изъяли из ячейки |
DELIVERED | нет | Закладку посылки в ячейку отслеживайте запросами GET /order/{id} |
CREATED | нет для заявок, созданных через интеграционный API | Факт создания вы получаете в ответе POST /order/create |
Формат запроса
http
POST {ваш URL}
Content-Type: application/json
{
"orderId": "gfb0sfr5ahkhu9dns4bja2ly",
"status": "COMPLETED"
}| Поле | Тип | Описание |
|---|---|---|
orderId | string | ID заявки |
status | string | Статус заявки на момент отправки уведомления |
Других заголовков, кроме Content-Type: application/json, запрос не содержит. Код и тело вашего ответа на обработку не влияют.
Ограничения
Запрос не подписан
У уведомления нет подписи и секрета. Любой, кто знает ваш URL, может отправить на него запрос такого же вида. Не меняйте состояние заказа в своей системе только на основании тела уведомления:
- Проверьте, что
orderId— это заявка, созданная вашей системой. - Запросите актуальное состояние:
GET /order/{orderId}?withCurrentStatus=true. - Действуйте по
currentStatus.typeиз ответа API.
Повторной отправки нет
Уведомление отправляется один раз. Если ваш сервер был недоступен или ответил ошибкой, уведомление не будет отправлено повторно.
Рекомендации
- Считайте источником истины API. Уведомление — это сигнал «проверь заявку», а не итоговые данные.
- Опрашивайте заявки периодически. Например, раз в несколько минут запрашивайте
GET /order/list?status=DELIVERED&withCurrentStatus=trueи сверяйте статусы незавершённых заявок. Так вы не потеряете изменения, если уведомление не дошло, и узнаете о закладке посылки (DELIVERED). - Делайте обработчик идемпотентным. Повторная обработка одного и того же
orderIdи статуса не должна ломать данные. - Отвечайте быстро. Выполняйте тяжёлую обработку асинхронно, в своей очереди.
- Используйте HTTPS для URL приёмника, например
https://partner.example.com/webhooks/postomat.
Пример обработчика
js
import express from 'express'
import { createPostomatClient } from '@inlog-sdk/postomat'
const app = express()
const client = createPostomatClient({ apiKey: 'YOUR_API_KEY' })
app.post('/webhooks/postomat', express.json(), async (req, res) => {
res.sendStatus(200) // отвечаем сразу, обработка — дальше
const { orderId } = req.body ?? {}
if (typeof orderId !== 'string' || !(await isOurOrder(orderId))) return
// Не доверяем телу уведомления — берём статус из API
const order = await client.orders.getById(orderId, { withCurrentStatus: true })
await updateLocalOrderStatus(orderId, order.currentStatus?.type)
})isOurOrder и updateLocalOrderStatus — функции вашей системы.