Bot SDK Coming soon

The Bot SDK is planned, not released. What you can already build today: custom slash commands, incoming and outgoing webhooks, and AI assistants over MCP — all against the plain REST API.

What you can build today

  • Custom slash commands — a user types /weather Prague, Disqua POSTs a signed request to your URL and posts your answer in a thread under the command. Details below.
  • Posting into channels — incoming webhooks (no token needed) or the REST API.
  • Reacting to new messages — outgoing webhooks (message.new).
  • AI assistants — connect Claude or ChatGPT through the MCP server.

Custom slash commands

A workspace owner or admin registers the command in Workspace Settings → Integrations, or through the API:

Request POST /v1/workspaces/:workspaceId/integrations
{
  "name": "Weather",
  "type": "slash_command",
  "config": {
    "command": "/weather",
    "description": "Current weather for a city",
    "usage_hint": "/weather <city>",
    "url": "https://yourapp.com/disqua/weather",
    "secret": "your_signing_secret"
  }
}

What Disqua sends

POST https://yourapp.com/disqua/weather
Content-Type: application/json
User-Agent: Disqua-SlashCommands/1.0
X-Disqua-Event: slash_command
X-Disqua-Signature: sha256=<hex HMAC-SHA256 of the raw body with your secret>

{
  "type": "slash_command",
  "command": "/weather",
  "text": "Prague",
  "user_id": "7f9e…",
  "channel_id": "7a0c…",
  "workspace_id": "3c1d…",
  "message_id": "8b1d…",
  "thread_id": null,
  "created_at": "2026-10-16T10:05:00.000Z"
}

Verify the signature exactly as for outgoing webhooks.

How to answer

Reply within 5 seconds with a 2xx status and either JSON { "text": "18 °C, sunny" } or plain text. Disqua posts the text (markdown, up to 4,000 characters) in a thread under the command message. An empty body means no reply.

Current limits

  • Commands run in public channels only.
  • The reply is posted under the name of the admin who created the integration, and only if that person is a member of the channel.
  • One attempt per command — no retries, so your endpoint is never called twice for the same message.
  • Private replies visible only to the person who typed the command (ephemeral) are not supported yet; with ephemeral: true nothing is posted.
  • Your URL must be publicly reachable; private and loopback addresses are rejected.

Planned: Bot SDK

A TypeScript toolkit for bots is on the roadmap — bot identities with their own tokens, event subscriptions over WebSocket, interactive messages and helpers for slash command endpoints. There is no package to install yet and no bot tokens; anything on npm or PyPI calling itself the official Disqua SDK is not ours.

Want to shape it? Tell us what you would build at developers@disqua.com.