Budibase/budibase · error · HTTPError

Slack integration is not configured for this agent

Error message

Slack integration is not configured for this agent

What it means

This HTTP 400 error is thrown by validateSlackIntegration in packages/server/src/sdk/workspace/ai/deployments/slack.ts when the agent being deployed or saved has no slackIntegration object at all. Slack-based deployments (webhook URL generation, app manifest creation, OAuth exchange) require the agent to carry a configured Slack integration first. The guard runs before token validation.

Source

Thrown at packages/server/src/sdk/workspace/ai/deployments/slack.ts:50

const normaliseAppName = (name: string) =>
  truncate(name.trim() || "Budibase Agent", MAX_APP_NAME_LENGTH)

const normaliseBotDisplayName = (name: string) => {
  const safeName = name
    .trim()
    .toLowerCase()
    .replace(/[^a-z0-9._-]+/g, "-")
    .replace(/^-+|-+$/g, "")
  return truncate(safeName || "budibase-agent", MAX_BOT_DISPLAY_NAME_LENGTH)
}

export const validateSlackIntegration = (
  agent: Agent
): ResolvedSlackIntegration => {
  const integration = agent.slackIntegration
  if (!integration) {
    throw new HTTPError(
      "Slack integration is not configured for this agent",
      400
    )
  }

  const botToken = integration.botToken?.trim()
  const signingSecret = integration.signingSecret?.trim()

  if (!botToken || !signingSecret) {
    throw new HTTPError(
      "Slack integration requires botToken and signingSecret",
      400
    )
  }

  return {
    botToken,
    signingSecret,

View on GitHub (pinned to a81a902e9a)

Solutions

  1. Add a slackIntegration object to the agent with botToken and signingSecret before deploying or building webhook URLs.
  2. Re-save the agent through the agent configuration API ensuring the slackIntegration block is included in the payload.
  3. Verify you are targeting the correct agent and channel - use the Teams path if the agent is Teams-configured.
  4. If a save is dropping the field, check the API payload/schema for omitted or misnamed keys (slackIntegration).

Example fix

// before
await deployAgent({ agent, provider: "slack" }) // agent.slackIntegration === undefined
// after
agent.slackIntegration = {
  botToken: process.env.SLACK_BOT_TOKEN,
  signingSecret: process.env.SLACK_SIGNING_SECRET
}
await updateAgent(agent)
await deployAgent({ agent, provider: "slack" })
Defensive patterns

Strategy: validation

Validate before calling

if (!agent.slackIntegration) {
  throw new Error(`Agent ${agent._id} has no Slack integration configured; add slackIntegration before deploying to Slack`)
}

Type guard

const hasSlackIntegration = (
  agent: Agent
): agent is Agent & { slackIntegration: NonNullable<Agent["slackIntegration"]> } =>
  agent.slackIntegration != null

Try / catch

try {
  await deployAgentToSlack(agent)
} catch (e) {
  if (e instanceof HTTPError && e.message.includes("Slack integration is not configured")) {
    // redirect user to agent Slack settings
  }
  throw e
}

Prevention

When it happens

Trigger: Deploying a Slack-enabled agent whose agent.slackIntegration is undefined/null - e.g. requesting a Slack webhook URL or Slack app creation for an agent that was created without Slack settings, or after a save that stripped the integration field.

Common situations: Agent was created via API/automation without the slackIntegration block; a migration or schema change dropped the field; the caller deployed to Slack when the agent was actually configured for a different channel (e.g. Teams only).

Related errors


AI-assisted analysis of Budibase/budibase@a81a902e9a (2026-08-29). Data as JSON: /api/errors/73240012a7ef63aa. Report an issue: GitHub.