65.9K
CodeProject 正在变化。 阅读更多。
Home

Google Cloud Platform 的无服务器实验:第三部分

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3投票s)

2017 年 7 月 16 日

CPOL

3分钟阅读

viewsIcon

11466

将函数与其他 Web 服务连接

7.1. 通过计时器调用函数

我们来设想一下,您想发送一份每周的通讯。假设您知道如何自动化其内容(为什么不把您最近喜欢的文章放进去呢? https://codeproject.org.cn/Articles/1159363/Export-Selected-Items-from-RSS-Reader-using-Micros),在本文系列的前两部分之后,编写一个发送电子邮件的函数应该不是什么大问题。

但是如何安排您的函数的定期调用呢?当然,您仍然不希望花钱购买一个全职服务器来随时调用您。

一种便宜的选择是使用 IFTTT.com 或其替代品。

IFTTT(IF This Than That)允许通过组合各种服务来创建所谓的Applet

创建免费的IFTTT 账户 https://ifttt.com/join ,登录后转到您的Applets

从那里,创建一个新 Applet

我们的函数将由日期和时间服务触发,该服务除了其他可能性(向下滚动 https://ifttt.com/date_and_time 并单击日期和时间触发器和操作)之外,还允许在您指定的日期和时间触发(触发器AppletThis 部分)每周的每天在

单击This,找到并选择日期和时间。第一次选择服务通常需要连接和设置它。

在下一步中,选择触发器 每周的每天在并填写其属性。

作为thatAppletAction 部分),使用Webhooks 的唯一Action Make a web request

作为URL,填写指向您的函数的路径(例如,从第一课中的 https://us-central1-ProjectName-123456.cloudfunctions.net/helloWorldFunction),Method 选择POSTContent Type 选择application/json(如果您的函数需要)。然后您的Applet actionBody 应该如下所示

{"message": "Hello!"}

由于当前触发器是日期和时间,因此URLBody 还应包含其任何属性(Add ingredient),例如

{"message": "Hello, it's {{CheckTime}}!"} 

每个Applet 都有自己的日志。从My Applets 中选择一个,转到其Configure(右上角的齿轮图标)并单击 View activity log

使用正确填写的URL,在Applet 运行后,GCP Function 的日志中也会出现新的条目。

请记住,示例 `helloWorldFunction` 需要必需的 `body.message`。

  if (req.body.message === undefined) {

    // This is an error case, as "message" is required.

    res.status(400).send('No message defined!');

如果没有发布 `message`,Applet 应该会进入错误状态,有时甚至在创建过程中就会出现。在Applet 的日志中,而不是 `Applet ran`,会出现 `Applet failed`,几分钟后IFTTT 会再尝试一次,这在(IFTTTGCP)日志中都可以看到。

7.1. 其他触发器

正如在创建新 Applet 时所见,Webhooks 的触发不限于日期和时间

触发器也可以是邮件(EmailGmailOffice 365 Mail),所以也许您可以使用IFTTT 而不是上一章中的Mailgun

当前列表包含RSSFacebookTwitterPocketCalendarGitHubWeather 甚至Dishwasher 等服务,并且还在不断增长。

Webhooks 也可以作为Trigger。这样,您可以轻松地将您的Function 与例如Twitter 连接起来,而无需了解Twitter API 的详细信息或安装特定的软件包http://www.amitdeshmukh.co/getting-started-google-cloud-functions/。(某些服务可能存在更多替代软件包。)当然,连接更多服务器意味着更多的延迟和更多的潜在故障。不过,值得尝试一下。

查看您的Webhooks 设置,您将看到与之关联的唯一URL。它应该看起来像 https://maker.ifttt.com/use/abcdefghijklmnopqrstuvwxyz。单击Edit connection 按钮将更改URL

在 Web 浏览器中打开您的 https://maker.ifttt.com/use/abcdefghijklmnopqrstuvwxyz ,您将看到一个页面,其中包含

Your key is: abcdefghijklmnopqrstuvwxyz

信息和用于测试三个固定命名可选参数的表单

With an optional JSON body of:

{ "value1" : "", "value2" : "", "value3" : "" }

知道您的密钥后,打开 https://maker.ifttt.com/trigger/makertest/with/key/abcdefghijklmnopqrstuvwxyz ,您将看到

Congratulations! You've fired the makertest event

在日志 https://ifttt.com/activity/service/maker_webhooks 中,可以看到如下方式

EventName

makertest

OccurredAt

June 41, 2017 at 27:98PM

Value1

(none)

Value2

(none)

Value3

(none)

不要被日志所迷惑。变量名以小写字母开头。在 URL 中设置它们应该是这样的

not

7.2. 替代方案

除了IFTTT,您还可以尝试Zapier

这里的Applets 被命名为Zaps,计时器是ScheduleWebhooks 也是Webhooks

与第三方服务的连接方式与IFTTT 类似,但它们的列表并不相同。一些功能在Free Plan 中受到限制。

独特之处在于它们的电子邮件Parser。发送(转发)到与 parser 相关的电子邮件地址(例如 abcdef12@robot.zapier.com)的电子邮件会与预定义的模式进行比较,选定的部分可以成为在Zaps 中使用的文本变量。有时,这可以完全消除编写自己的电子邮件解析器(如 GCP Function)的需要。


第三部分结束。

© . All rights reserved.