Skip to content

Coming from Slack

Markdown

Amedeus apps follow Slack’s model on purpose, so what you know carries over. This page lists what is the same and what is different. Slack details are from its public documentation.

  • Concepts: an app has a bot user, permissions (scopes), a bot token, incoming webhooks, slash commands, and event subscriptions with a signed request URL.
  • Request signing: HMAC-SHA256 of v0:{timestamp}:{raw body}, compared in constant time, with a 5-minute window. Only the header names change (X-Amedeus-Signature, X-Amedeus-Request-Timestamp).
  • URL verification: a signed {"type":"url_verification","challenge":…}, answered with the challenge.
  • Acknowledge fast: answer 2xx within 3 seconds and work afterwards.
  • Incoming webhooks: the same {"text": …} body, and Slack’s attachments are understood.
  • Slash command replies: a response_url, private by default, in_channel for everyone.
  • An app acts only where it belongs, and joins public channels itself.
Topic Slack Amedeus
Errors Usually HTTP 200 with {"ok": false, "error": "code"} The real HTTP status, with {"ok": false, "error": "code", "message": …}
Pagination cursor and response_metadata.next_cursor cursor and a top-level next_cursor
Message id ts, a timestamp string id, a UUID. Times are ISO 8601 created_at
Text format mrkdwn, with <@U123> mentions and <url|label> links Markdown as written; mentions as @Name plus a mentions list of ids
Event envelope team_id, api_app_id, authorizations, event_context workspace_id, app_id, bot_user_id
Event names message.channels, message.groups, message.im, message.mpim, app_mention message.channel (public and private), message.im, app_mention
Channel type channel_type: channel, group, im, mpim channel_kind: public, private, dm
Author field user user everywhere
Retry headers X-Slack-Retry-Num, X-Slack-Retry-Reason X-Amedeus-Retry-Num, X-Amedeus-Retry-Reason (same reason values)
Retries 3 retries: immediately, 1 minute, 5 minutes 4 attempts: immediately, 1, 5 and 30 minutes
Redirects Followed, up to 2 Not followed: give the final URL
Slash command body application/x-www-form-urlencoded JSON
Command reply in the 200 body Yes No: use response_url (or the Web API)
Direct messages to a bot App Home → Messages Tab, and a checkbox to let people write App Home → “Allow people to message this app”
Installing an app Each workspace installs and approves it (OAuth) An app belongs to the workspace that created it; there is no install step
Posting response {ok, channel, ts, message} {ok, message}

Updating or deleting a message the app wrote, Block Kit, interactive components, app unfurls, events on behalf of users, OAuth for apps distributed across workspaces, and the optional 24-hour “Delayed events”. Apps that need them can’t be built yet.