Skip to content

Slack 适配器

Slack 适配器已完全实现,支持通过 Slack Bot API 接入 onebots 服务。

状态

已实现并可用

功能特性

  • 消息收发
    • 频道消息收发
    • 私聊消息收发
    • 支持文本、富文本(Blocks)等多种消息格式
  • 消息管理
    • 消息编辑
    • 消息删除
  • 频道管理
    • 获取频道列表和信息
    • 离开频道
    • 获取频道成员列表
  • 用户管理
    • 获取用户信息
  • 事件订阅
    • Events API 支持
    • Webhook 事件订阅
  • 扩展功能
    • 应用命令(Slash Commands,需要额外配置)
    • 交互式组件(需要额外配置)

安装

bash
npm install @onebots/adapter-slack @slack/web-api
# 或
pnpm add @onebots/adapter-slack @slack/web-api

配置

config.yaml 中配置 Slack 账号:

yaml
# Slack 机器人账号配置
slack.your_bot_id:
  # Slack 平台配置
  token: 'xoxb-your-bot-token'  # Slack Bot Token,必填
  signing_secret: 'your_signing_secret'  # 可选,用于验证请求
  app_token: 'xapp-your-app-token'  # 可选,用于 Socket Mode
  socket_mode: false  # 是否使用 Socket Mode,默认 false
  
  # OneBot V11 协议配置
  onebot.v11:
    access_token: 'your_v11_token'
  
  # OneBot V12 协议配置
  onebot.v12:
    access_token: 'your_v12_token'

配置项说明

配置项类型必填说明
tokenstringSlack Bot Token(xoxb-...)
signing_secretstringSigning Secret(用于验证请求)
app_tokenstringApp-Level Token(用于 Socket Mode)
socket_modeboolean是否使用 Socket Mode,默认 false

获取 Bot Token

  1. 访问 Slack API
  2. 创建应用(Create New App)
  3. 在 "OAuth & Permissions" 中配置权限:
    • chat:write - 发送消息
    • channels:read - 读取频道信息
    • channels:history - 读取频道历史
    • users:read - 读取用户信息
    • im:read - 读取私聊
    • im:write - 发送私聊消息
  4. 安装应用到工作区
  5. 获取 Bot User OAuth Token(xoxb-...)
  6. 在 "Event Subscriptions" 中配置 Webhook URL:http://your-server:port/slack/{account_id}/webhook
  7. 获取 Signing Secret(用于验证请求)

使用示例

启动服务

bash
# 注册 Slack 适配器和 OneBot V11 协议
onebots -r slack -p onebot.v11

客户端 SDK 使用

onebots 提供了 imhelper 客户端SDK,可以方便地连接 Slack 适配器:

typescript
import { createImHelper } from 'imhelper';
import { createOnebot12Adapter } from '@imhelper/onebot-v12';

// 创建适配器
const adapter = createOnebot12Adapter({
  baseUrl: 'http://localhost:6727',
  selfId: 'your_bot_id',
  accessToken: 'your_token',
  receiveMode: 'ws',
  path: '/slack/your_bot_id/onebot/v12',
  wsUrl: 'ws://localhost:6727/slack/your_bot_id/onebot/v12',
  platform: 'slack',
});

// 创建 ImHelper 实例
const helper = createImHelper(adapter);

// 监听消息事件
helper.on('message.private', (message) => {
  console.log('收到私聊消息:', message.content);
  message.reply([{ type: 'text', data: { text: '收到!' } }]);
});

helper.on('message.group', (message) => {
  console.log('收到频道消息:', message.content);
  message.reply([{ type: 'text', data: { text: '收到!' } }]);
});

// 连接
await adapter.connect();

详细说明请查看:客户端SDK使用指南

相关链接