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'配置项说明
| 配置项 | 类型 | 必填 | 说明 |
|---|---|---|---|
token | string | 是 | Slack Bot Token(xoxb-...) |
signing_secret | string | 否 | Signing Secret(用于验证请求) |
app_token | string | 否 | App-Level Token(用于 Socket Mode) |
socket_mode | boolean | 否 | 是否使用 Socket Mode,默认 false |
获取 Bot Token
- 访问 Slack API
- 创建应用(Create New App)
- 在 "OAuth & Permissions" 中配置权限:
chat:write- 发送消息channels:read- 读取频道信息channels:history- 读取频道历史users:read- 读取用户信息im:read- 读取私聊im:write- 发送私聊消息
- 安装应用到工作区
- 获取 Bot User OAuth Token(xoxb-...)
- 在 "Event Subscriptions" 中配置 Webhook URL:
http://your-server:port/slack/{account_id}/webhook - 获取 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使用指南