Slack app manifest
This is the manifest you paste to create OttoBot's Slack app. OttoBot isn't listed in the Slack App Directory yet, so every installation starts here with a "From a manifest" app.
For the full walkthrough (installing the app, copying both tokens, entering them in HG Insights, and checking that it works), see Slack Integration.
Paste this into Slack
At api.slack.com/apps, choose Create New App → From a manifest, select your workspace, then paste the YAML below unchanged. Editing it is the most common cause of an install that seems to succeed but leaves OttoBot silent or half-working.
display_information:
name: OttoBot
description: AI sales assistant — ask me about accounts, contacts, and deals.
background_color: "#3E78B9"
features:
bot_user:
display_name: OttoBot
always_online: true
app_home:
messages_tab_enabled: true
messages_tab_read_only_enabled: false
# Makes a DM with OttoBot an assistant thread, which is what enables the
# tool-activity status line. Use `agent_view` (not the legacy `assistant_view`).
agent_view:
agent_description: Ask OttoBot about accounts, contacts, and deals.
oauth_config:
scopes:
bot:
- app_mentions:read
- channels:history
- channels:read
- chat:write
- files:read
- files:write
- groups:history
- groups:read
- im:history
- im:read
- im:write
- users:read
- users:read.email
- reactions:read
- reactions:write
# Slack adds this automatically when the agent surface is enabled; it is declared
# here so the manifest matches what Slack actually provisions.
- assistant:write
settings:
event_subscriptions:
bot_events:
- app_mention
- message.channels
- message.groups
- message.im
# Required by the agent surface. Do not add `assistant_thread_started` — it belongs
# to the superseded `assistant_view` surface.
- app_home_opened
- app_context_changed
interactivity:
is_enabled: false
org_deploy_enabled: false
socket_mode_enabled: true
token_rotation_enabled: false
Why these settings matter
| Setting | Why it must stay as-is |
|---|---|
socket_mode_enabled: true | OttoBot connects out to Slack over Socket Mode. Without it there is no inbound URL for Slack to call, so OttoBot never receives messages. |
agent_view | Makes a DM with OttoBot an assistant thread, which is what enables the tool-activity status line while it works. |
interactivity.is_enabled: false | OttoBot uses no buttons or modals. |
token_rotation_enabled: false | HG Insights stores long-lived tokens. Enabling rotation invalidates them on Slack's schedule and OttoBot goes offline. |
| Scopes and events | What each one is for, including the ones OttoBot doesn't use today, is listed in Permissions you're approving. Editing the manifest is unsupported, and removing a scope OttoBot uses causes partial failures that are hard to diagnose. |
After creating the app
You need two different tokens, from two different screens. They're routinely swapped:
| HG Insights field | Token | Where to find it in Slack |
|---|---|---|
| Bot User OAuth Token | starts xoxb- | OAuth & Permissions (after Install to Workspace) |
| App-Level Token | starts xapp- | Basic Information → App-Level Tokens (scope connections:write) |
Enter both on the Slack card under Integrations in HG Insights (Configure, then Configure Integration). They are stored encrypted and never shown back to you.
Keeping this copy current
HG Insights keeps this page functionally identical to OttoBot's manifest: the same scopes, events and settings. Only the explanatory comments differ. If you created your app from an earlier version, see "no status line" under If something goes wrong for how to update it.
Next steps
- Slack Integration: the full setup and troubleshooting guide