背景
作为一个博主,与读者的互动是非常重要的一环。我的博客使用 Giscus 作为评论系统,它基于 GitHub Discussions 构建,提供了一个轻量级且优雅的评论解决方案。然而,最近我发现一个问题:当读者在博客上发表评论时,我并没有收到及时的通知。
虽然 GitHub 本身有通知机制,但在关注了多个仓库的情况下,这些通知容易被淹没在众多的项目更新中。为了更好地与读者互动,我决定为 Giscus 评论系统添加一个独立的通知功能。
技术方案
GitHub Discussions 事件
Giscus 使用 GitHub Discussions 作为后端存储,当有新的评论时,会在对应的 Discussion 中创建新的回复。GitHub 提供了完整的 Webhook 事件支持,我们需要关注的事件有:
discussion_comment
: 当有新评论时触发discussion
: 当创建新讨论时触发
实现方式
我选择使用 GitHub Actions 来实现通知功能,主要考虑以下几点:
- 与 GitHub 完美集成,无需额外服务器
- 配置简单,维护成本低
- 支持多种通知方式(邮件、ntfy 等)
创建 GitHub Action 工作流
在仓库的 .github/workflows
目录下创建工作流文件 discussion-notification.yml
:
name: Discussion Notification
on:
discussion_comment:
types: [created]
discussion:
types: [created]
jobs:
send-notification:
runs-on: ubuntu-latest
steps:
- name: Send email
uses: dawidd6/action-send-mail@v3
with:
server_address: ${{secrets.MAIL_SERVER}}
server_port: ${{secrets.MAIL_PORT}}
username: ${{secrets.MAIL_USERNAME}}
password: ${{secrets.MAIL_PASSWORD}}
subject: New comment on your blog
body: |
There is a new comment in your blog discussions!
Comment by: ${{ github.event.comment.user.login || github.event.discussion.user.login }}
Content: ${{ github.event.comment.body || github.event.discussion.body }}
Link: ${{ github.event.comment.html_url || github.event.discussion.html_url }}
to: ${{secrets.MAIL_TO}}
from: Blog Notification <${{secrets.MAIL_FROM}}>
- name: ntfy-notifications
uses: niniyas/ntfy-action@master
with:
title: ${{ github.event.comment.user.login || github.event.discussion.user.login }} 给您的博客评论啦
url: ${{ secrets.NTFY_URL }}
topic: ${{ secrets.NTFY_TOPIC }}
priority: 5
headers: '{"authorization": "Bearer ${{ secrets.NTFY_TOKEN }}"}'
tags: tada
details: |
Comment by: ${{ github.event.comment.user.login || github.event.discussion.user.login }}
Content: ${{ github.event.comment.body || github.event.discussion.body }}
Link: ${{ github.event.comment.html_url || github.event.discussion.html_url }}
配置通知服务
这个工作流同时支持邮件和 ntfy 两种通知方式:
邮件通知配置
在 GitHub 仓库的 Settings -> Secrets and variables -> Actions 中添加以下密钥:
MAIL_SERVER
: 邮件服务器地址MAIL_PORT
: 邮件服务器端口MAIL_USERNAME
: 邮箱用户名MAIL_PASSWORD
: 邮箱密码MAIL_TO
: 接收通知的邮箱地址MAIL_FROM
: 发送通知的邮箱地址
Ntfy 通知配置
同样在 Secrets 中添加:
NTFY_URL
: ntfy 服务器地址NTFY_TOPIC
: 订阅的主题名称NTFY_TOKEN
: ntfy 认证令牌(如果需要)
效果展示
配置完成后,当有新的评论或讨论时,我会同时收到邮件和 ntfy 通知:
邮件通知
Ntfy 通知
总结
通过利用 GitHub Actions,我们为 Giscus 评论系统添加了双重通知功能。这个解决方案具有以下优点:
- 零成本:GitHub Actions 对公共仓库免费
- 可靠性高:依托于 GitHub 的基础设施
- 双重保障:同时支持邮件和 ntfy 通知
- 配置灵活:可以根据需要启用或禁用任一通知方式
现在,无论是通过邮件还是手机通知,我都能及时收到读者的评论,大大提高了博客的互动性。如果你也在使用 Giscus 并遇到类似需求,欢迎在下方留言交流!
💭 欢迎留下你的想法!
如果这篇文章对你有帮助,欢迎分享你的使用经验
有任何问题或建议,也请告诉我
我会及时收到通知并回复你的评论 😊