Skip to content

配置

本页是密钥与 Web 控制台的参考。核心概念在独立页面中说明:

主题页面
路由、目标、fallback / stop、身份组提醒路由与目标
分组、角色、邀请、自助注册、日志频道分组与访问控制
Webhook 提供方、分组入口、自定义 webhookWebhook 接入与租户隔离
KV / D1 键布局存储布局
过滤器(模式语法参考)下方过滤器类型 / 过滤器教程

密钥

WebHooker 的运行需要若干密钥。本地开发时放入 .dev.vars,生产环境使用 Cloudflare Worker Secrets。

必需密钥

变量说明
GITHUB_WEBHOOK_SECRETGitHub App 设置中的 webhook 密钥
GITEA_WEBHOOK_SECRETGitea 实例的 webhook 密钥(仅接收 Gitea webhook 时需要)
GITHUB_CLIENT_IDApp 设置中的 OAuth 客户端 ID
GITHUB_CLIENT_SECRETApp 设置中的 OAuth 客户端密钥
DISCORD_TOKENDiscord 机器人 Token
TELEGRAM_TOKENTelegram 机器人 Token(BotFather 获取)—— Telegram 路由必需

NOTE

GITHUB_APP_IDGITHUB_PRIVATE_KEY(PKCS#8 PEM)用于 GitHub App 安装流程/auth/github/install),通过 App JWT 解析安装所属账号的登录名。两者均为可选—— 未设置时安装页仍可正常使用,但会显示无账号名的匿名 inst-{installationId} 分组。 OAuth 流程本身只需要 GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRET

可选密钥

变量说明默认值
DISCORD_PUBLIC_KEYDiscord 应用的公钥(开发者门户获取),交互功能必需未设置时交互返回 401
DISCORD_APPLICATION_IDDiscord 应用 ID;省略时自动获取自动获取
TELEGRAM_WEBHOOK_SECRETPOST /telegram/webhook 验签密钥(X-Telegram-Bot-Api-Secret-Token)未设置时不校验
TELEGRAM_RICH_HEADER_HOST外部 rich-header 服务的基础 URL;未设置时使用内置 GET /api/richheader 提供 Telegram 头像卡片内置 /api/richheader
BASE_URLOAuth 回调的公共 URLhttp://localhost:8787
ADMIN_USER_IDS允许访问 WebUI 的 GitHub 用户 ID(或登录名),逗号分隔未设置时 WebUI 关闭
ALLOW_SELF_SIGNUP开启(1/true)后,没有任何分组权限的 GitHub 用户首次登录会自动获得个人分组而非 403关闭
AUDIT_RETENTION_DAYS定时清理时审计日志的保留天数90
NUXT_PUBLIC_DOCS_URL落地页使用的文档站 URL(客户端运行时配置)落地页默认值
NUXT_PUBLIC_REPO_URL落地页使用的 GitHub 仓库 URL落地页默认值
NUXT_PUBLIC_LEGAL_CONTACT/terms/privacy 页面展示的联系方式未设置时显示占位文本

Web 控制台

WebHooker 在 /admin 提供内置配置控制台,可在浏览器中管理路由、分组、成员、邀请、发送日志与审计日志。它由 GitHub OAuth 与管理员白名单保护。

设置

  1. 配置 ADMIN_USER_IDS,填写允许管理一切的 GitHub 用户 ID,也支持登录名,例如 ADMIN_USER_IDS=12345,RhenCloud。未设置时控制台禁用(除非开启 ALLOW_SELF_SIGNUP)。
  2. 打开 /admin 并使用 GitHub 登录。
  3. 没有任何访问权限的用户会得到 403,除非 ALLOW_SELF_SIGNUP=1(获得个人分组)或跟随分组邀请链接

控制台以 SPA 形式在 /admin 提供;其标签页可通过 URL 路径直达(/admin/groups/admin/logs/admin/audit)。/admin 之外未匹配到端点的 URL 直接返回 404,而不会展示控制台。

所有管理端点(/admin/api/*)见 Admin API。保存的路由会立即写入 KV config:routes 并使配置缓存失效,下一次 webhook 处理即会生效。

过滤器类型

实操指南见过滤器教程,包含完整示例。

类型匹配对象示例
eventGitHub 事件名称push, pull_*, pull_request
repo仓库全名org/repo, org/*
actor发送者登录名username, [bot], *[bot]
action事件操作opened, closed, published
branch分支名称main, feature-?, /^release-/
keyword载荷正文中的文本deploy, /fix\s+\d+/

过滤器行为

  • 路由中的所有过滤器必须都匹配才触发路由(AND 逻辑)
  • 在任何过滤器上设置 "exclude": true 可反转匹配逻辑(NOT 逻辑)
  • 所有过滤器类型支持相同的模式形式:纯文本、*/? 通配符* 任意长度、? 单字符)以及 /正则表达式/——均不区分大小写
  • 字段过滤器(event/repo/actor/action/branch)的通配符匹配整个值;keyword 的通配符和正则搜索载荷任意位置;keyword 的纯文本为子串搜索
  • 超过 200 个字符的模式不编译为通配符/正则;// 包裹的非法正则匹配不到任何内容
  • branch 过滤器适用于 push、pull_request、pull_request_review、pull_request_review_comment、create/delete、workflow_run、workflow_job、check_suite、deployment 和 code_scanning_alert 事件

匹配值

过滤器接受单个字符串或字符串数组:

json
{ "type": "event", "match": "push" }
{ "type": "event", "match": ["push", "pull_request"] }

基于 MIT 许可发布。