随着 IFTTT 涨价至 $9.99,而免费套餐仅有三个应用(applet)额度,很多人开始寻找 IFTT 的免费替代方案。

先前我通过 IFTTT 和 RSS 将自己的文章、推文等各平台动态聚合在了 Telegram 频道中,随便一用就超出了额度。虽然在 10 月 7 日前可以用最低 $1.99 购买 Pro,但 IFTTT 一天一封提醒订阅 Pro 计划的邮件还是将我推向了替品的怀抱。当然这也是因为我并不是一个重度使用 IFTTT 的用户,以及续费还是需要以 $9.99 的价格支付的缘故(说到底还是穷)

IFTTT-Pro

在此之前我也其实有尝试过其他类似产品,原因是 IFTTT 无法实现一个事件多个触发(一对多)的效果。但其他产品也都不尽人意,就使用到了现在。

ActionsflowIFTTTMicrosoft FlowZapierHuginnn8n
是否开源开源闭源闭源闭源开源开源
搭建难度无需无需无需无需困难快速
付费价格0$9.99/m(免费3个应用)$15/m$19.99/m(免费5个应用)00
对接平台多,但其中微软产品占主要较多
操作难度傻瓜化新手操作繁琐新手操作有所难度新手操作有所难度新手操作繁琐

我再次寻找并体验类似产品时,我列出了这个表格。并不难看出,对我而言 Actionsflow 是最好的选择。

什么是 Actionsflow

The free Zapier/IFTTT alternative for developers to automate your workflows based on Github actions - Actionsflow GitHub repo

与 IFTTT 的自动化思路一样,ActionsFlow 的工作流(workflow)也是由触发器(trigger)和动作(action)两部分构成。没有可视化界面让非开发或从未使用过 GitHub Actions 的用户增加了一点难度,但清晰的 .yml 结构还是比较方便理解的。

推送博客文章到电报频道

预置条件

Telegram 频道

你需要一个频道并获取它的 id,可以借助第三方客户端或 @getIDs_bot 获取。

Telegram Bot

你可以通过 @BotFather 创建一个 Bot。示范如下,下图中框出的部分为 Bot Token 将在后文的配置中用到。

BotFather

配置 Actionsflow

创建仓库

根据 Actionsflow 所提供的模板创建一个仓库,打开仓库将会看到如下的文件结构。

├── .github
│   └── workflows
│       └── actionsflow-reset-cache.yml
│       └── actionsflow-update-dependencies.yml
│       └── actionsflow-upgrade-actionsflow.yml
│       └── actionsflow.yml
└── workflows
│   └── rss.yml
├── .gitignore
├── LICENSE
├── README.md
├── package-lock.json
└── package.json

新建工作流

workflow 文件夹下创建 Blog2Telegram.yml 文件。

编写工作流

打开 Blog2Telegram.yml 文件,输入以下内容。

on:
  rss:
    url: https://scvoet.me/feed
jobs:
  telegram:
    name: Send a telegram message
    runs-on: ubuntu-latest
    steps:
      - name: Send a telegram message
        uses: appleboy/telegram-action@v0.0.8
        with:
          to: ${{ secrets.TELEGRAM_TO }}
          token: ${{ secrets.TELEGRAM_TOKEN }}
          message:  |
            《${{on.rss.outputs.title}}》
            ${{on.rss.outputs.contentSnippet}}
          
            ${{on.rss.outputs.link}}
  • ${{on.rss.outputs.title}}:文章标题
  • ${{on.rss.outputs.link}}:文章链接
  • ${{on.rss.outputs.contentSnippet}}:文字描述

你可以查看通过 Actionsflow 的文档查阅更详细的字段信息。

设定 Secret

打开 https://github.com/username/repo/settings/secrets。预置条件中获取的频道 ID 和 Bot Token 将在此处用到。在 Name 中分别填入 TELEGRAM_TOTELEGRAM_TOKEN,在 Value 中则输入对应的值。

  • TELEGRAM_TO:频道 ID
  • TELEGRAM_TOKEN:Bot Token

GitHub Secret

至此你的工作流完成了,现在你可以通过 GitHub Actions 推送文章到 Telegram 频道中了。你可以前往我的频道 @scvoet_channel 查看本篇文章的推送。

做些别的

在 Actions 中,所有的 trigger 都是由你自行托管的。这在可控化的同时造成了麻烦。你需要申请许多平台的 API。而许多平台的申请都是需要审核的,这无疑造成了很多麻烦。

我通过 RSSHub + Actionsflow 曲线救国的方式解决了这个问题,我们借助 RSSHub 官方提供的服务来获取 RSS。再通过 Actionsflow 进行订阅,这就省去了申请 API 的步骤。因为 RSSHub 的服务已经申请并部署上了相关 API。当然 RSSHub 也是可控化的,你可以自行部署,但部署时仍需申请 API,所以使用第三方所提供的 RSSHub 可能才是我们最好的选择。

RSSHub 官方所提供的服务被墙了,GitHubActions 可以无视这点。但在你阅读文档时,你仍需科学上网。

现在我使用的软件都在由开源软件替代,可定制化、去中心化,开源的魅力莫过于此。

标签: IFTTT, Actionsflow, GitHub Action, Telegram

已有 4 条评论

  1. 这个方案对RSS的抓取是实时的吗,不是的话,多久抓取一次呢?

    1. Scvoet Scvoet

      五分钟一次

  2. Jan Jan

    有人做了Actionsflow的rsshub 触发器,这样相当于直接把rsshub部署到github actions,更方便了,不用关心官方的rsshub挂的问题。

    https://github.com/theowenyoung/actionsflow-trigger-rsshub

    1. Scvoet Scvoet

      好!

添加新评论