Skip to content
AstrBot
Main Navigation 主页博客路线图HTTP API

简体中文

English

简体中文

English

切换日光/暗黑模式

简介和部署接入消息平台接入 AI使用开发
Sidebar Navigation

简介

关于 AstrBot

社区

常见问题

部署

包管理器部署

雨云一键云部署

桌面客户端部署

启动器一键部署

Docker 部署

Kubernetes 部署

宝塔面板部署

1Panel 部署

手动部署

其他部署方式

CasaOS 部署

优云智算 GPU 部署

社区提供的部署方式

支持我们

接入消息平台

快速接入指南

QQ 官方机器人

Websockets 方式(推荐)

Webhook 方式

OneBot v11

企微应用

企微智能机器人

微信公众号

个人微信

飞书

钉钉

Telegram

LINE

Slack

Mattermost

Misskey

Discord

KOOK

Satori

接入 Satori

使用 server-satori

社区提供

Matrix

VoceChat

接入 AI

✨ 接入模型服务

NewAPI

AIHubMix

PPIO 派欧云

硅基流动

小马算力

302.AI

Ollama

LMStudio

⚙️ Agent 执行器

内置 Agent 执行器

Dify

扣子 Coze

阿里云百炼应用

DeerFlow

使用

WebUI

插件

内置指令

工具使用 Tools

技能 Skills

使用电脑能力

SubAgent 编排

主动型 Agent 能力

MCP

网页搜索

知识库

自定义规则

Agent 执行器

统一 Webhook 模式

自动上下文压缩

Agent 沙箱环境

开发

插件开发

🌠 从这里开始

最小实例

接收消息事件

发送消息

插件配置

插件 Pages

插件国际化

调用 AI

存储

文转图

会话控制器

杂项

发布插件

插件指南(旧)

接入平台适配器

AstrBot HTTP API

AstrBot 配置文件

其他

自部署文转图

插件下载不了?试试自建 GitHub 加速服务

社区活动

开源之夏 2025

桐谷霁屿 x AstrBot 插件奖励活动

目录

插件 Pages ​

AstrBot 支持插件通过 pages/ 目录暴露 Dashboard 页面。pages/ 下的每个一级子目录都是一个独立 Page:

text
astrbot_plugin_page_demo/
├─ main.py
└─ pages/
   ├─ bridge-demo/
   │  ├─ index.html
   │  ├─ app.js
   │  ├─ style.css
   │  └─ assets/
   │     └─ logo.svg
   └─ settings/
      └─ index.html

AstrBot 会扫描 pages/<page_name>/index.html;没有 index.html 的目录会被忽略。

如果只是让用户填写几个配置项,优先使用 _conf_schema.json。插件 Pages 更适合复杂表单、Dashboard、日志、文件上传下载、SSE 和自定义交互流程。

一旦注册了 Pages,用户可以在:AstrBot WebUI 插件页中的插件卡片中,点击插件卡片进入插件详细页面,在插件详细页面中可以看到并进入注册的 Pages。

最小前端示例 ​

pages/bridge-demo/index.html

html
<!doctype html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8" />
    <title>Plugin Page Demo</title>
    <link rel="stylesheet" href="./style.css" />
  </head>
  <body>
    <button id="ping">Ping</button>
    <pre id="output"></pre>
    <script type="module" src="./app.js"></script>
  </body>
</html>

pages/bridge-demo/app.js

js
const bridge = window.AstrBotPluginPage;
const output = document.getElementById("output");

const context = await bridge.ready();
output.textContent = JSON.stringify(context, null, 2);

document.getElementById("ping").addEventListener("click", async () => {
  const result = await bridge.apiGet("ping");
  output.textContent = JSON.stringify(result, null, 2);
});

这里不需要手动引入 bridge SDK。AstrBot 会在返回的 HTML 里自动插入 /api/plugin/page/bridge-sdk.js。

注册后端 API ​

前端调用 bridge.apiGet("ping") 时,Dashboard 会转发到:

text
/api/plug/<plugin_name>/ping

因此注册 Web API 时,路由必须带上插件名作为前缀:

python
from quart import jsonify
from astrbot.api.star import Context, Star

PLUGIN_NAME = "astrbot_plugin_page_demo"


class MyPlugin(Star):
    def __init__(self, context: Context):
        super().__init__(context)
        context.register_web_api(
            f"/{PLUGIN_NAME}/ping",
            self.page_ping,
            ["GET"],
            "Page ping",
        )

    async def page_ping(self):
        return jsonify({"message": "pong"})

Bridge API ​

插件 Page 中可直接使用 window.AstrBotPluginPage:

  • ready(): 等待 bridge 就绪并返回上下文
  • getContext(): 读取当前上下文
  • apiGet(endpoint, params): 发送 GET 请求
  • apiPost(endpoint, body): 发送 POST 请求
  • upload(endpoint, file): 以 multipart/form-data 上传单个文件
  • download(endpoint, params, filename): 下载后端响应
  • subscribeSSE(endpoint, handlers, params): 订阅 SSE
  • unsubscribeSSE(subscriptionId): 取消 SSE 订阅

当前 ready() 上下文类似:

json
{
  "pluginName": "astrbot_plugin_page_demo",
  "displayName": "Plugin Page Demo"
}

endpoint 必须是插件内相对路径,不能为空,不能包含 \、URL scheme、query、hash,也不能包含 . 或 .. 路径片段。

静态资源路径规则 ​

AstrBot 会重写相对资源路径,并自动补上短期 asset_token。你只需要正常写相对路径,不要自己拼接 /api/plugin/page/content/...。

AstrBot 会重写:

  • HTML src 和 href
  • CSS url(...)
  • JavaScript import
  • JavaScript export ... from
  • JavaScript 动态 import()

建议把静态资源写成 ./style.css、./assets/logo.svg 这类相对路径。不要手动追加 asset_token,也不要依赖 .. 逃逸 Page 根目录。

如果你构建 SPA,建议使用 hash routing。静态资源服务按真实文件路径解析;history routing 刷新页面时需要对应路径上真的存在文件。

安全约束 ​

插件 Pages 运行在受限 iframe 中:

text
allow-scripts allow-forms allow-downloads

Page 不能直接访问 Dashboard cookies、LocalStorage 或同源 DOM,也不能绕过 bridge 复用 Dashboard auth。

AstrBot 还会给资源响应添加安全头,包括:

  • X-Frame-Options: SAMEORIGIN
  • Content-Security-Policy: frame-ancestors 'self'; object-src 'none'; base-uri 'self'
  • Cache-Control: no-store

调试建议 ​

  • 新增或删除 Page 目录后重载插件
  • 修改 pages/<page_name>/ 下的大多数静态资源后,刷新 Page 即可
  • 如果 Page 没出现,检查 pages/<page_name>/index.html 是否存在,以及插件是否启用
发现文档有问题?在 GitHub 上编辑此页

Last updated:

Pager
上一篇插件配置
下一篇插件国际化

Deployed on Rainyun Logo