Slack 应用用于通过 Slack 提供代理或团队,使用 FastAPI 服务器处理 Slack 事件并发送消息。

设置步骤

设置和配置

1

先决条件

请确保您已具备以下条件:

  • 拥有管理员权限的 Slack 工作区
  • ngrok(用于开发)
  • Python 3.7+
2

创建 Slack 应用

  1. 前往 Slack 应用目录
  2. 点击“创建新应用”
  3. 选择“从头开始”
  4. 提供:
    • 应用名称
    • 要安装到的工作区
  5. 点击“创建应用”
3

配置 OAuth 和权限

  1. 在 Slack 应用设置中导航至“OAuth & Permissions”
  2. 在“Scopes”下,点击“Add an OAuth Scope”
  3. 添加以下 Bot Token Scopes:
    • app_mention
    • chat:write
    • chat:write.customize
    • chat:write.public
    • im:history
    • im:read
    • im:write
  4. 滚动到顶部,点击“Install to Workspace”
  5. 点击“Allow”授权应用
4

设置环境变量

在项目根目录下创建一个 .envrc 文件,并包含以下内容,将占位符值替换为您的实际凭证:

export SLACK_TOKEN="xoxb-your-bot-user-token"  # Bot User OAuth Token
export SLACK_SIGNING_SECRET="your-signing-secret"  # App Signing Secret

在您的 Slack 应用设置中找到这些值:

  • Bot User OAuth Token:位于“OAuth & Permissions”下
  • Signing Secret:位于“Basic Information” > “App Credentials”下

确保您的 shell 已加载此文件(例如,通过使用 direnv allow)。

5

使用 ngrok 设置 Webhook

  1. 对于本地开发,请使用 ngrok 将您的本地服务器暴露到互联网:
    ngrok http 8000
    # 或者,如果您有付费 ngrok 计划并拥有静态域名:
    # ngrok http --domain=your-custom-domain.ngrok-free.app 8000
    
  2. 复制 ngrok 提供的 https:// URL
  3. 在您的 Slack 应用设置中,转到“Event Subscriptions”
  4. 通过切换开关来启用事件
  5. 添加您的请求 URL:
    • 格式:https://your-ngrok-url.ngrok.io/slack/events
  6. 等待 Slack 验证终结点(您的应用必须正在运行)
6

配置事件订阅

  1. 在 Event Subscriptions 的“Subscribe to bot events”下:
  2. 点击“Add Bot User Event”并添加:
    • app_mention
    • message.im
    • message.channels
    • message.groups
  3. 点击“Save Changes”
  4. 重新安装您的应用以应用新的权限
7

启用应用主页

  1. 在 Slack 应用设置中转到“App Home”
  2. 在“Show Tabs”下:
    • 启用“Messages Tab”
    • 勾选“Allow users to send Slash commands and messages from the messages tab”
  3. 保存更改
8

最终安装

  1. 返回 Slack 应用设置中的“Install App”
  2. 点击“Reinstall to Workspace”
  3. 使用新的权限授权应用
  4. 您的应用现在已准备就绪!

示例用法

创建一个代理,用 SlackAPI 包装它,然后提供它:

from agno.agent import Agent
from agno.app.slack.app import SlackAPI
from agno.models.openai import OpenAIChat

basic_agent = Agent(
    name="Basic Agent",
    model=OpenAIChat(id="gpt-4o"), # 请确保已设置 OPENAI_API_KEY
    add_history_to_messages=True,
    num_history_responses=3,
    add_datetime_to_instructions=True,
)

slack_api_app = SlackAPI(
    agent=basic_agent,
)
app = slack_api_app.get_app()

if __name__ == "__main__":
    slack_api_app.serve("basic:app", port=8000, reload=True)

核心组件

  • SlackAPI: 用于通过 FastAPI 集成 Agno 代理/团队到 Slack。
  • SlackAPI.serve: 使用 Uvicorn 为 FastAPI 应用提供服务,并进行 Slack 配置。

SlackAPI

Agno Slack 应用的主入口点。

初始化参数

参数类型默认值描述
agentOptional[Agent]NoneAgno Agent 实例。
teamOptional[Team]NoneAgno Team 实例。
settingsOptional[APIAppSettings]NoneAPI 配置。如果为 None 则使用默认值。
api_appOptional[FastAPI]None已存在的 FastAPI 应用。如果为 None 则会创建一个新的。
routerOptional[APIRouter]None已存在的 APIRouter。如果为 None 则会创建一个新的。
app_idOptional[str]None应用标识符(如果未设置则自动生成)。
nameOptional[str]None应用的名称。
descriptionOptional[str]None应用的描述。

请提供 agentteam,但不要同时提供两者。

端点

Slack 集成的核心端点:

POST /slack/events

  • 描述: 处理所有 Slack 事件,包括消息和应用提及。
  • 安全: 为每个请求验证 Slack 签名。
  • 事件类型:
    • URL 验证挑战
    • 消息事件
    • 应用提及事件
  • 功能:
    • 线程对话
    • 后台任务处理
    • 长响应的消息分割
    • 支持直接消息和频道交互

测试集成

  1. 使用 python <my-app>.py 在本地启动您的应用程序(确保 ngrok 正在运行)。
  2. 使用 /invite @YourAppName 将机器人邀请到频道。
  3. 尝试在频道中提及机器人:@YourAppName 你好
  4. 通过与机器人开启私信来测试直接消息。

故障排除

  • 验证所有环境变量是否设置正确。
  • 确保机器人具有正确的权限并已成功邀请到频道。
  • 检查 ngrok 连接和 URL 配置。
  • 验证事件订阅是否配置正确。
  • 监控应用程序日志以获取详细的错误消息。

支持

如需更多帮助或报告问题,请参阅文档或在仓库中提交 issue。