Вебхук Inbox аккаунта
Один HTTPS-адрес на аккаунт. Владелец задаёт его здесь или в Settings → Developer → API Settings — у ключа пользователя такого права нет. Когда в Inbox что-то меняется, 1MSG отправляет POST с InboxWebhookEnvelope на этот адрес.
Это не вебхук канала. Входящие сообщения и статусы доставки по-прежнему приходят на адрес канала.
Доставка
Content-Type:application/jsonX-1msg-Event: тип событияX-1msg-Delivery: id доставкиX-1msg-Signature:sha256=<hex HMAC of the raw body>
Посчитайте HMAC-SHA256 от тела запроса как есть, с секретом подписи, и сравните с подписью. Если не совпадает, отклоните запрос.
Доставка не влияет на ответ API. Неудачный POST сохраняется в lastDeliveryStatus и lastDeliveryError.
События
| Событие | Когда | Поля data |
|---|---|---|
inbox.conversation.status_changed | Диалог открыли или закрыли. status — OPEN или CLOSED. | conversationId, channelId, status, previousStatus, actorUserId |
inbox.conversation.assigned | Назначили ответственного. assigneeUserId — новый ответственный. | conversationId, channelId, assigneeUserId, previousAssigneeUserId, actorUserId |
inbox.conversation.unassigned | Ответственного сняли. assigneeUserId равен null. | conversationId, channelId, assigneeUserId, previousAssigneeUserId, actorUserId |
inbox.conversation.blocked | Контакт заблокировали. Входящие сообщения отклоняются. | conversationId, channelId, actorUserId |
inbox.conversation.unblocked | Контакт разблокировали. | conversationId, channelId, actorUserId |
inbox.conversation.title_changed | Диалог переименовали. | conversationId, channelId, title, previousTitle, actorUserId |
inbox.user.invited | Владелец пригласил пользователя. Участником он станет, когда примет приглашение. | inviteId, email, channelIds, actorUserId |
inbox.user.added | Приглашённый принял приглашение и стал оператором. | memberId, userId, email, channelIds |
inbox.user.removed | Оператора удалили из аккаунта. | memberId, userId, actorUserId |
inbox.user.channels_changed | Оператору заменили список доступных каналов. | memberId, userId, channelIds, actorUserId |
inbox.user.invite_revoked | Приглашение отозвали, пока его не приняли. | inviteId, email, actorUserId |
bearerAuthorizationBearer <token>Ключ выдаётся в Settings → Developer → API key. Методам Inbox нужен доступ Inbox, методам Campaigns — доступ Campaigns.
application/json- response
url?|HTTPS-адрес, на который приходят POST-доставки. null, если вебхук не сохранён.
secretPrefix?|Первые 12 символов секрета подписи. Полный секрет здесь не возвращается.
createdAt?|date-timeupdatedAt?|date-timelastDeliveryAt?|Когда закончилась последняя попытка доставки.
date-timelastDeliveryStatus?|HTTP-статус последней доставки. null, если ответа на запрос не было.
lastDeliveryError?|Короткий текст ошибки последней неудачной доставки.
events*array<>Все события, которые может присылать этот вебхук. События сообщений и статусов доставки приходят на вебхук канала.
envelope*Пример JSON-тела, которое 1MSG отправляет POST-запросом. data совпадает с events[].example для типа из тела.
curl -X GET 'https://api.1msg.io/api/v1/inbox/webhook'{ "url": "https://example.com/1msg/inbox", "secretPrefix": "whsec_abc123", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "lastDeliveryAt": "2019-08-24T14:15:22Z", "lastDeliveryStatus": 200, "lastDeliveryError": "string", "events": [ { "type": "inbox.conversation.status_changed", "description": "Conversation opened or closed. status is OPEN or CLOSED.", "example": { "conversationId": "d94a047f-5984-42af-9f89-0f26c7e70ef1", "channelId": "QAF261225002", "status": "CLOSED", "previousStatus": "OPEN", "actorUserId": "b2bb82f0-2253-4e05-b955-a21f3d699caa" } } ], "envelope": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "type": "inbox.conversation.status_changed", "createdAt": "2019-08-24T14:15:22Z", "data": {} }}