Connect acme.sh via IFTTT

acme.sh 是一个使用纯 posix shell 实现的 ACME 协议,经常被用来自动申请更新 tls 证书。在最近的更新中 acme.sh 新增了 notify 特性,该功能可以将每次定时任务的(成功更新、跳过、失败等)状态通过指定的方式发送通知。目前可用的的通知方式以及使用方式可见该项目的 wiki 页。

Obtain IFTTT Webhooks API Key

其实我已经在使用 IFTTT 很久了,但是最近才知道它支持 webhooks 作为触发器。在使用之前我们需要先进行一些简单的配置,可以在 IFTTT 中搜索 Webhooks 服务,在该页面点击 Connect 后就算是配置好啦。再次回到该页面点击右上角的 Documentation 按钮,就可以看到自己的 Key 和一个简单的教程。需要注意的是这个 Key 是和账户绑定的,不要轻易泄漏。

要触发一个 Webhooks 事件,需要前面得到的 API Key 和一个事件名称(在建立 IFTTT Applet 时指定)。IFTTT 会使用 Key 来识别用户,再根据事件名称来确定应该触发该用户的哪个 Applet。

Create an IFTTT Applet Triggered by Webhooks

接下来我们就可以建立自己的 Applet 了,将 “This” 配置为 Webhooks 时会让用户指定一个 event name 即事件名称,本文填写了 acme_status 作为例子。而 “That” 则可以选择我们喜欢的服务啦。

Setup Notify for acme.sh

acme.sh 命令使用 --set-notify 来配置 notify 功能:

1
2
3
4
5
6
export IFTTT_API_KEY=xxxx             # setup api key
export IFTTT_EVENT_NAME=acme_status # setup event name
acme.sh --set-notify --notify-hook ifttt

# or just one line command
IFTTT_API_KEY=xxxx IFTTT_EVENT_NAME=acme_status acme.sh --set-notify --notify-hook ifttt

该命令会尝试触发一次 Webhooks,我们可以通过 Applet 的运行状态来判断 acme.sh notify 特性是否配置成功。

IFTTT Webhooks 的消息体支持三个自定义域,分别是 value1 , value2 和 value3 。acme.sh 默认使用 value1 来发送 notify 的标题,使用 value2 来发送 notify 的正文,我们可以在配置 acme.sh 时通过设置 IFTTT_SUBJECT_KEY 和 IFTTT_CONTENT_KEY 环境变量来分别指定标题和正文所使用的域。注意两个变量不可以指定相同域。