1MSG
ReferenceInbox API

Вебхук Inbox аккаунта

GET
/api/v1/inbox/webhook

Один HTTPS-адрес на аккаунт. Владелец задаёт его здесь или в Settings → Developer → API Settings — у ключа пользователя такого права нет. Когда в Inbox что-то меняется, 1MSG отправляет POST с InboxWebhookEnvelope на этот адрес.

Это не вебхук канала. Входящие сообщения и статусы доставки по-прежнему приходят на адрес канала.

Доставка

  • Content-Type: application/json
  • X-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

Authorization

bearer
headerAuthorizationBearer <token>

Ключ выдаётся в Settings → Developer → API key. Методам Inbox нужен доступ Inbox, методам Campaigns — доступ Campaigns.

Response Body

application/json
  1. response
url?|

HTTPS-адрес, на который приходят POST-доставки. null, если вебхук не сохранён.

secretPrefix?|

Первые 12 символов секрета подписи. Полный секрет здесь не возвращается.

createdAt?|
Formatdate-time
updatedAt?|
Formatdate-time
lastDeliveryAt?|

Когда закончилась последняя попытка доставки.

Formatdate-time
lastDeliveryStatus?|

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": {}  }}