Ver o webhook do Inbox da conta
Uma URL HTTPS por conta. O dono define a URL aqui ou em Settings → Developer → API Settings; uma chave de usuário não pode. Quando algo muda no Inbox, a 1MSG envia um POST com InboxWebhookEnvelope para essa URL.
Este não é o webhook do canal. Mensagens recebidas e status de entrega continuam chegando na URL do canal.
Entrega
Content-Type:application/jsonX-1msg-Event: o tipo do eventoX-1msg-Delivery: o id da entregaX-1msg-Signature:sha256=<hex HMAC of the raw body>
Calcule o HMAC-SHA256 do corpo da requisição, exatamente como chegou, com o segredo de assinatura e compare com a assinatura. Se não bater, recuse a requisição.
A entrega não altera a resposta da API. Um POST que falhou fica registrado em lastDeliveryStatus e lastDeliveryError.
Eventos
| Evento | Quando | Campos de data |
|---|---|---|
inbox.conversation.status_changed | A conversa foi aberta ou fechada. status é OPEN ou CLOSED. | conversationId, channelId, status, previousStatus, actorUserId |
inbox.conversation.assigned | Um responsável foi definido. assigneeUserId é o novo responsável. | conversationId, channelId, assigneeUserId, previousAssigneeUserId, actorUserId |
inbox.conversation.unassigned | O responsável foi removido. assigneeUserId é null. | conversationId, channelId, assigneeUserId, previousAssigneeUserId, actorUserId |
inbox.conversation.blocked | O contato foi bloqueado. As mensagens recebidas são recusadas. | conversationId, channelId, actorUserId |
inbox.conversation.unblocked | O contato foi desbloqueado. | conversationId, channelId, actorUserId |
inbox.conversation.title_changed | A conversa foi renomeada. | conversationId, channelId, title, previousTitle, actorUserId |
inbox.user.invited | O dono convidou um usuário. Ele só vira membro depois de aceitar. | inviteId, email, channelIds, actorUserId |
inbox.user.added | A pessoa convidada aceitou e agora é operadora. | memberId, userId, email, channelIds |
inbox.user.removed | Um operador foi removido da conta. | memberId, userId, actorUserId |
inbox.user.channels_changed | Os canais que um operador pode abrir foram substituídos. | memberId, userId, channelIds, actorUserId |
inbox.user.invite_revoked | Um convite pendente foi cancelado antes de ser aceito. | inviteId, email, actorUserId |
bearerAuthorizationBearer <token>Chave gerada em Settings → Developer → API key. Os métodos do Inbox precisam do escopo Inbox. Os métodos de Campaigns precisam do escopo Campaigns.
application/json- response
url?|URL HTTPS que recebe as entregas por POST. null quando não há webhook salvo.
secretPrefix?|Os primeiros 12 caracteres do segredo de assinatura. O segredo completo não é retornado aqui.
createdAt?|date-timeupdatedAt?|date-timelastDeliveryAt?|Quando terminou a última tentativa de entrega.
date-timelastDeliveryStatus?|Status HTTP da última entrega. null quando a requisição não teve resposta.
lastDeliveryError?|Erro resumido da última entrega que falhou.
events*array<>Todos os eventos que este webhook pode enviar. Eventos de mensagem e de status de entrega continuam no webhook do canal.
envelope*Exemplo do corpo JSON que a 1MSG envia por POST. data corresponde a events[].example para o type do corpo.
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": {} }}