Webhooks & APIOutbound

message.inbound.created

Emitted when a message is received from a contact

type: message.inbound.created

Fired when an inbound message arrives from the contact on any connected channel.

When it fires

  • A WhatsApp / Telegram / Viber / Instagram contact sends a text, media, button, location, or any other message type.
  • A system-level inbound event is recorded (e.g. Telegram service messages, WhatsApp interactive callbacks).

data shape

type Data = {
  chat: ChatPayload;
  message: MessagePayload;  // direction is always "INBOUND"
  contact?: ContactPayload;
};
  • chat — the chat the message belongs to. See ChatPayload.
  • message — the inbound message. direction is always "INBOUND". See MessagePayload.
  • contact — the sender, when resolvable. See ContactPayload.

Example envelope

{
  "id": "evt_01JV4QEJX54A0E3KJ9W8R1Z4DP",
  "type": "message.inbound.created",
  "timestamp": "2026-04-24T12:14:22.000Z",
  "data": {
    "chat": {
      "id": "6804f4c2a6f9f35f6e66f1a1",
      "integrationId": "67f95b0126a4d1c9e3f0aa12",
      "channel": "WHATSAPP",
      "whatsappId": "wa_99887766",
      "firstName": "Alex"
    },
    "message": {
      "id": "msg_01",
      "chatId": "6804f4c2a6f9f35f6e66f1a1",
      "integrationId": "67f95b0126a4d1c9e3f0aa12",
      "direction": "INBOUND",
      "type": "TEXT",
      "text": "Hi, I need help",
      "receivedAt": "2026-04-24T12:14:22.000Z",
      "raw": { "providerMessageId": "wamid.HBg..." }
    },
    "contact": {
      "peopleId": "6804f4d5a6f9f35f6e66f1a2",
      "phoneNumber": "+46700000000"
    }
  },
  "meta": {
    "eventId": "evt_01JV4QEJX54A0E3KJ9W8R1Z4DP",
    "event": "message.inbound.created",
    "occurredAt": "2026-04-24T12:14:22.000Z",
    "organisationId": "6640f3d5c8a0d7e8b7f20222",
    "connectionId": "6640f45ac8a0d7e8b7f2014a",
    "apiVersion": "2026-04-01",
    "attempt": 1
  }
}

Notes

  • message.raw.providerMessageId carries the channel-native message id (Telegram message_id, WhatsApp wamid, …) — use it to correlate with provider-side webhooks.
  • For media messages, message.media[].url is resolvable — fetch the media asynchronously.

On this page