Zernio
APIFor you
Zernio
APIFor you
Platforms

Slack

Overview

Set up

Connect

Publish

PublishPlatform Fields & Media

Engage

Inbox

Reference

Limits & Errors
Dashboard
OverviewPlatformsAPI ReferenceResources
Slack

Inbox

Receive Slack DMs and bot mentions in the inbox and start a conversation with any workspace member.


Slack supports DMs and channel mentions in the inbox, delivered in realtime through Slack's Events API.

Zernio ingests:

  • DMs to the Zernio bot
  • Channel messages that @-mention the bot
  • Replies in threads the bot is already part of, including under a post Zernio published
  • The bot's own messages
  • Emoji reactions added to or removed from a message, as reaction.received

Ordinary channel conversation is deliberately not ingested. The inbox is not a mirror of the workspace, so day-to-day chatter in a connected channel is never stored.

Every incoming message fires the message.received event. Its metadata carries:

FieldMeaning
threadTsPresent when the message is a thread reply
mentionsBottrue when the message @-mentions the Zernio bot

That pair covers the usual agent rule: answer when mentioned in a channel, always answer DMs, and reply inside the thread.

Reply from the inbox or with Send inbox message on POST /v1/inbox/conversations/{conversationId}/messages. The message goes out as the bot, and replyTo threads the reply.

React to a message with:

POST /v1/inbox/conversations/{conversationId}/messages/{messageId}/reactions

The emoji has to have a Slack name, such as :thumbsup:. An unnamed character returns a 400.

Constraints:

  • No history backfill. The inbox starts at connect time, a Slack restriction for apps not listed in the Marketplace.
  • Messages from other bots appear for context but never trigger automations or webhook events (loop guard).
  • Attachments appear as links that open in Slack.
  • Contacts and the built-in automations (sequences, workflows) are DM-only.

Contacts. Someone who DMs the bot becomes a contact. People talking in a connected channel do not; otherwise every colleague in the channel would be added as a contact.

Automate channels with your own agent reacting to message.received.

Start a conversation

You do not have to wait for someone to message the bot first.

Look up a workspace member with List Slack members. Then open the DM by passing their member id as participantId to Create inbox conversation:

const { data: members } = await zernio.slack.listSlackMembers({
  path: { accountId: '66b2e19d8c3f5a7e9d0b1c2d' },
  query: { query: 'maria' }
});

const { data: conversation } = await zernio.messages.createInboxConversation({
  body: {
    accountId: '66b2e19d8c3f5a7e9d0b1c2d',
    participantId: members.members[0].id,
    message: 'Hi Maria, the campaign is live.'
  }
});

console.log(conversation.data.conversationId);

Response (200) from the member lookup:

{
  "members": [
    { "id": "U01ABCDEF", "name": "Maria Lopez", "username": "maria", "picture": "https://..." }
  ]
}

Response (201) from the conversation call:

{
  "success": true,
  "data": {
    "messageId": "1785320613.863000",
    "conversationId": "66c3d2ae7b4f6c8d0e1f2a3b",
    "participantId": "U01ABCDEF",
    "participantName": "Maria Lopez"
  }
}

Slack addresses people by opaque id, never by name.

Bots, deactivated members and Slackbot are left out of the lookup, because they cannot hold a DM conversation.

The DM comes from the workspace's connected bot, so it reaches members of that workspace only. The reply lands in the same conversation.

Was this page helpful?

Platform Fields & Media

Every Slack platformSpecificData field and the file requirements.

Limits & Errors

Analytics availability, what Slack's API does not expose and the common errors when publishing.

On this page

Start a conversation