在完成了前两部分的系列文章后,编写一个发送邮件的函数应该不是问题。但如何安排函数的定期调用呢?当然,仍然不想为一个全时段运行的服务器支付费用。一种便宜的选择是使用IFTTT.com或其替代品。
IFTTT(如果这个那么那个)允许通过组合各种服务来创建所谓的小程序。创建一个免费的IFTTT账户,并登录到小程序。从那里,创建一个新的小程序。函数将由日期和时间服务触发,除了其他可能性外,它允许在提供的日期和时间触发(触发器是小程序的“这个”部分)。
点击“这个”,找到并选择日期和时间。第一次选择服务通常需要连接和设置。在下一步中,选择触发器“每周每天在...”并填写其属性。作为“那个”(小程序的“动作”部分),使用Webhooks的“发起网络请求”。作为URL,填写函数路径(类似于https://us-central1-ProjectName-123456.cloudfunctions.net/helloWorldFunction),方法POST,内容类型application/json(如果函数喜欢)。然后小程序动作的“正文”应该看起来像这样:
{
"message": "Hello!"
}
因为当前的触发器是日期和时间,URL或正文也应该包含它的任何属性(添加成分),例如:
{
"message": "Hello, it's {{CheckTime}}!"
}
每个小程序都有自己的日志。从“小程序”中选择一个,转到其“配置”(右上角齿轮图标),然后点击“查看活动日志”。如果URL填写正确,小程序运行后,新的条目也将出现在GCP函数的日志中。
请记住,示例helloWorldFunction期望有一个强制性的body.message:
if (req.body.message === undefined) {
// 这是一个错误案例,因为“message”是必需的。
res.status(400).send('No message defined!');
}
如果没有发布消息,小程序应该进入错误状态,有时甚至在创建过程中。在小程序的日志中,而不是“小程序运行”,会出现“小程序失败”,几分钟后IFTTT会再尝试一次,这也在两者(IFTTT和GCP)的日志中可见。
在创建新小程序时可以看到,Webhooks的触发不仅限于日期和时间。触发器也可以是邮件(邮件、Gmail、Office 365邮件),所以可以使用IFTTT而不是上一章的Mailgun。当前的列表包含服务如RSS、Facebook、Twitter、Pocket、日历、GitHub、天气甚至洗碗机,并且不断增长。Webhooks也可以是一个触发器。这样,可以轻松地将函数与例如Twitter连接起来,而无需了解Twitter API的细节或安装特定的包。
查看Webhooks设置,将看到一个与之关联的唯一URL。它应该看起来像https://maker.ifttt.com/use/abcdefghijklmnopqrstuvwxyz。按下“编辑连接”按钮,URL会改变。在Web浏览器中打开https://maker.ifttt.com/use/abcdefghijklmnopqrstuvwxyz,将看到一个页面,上面有密钥信息和用于测试三个可用的固定命名可选参数的表单:
{
"value1": "",
"value2": "",
"value3": ""
}
知道密钥,打开https://maker.ifttt.com/trigger/makertest/with/key/abcdefghijklmnopqrstuvwxyz,将看到:
恭喜!触发了makertest事件
在日志https://ifttt.com/activity/service/maker_webhooks中,它以这种方式可见:
事件名称:makertest
发生时间:2017年6月41日 27:98PM
值1:(无)
值2:(无)
值3:(无)
不要被日志所迷惑。变量名以小写字母开头。在URL中设置应该是这样的:
https://maker.ifttt.com/trigger/makertest/with/key/abcdefghijklmnopqrstuvwxyz?value1=hallo
而不是:
https://maker.ifttt.com/trigger/makertest/with/key/abcdefghijklmnopqrstuvwxyz?Value1=hallo