Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
cheekyshibe opened this issue Jun 14, 2024 · 1 comment
Open

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

cheekyshibe opened this issue Jun 14, 2024 · 1 comment

Comments

@cheekyshibe
Copy link
Contributor

cheekyshibe commented Jun 14, 2024

背景

一些追求 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 调用:

// 即时消息通知
async noticePushoo (comment, config) {
if (!config.PUSHOO_CHANNEL || !config.PUSHOO_TOKEN) {
logger.info('没有配置 pushoo,放弃即时消息通知')
return
}
if (equalsMail(config.BLOGGER_EMAIL, comment.mail)) {
logger.info('博主本人评论,不发送通知给博主')
return
}
const pushContent = fn.getIMPushContent(comment, config)
const sendResult = await pushoo(config.PUSHOO_CHANNEL, {
token: config.PUSHOO_TOKEN,
title: pushContent.subject,
content: pushContent.content,
options: {
bark: {
url: pushContent.url
}
}
})
logger.info('即时消息通知结果:', sendResult)
},

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

预期行为

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

其它可能性

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

@imaegoo
Copy link
Member

imaegoo commented Jun 14, 2024

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

没有。

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants