agent-Specialization/api_doc/napcat_api_report.md

943 lines
18 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# NapCat API 端口使用报告
> 调研时间2026-03-15
> 版本:基于 NapCat v4.x 版本
> 官方文档https://napneko.github.io/
---
## 目录
1. [概述](#1-概述)
2. [WebUI 管理界面](#2-webui-管理界面)
3. [OneBot11 HTTP API](#3-onebot11-http-api)
4. [WebSocket API](#4-websocket-api)
5. [常用 API 接口](#5-常用-api-接口)
6. [配置文件说明](#6-配置文件说明)
7. [curl 命令示例](#7-curl-命令示例)
8. [参考资源](#8-参考资源)
---
## 1. 概述
NapCat 是一个基于 NTQQ 的现代化 QQ Bot 框架,实现了 OneBot v11 协议标准。它支持多种通信方式:
- **HTTP API**RESTful API 调用
- **WebSocket Server**:正向 WebSocket服务器模式
- **WebSocket Client**:反向 WebSocket客户端模式
### 通信方式对比
| 方式 | 方向 | 端口/地址 | 适用场景 |
|------|------|-----------|----------|
| HTTP Server | 服务端 | 自定义默认3000 | 主动调用API |
| HTTP Client | 客户端 | 上报到指定URL | 被动接收消息 |
| WebSocket Server | 服务端 | 自定义默认3001 | 双向通信 |
| WebSocket Client | 客户端 | 连接到指定WS地址 | 连接框架 |
---
## 2. WebUI 管理界面
WebUI 是 NapCat 的可视化管理界面,用于配置网络和查看日志。
### 2.1 访问信息
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| 监听地址 | `0.0.0.0` | 监听所有网络接口 |
| 端口 | `6099` | WebUI 访问端口 |
| Token | 随机生成 | 登录验证密钥 |
### 2.2 访问 URL
```
http://IP地址:6099/webui
```
**注意**
- 首次启动时Token 会在启动日志中显示
- 格式:`[WebUi] WebUi Local Panel Url: http://127.0.0.1:6099/webui?token=xxxx`
- 若端口被占用,会自动尝试 `port+1`最多尝试100次
### 2.3 WebUI 配置文件
配置文件路径:`webui.json`
```json
{
"host": "0.0.0.0",
"port": 6099,
"token": "your-token-here",
"loginRate": 3
}
```
### 2.4 WebUI 功能
- QQ 登录(二维码登录)
- 网络配置管理HTTP/WS 服务端和客户端)
- 日志查看
- 系统配置
---
## 3. OneBot11 HTTP API
### 3.1 HTTP Server 配置
在 WebUI 或配置文件中添加 HTTP 服务器:
```json
{
"network": {
"httpServers": [
{
"name": "HttpServer",
"enable": true,
"host": "0.0.0.0",
"port": 3000,
"token": "your-access-token",
"messagePostFormat": "array"
}
]
}
}
```
### 3.2 HTTP 配置参数说明
| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `name` | string | 必填 | 配置名称,唯一标识 |
| `enable` | boolean | false | 是否启用 |
| `host` | string | 0.0.0.0 | 监听主机地址 |
| `port` | number | 3000 | 监听端口 |
| `token` | string | 空 | 访问令牌,用于鉴权 |
| `messagePostFormat` | string | array | 消息上报格式string/array |
### 3.3 HTTP API 调用方式
#### 请求格式
```
POST http://host:port/{action}
```
#### 认证方式
**方式一Query 参数**
```
POST http://localhost:3000/send_private_msg?access_token=your-token
```
**方式二:请求头**
```http
Authorization: Bearer your-token
```
**方式三:自定义 Header**
```http
Authorization: your-token
```
### 3.4 HTTP Client 配置(反向 HTTP
用于将消息上报到指定的 HTTP 地址:
```json
{
"network": {
"httpClients": [
{
"name": "httpClient",
"enable": true,
"url": "http://localhost:8080",
"messagePostFormat": "array",
"reportSelfMessage": false,
"token": "",
"debug": false
}
]
}
}
```
---
## 4. WebSocket API
### 4.1 WebSocket Server正向 WS
NapCat 作为 WebSocket 服务器,等待客户端连接。
#### 配置示例
```json
{
"network": {
"websocketServers": [
{
"name": "WsServer",
"enable": true,
"host": "0.0.0.0",
"port": 3001,
"token": "your-token",
"messagePostFormat": "array",
"reportSelfMessage": false,
"heartInterval": 30000,
"enableForcePushEvent": true,
"debug": false
}
]
}
}
```
#### 连接 URL
```
ws://host:port/
```
#### 消息格式
**发送消息(客户端 → 服务器):**
```json
{
"action": "send_private_msg",
"params": {
"user_id": 123456789,
"message": "Hello"
},
"echo": "unique-id"
}
```
**接收消息(服务器 → 客户端):**
```json
{
"post_type": "message",
"message_type": "private",
"user_id": 123456789,
"message": "Hello"
}
```
### 4.2 WebSocket Client反向 WS
NapCat 作为 WebSocket 客户端,主动连接到服务器。
#### 配置示例
```json
{
"network": {
"websocketClients": [
{
"name": "WsClient",
"enable": true,
"url": "ws://127.0.0.1:8080/onebot/v11/ws",
"token": "your-token",
"messagePostFormat": "array",
"reportSelfMessage": false,
"heartInterval": 30000,
"reconnectInterval": 3000
}
]
}
}
```
#### 常见框架对接地址
| 框架 | WebSocket URL |
|------|---------------|
| NoneBot2 | `ws://127.0.0.1:8080/onebot/v11/ws` |
| Koishi | `ws://127.0.0.1:5140/onebot` |
| AstrBot | `ws://127.0.0.1:6199/ws` |
---
## 5. 常用 API 接口
### 5.1 消息相关接口
#### 发送私聊消息
**接口:** `send_private_msg`
**请求参数:**
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `user_id` | int64 | 是 | 对方 QQ 号 |
| `message` | string/array | 是 | 消息内容 |
| `auto_escape` | boolean | 否 | 是否纯文本发送 |
**请求示例:**
```json
{
"user_id": 123456789,
"message": "Hello World"
}
```
**返回示例:**
```json
{
"status": "ok",
"retcode": 0,
"data": {
"message_id": 12345
}
}
```
---
#### 发送群消息
**接口:** `send_group_msg`
**请求参数:**
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `group_id` | int64 | 是 | 群号 |
| `message` | string/array | 是 | 消息内容 |
| `auto_escape` | boolean | 否 | 是否纯文本发送 |
**请求示例:**
```json
{
"group_id": 987654321,
"message": "Hello Group"
}
```
---
#### 发送消息(通用)
**接口:** `send_msg`
**请求参数:**
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `message_type` | string | 否 | 消息类型private/group |
| `user_id` | int64 | 条件 | 私聊时的 QQ 号 |
| `group_id` | int64 | 条件 | 群聊时的群号 |
| `message` | string/array | 是 | 消息内容 |
---
#### 撤回消息
**接口:** `delete_msg`
**请求参数:**
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `message_id` | int32 | 是 | 消息 ID |
---
### 5.2 群管理接口
#### 获取群列表
**接口:** `get_group_list`
**请求参数:**
**返回示例:**
```json
{
"status": "ok",
"retcode": 0,
"data": [
{
"group_id": 123456789,
"group_name": "群名称",
"member_count": 100,
"max_member_count": 500
}
]
}
```
---
#### 获取群信息
**接口:** `get_group_info`
**请求参数:**
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `group_id` | int64 | 是 | 群号 |
| `no_cache` | boolean | 否 | 是否不使用缓存 |
**返回示例:**
```json
{
"status": "ok",
"retcode": 0,
"data": {
"group_id": 123456789,
"group_name": "群名称",
"member_count": 100,
"max_member_count": 500
}
}
```
---
#### 获取群成员列表
**接口:** `get_group_member_list`
**请求参数:**
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `group_id` | int64 | 是 | 群号 |
**返回示例:**
```json
{
"status": "ok",
"retcode": 0,
"data": [
{
"user_id": 123456789,
"nickname": "昵称",
"card": "群名片",
"role": "member",
"join_time": 1234567890
}
]
}
```
---
#### 获取群成员信息
**接口:** `get_group_member_info`
**请求参数:**
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `group_id` | int64 | 是 | 群号 |
| `user_id` | int64 | 是 | QQ 号 |
| `no_cache` | boolean | 否 | 是否不使用缓存 |
---
#### 群组踢人
**接口:** `set_group_kick`
**请求参数:**
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `group_id` | int64 | 是 | 群号 |
| `user_id` | int64 | 是 | 要踢的 QQ 号 |
| `reject_add_request` | boolean | 否 | 是否拒绝加群申请 |
---
#### 群组禁言
**接口:** `set_group_ban`
**请求参数:**
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `group_id` | int64 | 是 | 群号 |
| `user_id` | int64 | 是 | 要禁言的 QQ 号 |
| `duration` | int32 | 否 | 禁言时长默认1800 |
---
#### 设置群管理员
**接口:** `set_group_admin`
**请求参数:**
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `group_id` | int64 | 是 | 群号 |
| `user_id` | int64 | 是 | 要设置的 QQ 号 |
| `enable` | boolean | 否 | true为设置false为取消 |
---
#### 设置群名片
**接口:** `set_group_card`
**请求参数:**
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `group_id` | int64 | 是 | 群号 |
| `user_id` | int64 | 是 | QQ 号 |
| `card` | string | 否 | 群名片内容 |
---
#### 设置群名
**接口:** `set_group_name`
**请求参数:**
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `group_id` | int64 | 是 | 群号 |
| `group_name` | string | 是 | 新群名 |
---
#### 退出群组
**接口:** `set_group_leave`
**请求参数:**
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `group_id` | int64 | 是 | 群号 |
| `is_dismiss` | boolean | 否 | 是否解散(群主专用) |
---
#### 设置群专属头衔
**接口:** `set_group_special_title`
**请求参数:**
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `group_id` | int64 | 是 | 群号 |
| `user_id` | int64 | 是 | QQ 号 |
| `special_title` | string | 否 | 专属头衔 |
| `duration` | int32 | 否 | 有效期(秒),-1为永久 |
---
### 5.3 账号相关接口
#### 获取登录号信息
**接口:** `get_login_info`
**返回示例:**
```json
{
"status": "ok",
"retcode": 0,
"data": {
"user_id": 123456789,
"nickname": "QQ昵称"
}
}
```
---
#### 获取好友列表
**接口:** `get_friend_list`
**返回示例:**
```json
{
"status": "ok",
"retcode": 0,
"data": [
{
"user_id": 123456789,
"nickname": "好友昵称"
}
]
}
```
---
#### 获取版本信息
**接口:** `get_version_info`
**返回示例:**
```json
{
"status": "ok",
"retcode": 0,
"data": {
"app_name": "NapCat",
"app_version": "4.17.20",
"protocol_version": "v11"
}
}
```
---
#### 获取状态
**接口:** `get_status`
**返回示例:**
```json
{
"status": "ok",
"retcode": 0,
"data": {
"online": true,
"good": true
}
}
```
---
### 5.4 消息类型格式
#### 文本消息
```json
{
"type": "text",
"data": {
"text": "消息内容"
}
}
```
#### 图片消息
```json
{
"type": "image",
"data": {
"file": "图片路径或URL"
}
}
```
#### At 消息
```json
{
"type": "at",
"data": {
"qq": "123456789"
}
}
```
#### 合并消息段
```json
[
{"type": "text", "data": {"text": "你好"}},
{"type": "at", "data": {"qq": "123456789"}},
{"type": "text", "data": {"text": "欢迎!"}}
]
```
---
## 6. 配置文件说明
### 6.1 配置文件位置
- **Windows**: `NapCat 安装目录/config/`
- **Linux**: `/opt/QQ/resources/app/app_launcher/napcat/config/`
- **Docker**: `/app/napcat/config/`
### 6.2 主配置文件结构
```json
{
"network": {
"httpServers": [],
"httpClients": [],
"websocketServers": [],
"websocketClients": []
},
"musicSignUrl": "",
"enableLocalFile2Url": false,
"parseMultMsg": false
}
```
### 6.3 完整配置示例
```json
{
"network": {
"httpServers": [
{
"name": "HttpServer",
"enable": true,
"host": "0.0.0.0",
"port": 3000,
"token": "your-http-token",
"messagePostFormat": "array"
}
],
"httpClients": [
{
"name": "httpClient",
"enable": false,
"url": "http://localhost:8080",
"messagePostFormat": "array",
"reportSelfMessage": false,
"token": "",
"debug": false
}
],
"websocketServers": [
{
"name": "WsServer",
"enable": true,
"host": "0.0.0.0",
"port": 3001,
"token": "your-ws-token",
"messagePostFormat": "array",
"reportSelfMessage": false,
"heartInterval": 30000,
"enableForcePushEvent": true,
"debug": false
}
],
"websocketClients": [
{
"name": "WsClient",
"enable": false,
"url": "ws://127.0.0.1:8080/onebot/v11/ws",
"token": "",
"messagePostFormat": "array",
"reportSelfMessage": false,
"heartInterval": 30000,
"reconnectInterval": 3000
}
]
},
"musicSignUrl": "",
"enableLocalFile2Url": false,
"parseMultMsg": false
}
```
---
## 7. curl 命令示例
### 7.1 基础调用示例
#### 获取登录号信息
```bash
curl -X POST "http://localhost:3000/get_login_info" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-token"
```
#### 发送私聊消息
```bash
# 使用 Query 参数认证
curl -X POST "http://localhost:3000/send_private_msg?access_token=your-token" \
-H "Content-Type: application/json" \
-d '{
"user_id": 123456789,
"message": "Hello from NapCat!"
}'
# 使用 Header 认证
curl -X POST "http://localhost:3000/send_private_msg" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-token" \
-d '{
"user_id": 123456789,
"message": "Hello from NapCat!"
}'
```
#### 发送群消息
```bash
curl -X POST "http://localhost:3000/send_group_msg" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-token" \
-d '{
"group_id": 987654321,
"message": "Hello Group!"
}'
```
#### 发送图片消息
```bash
curl -X POST "http://localhost:3000/send_group_msg" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-token" \
-d '{
"group_id": 987654321,
"message": [
{"type": "text", "data": {"text": "看这张图:"}},
{"type": "image", "data": {"file": "https://example.com/image.jpg"}}
]
}'
```
### 7.2 群管理示例
#### 获取群列表
```bash
curl -X POST "http://localhost:3000/get_group_list" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-token"
```
#### 获取群信息
```bash
curl -X POST "http://localhost:3000/get_group_info" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-token" \
-d '{
"group_id": 987654321,
"no_cache": false
}'
```
#### 获取群成员列表
```bash
curl -X POST "http://localhost:3000/get_group_member_list" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-token" \
-d '{
"group_id": 987654321
}'
```
#### 群成员禁言
```bash
curl -X POST "http://localhost:3000/set_group_ban" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-token" \
-d '{
"group_id": 987654321,
"user_id": 123456789,
"duration": 3600
}'
```
#### 设置群管理员
```bash
curl -X POST "http://localhost:3000/set_group_admin" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-token" \
-d '{
"group_id": 987654321,
"user_id": 123456789,
"enable": true
}'
```
### 7.3 其他常用接口
#### 撤回消息
```bash
curl -X POST "http://localhost:3000/delete_msg" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-token" \
-d '{
"message_id": 12345
}'
```
#### 获取版本信息
```bash
curl -X POST "http://localhost:3000/get_version_info" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-token"
```
#### 获取好友列表
```bash
curl -X POST "http://localhost:3000/get_friend_list" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-token"
```
---
## 8. 参考资源
### 8.1 官方资源
- **GitHub 仓库**: https://github.com/NapNeko/NapCatQQ
- **官方文档**: https://napneko.github.io/
- **API 文档**: https://napneko.github.io/zh-CN/develop/api
- **安装指南**: https://napneko.github.io/guide/install
- **配置指南**: https://napneko.github.io/config/basic
### 8.2 OneBot 协议
- **OneBot 协议文档**: https://onebot.dev/
- **OneBot v11 协议**: https://onebots.pages.dev/protocol/onebot-v11/
### 8.3 相关项目
- **go-cqhttp 文档**: https://docs.go-cqhttp.org/api/
- **NoneBot2**: https://nonebot.dev/
- **Koishi**: https://koishi.chat/
### 8.4 社区支持
- **Telegram 群组**: NapCatQQ
- **QQ 交流群**: 搜索 NapCat 相关群组
---
## 附录API 快速参考表
| API 名称 | 功能描述 | 权限要求 |
|----------|----------|----------|
| `send_private_msg` | 发送私聊消息 | 好友关系 |
| `send_group_msg` | 发送群消息 | 群成员 |
| `send_msg` | 通用发送消息 | - |
| `delete_msg` | 撤回消息 | 消息发送者/管理员 |
| `get_login_info` | 获取登录信息 | - |
| `get_friend_list` | 获取好友列表 | - |
| `get_group_list` | 获取群列表 | - |
| `get_group_info` | 获取群信息 | 群成员 |
| `get_group_member_list` | 获取群成员列表 | 群成员 |
| `get_group_member_info` | 获取群成员信息 | 群成员 |
| `set_group_kick` | 群组踢人 | 管理员/群主 |
| `set_group_ban` | 群组禁言 | 管理员/群主 |
| `set_group_admin` | 设置群管理员 | 群主 |
| `set_group_card` | 设置群名片 | 管理员/群主 |
| `set_group_name` | 设置群名 | 管理员/群主 |
| `set_group_leave` | 退出群组 | 群成员 |
| `set_group_special_title` | 设置群专属头衔 | 群主 |
| `get_version_info` | 获取版本信息 | - |
| `get_status` | 获取运行状态 | - |
---
*报告生成时间2026-03-15*
*报告版本v1.0*