twikoojs / twikoo

💬 一个简洁、安全、免费的静态网站评论系统 | A simple, safe, free comment system.
http://twikoo.js.org
MIT License
1.4k stars 264 forks source link

特性请求:Notify 方式支持 WebHook #717

Open ChaiByte opened 2 weeks ago

ChaiByte commented 2 weeks ago

背景

一些追求 Serverless 服务的应用如 Cloudflare Workers 为了追求轻量化和极快的冷启动响应速度,只兼容了 NodeJS 运行时的一些子集,而默认支持现代浏览器原生 API 如 Fetch API. Twikoo 采用的 Pushoo.js 推送依赖于 axios 包,后者并不被当前 Cloudflare Worker 的运行时兼容,导致目前 twikoojs/twikoo-cloudflare 的 IM 推送服务失效。

而 WebHook 方式目前对于大部分 Bot 都是支持的,如企业微信群机器人(且无需像自建应用一样要强制要求设置 IP 白名单)。直接支持 WebHook 能使得用户在 PUSHOO_CHANNEL 不满足需求的时候,仍然保有一种最原始的方法进行消息推送。

请求

基于现有的 noticePushoo 实现,在 Notify 中支持直接 WebHook 调用:

https://github.com/twikoojs/twikoo/blob/885654dee964dd17aa0ace14ab483e74f0ef7980/src/server/function/twikoo/utils/notify.js#L132-L154

需要前端和后端都做一些修改。

预期行为

我在 Twikoo 的前端 UI 填入即时通知的 WebHook 地址和类型(如 WECOMBOT),后端能如期发送消息通知

其它可能性

Pushoo.js 项目本身是否用到了 axios 中的高级特性?如果没有用到的话,可以把相应部分完全用手搓原生 API 实现,这样能够真正服务于各种 Serverless 应用。

imaegoo commented 2 weeks ago

Pushoo.js 项目本身是否用到了 axios 中的高级特性?

没有。

fetch API需要Node.js v18.0.0,由于腾讯云Serverless使用了较旧版本的Node.js运行时,无法支持fetch API。

考虑更新pushoo,优先使用fetch,如果运行时不支持fetch,则回退到使用axios。