在上一篇文章中 ,我描述了自动化的发贴子:围绕会议提交工作流管理重复性任务。 我写了有关安装程序,以及如何使用ngrok
将webhooks重定向到我的计算机的文章。 这周,我想写一些我在旅途中遇到的打ic。
注册Trello Webhook
大多数SaaS提供商都允许通过其GUI注册Webhook。 例如GitHub的情况:它位于“
菜单。
不管好坏,Trello都不是。 要注册一个Webhook ,需要执行一个HTTP请求。 这要求:
- API密钥 , 每个帐户唯一 。 有趣的是,它无法重置。 不要泄漏它,否则您会后悔的!
- 令牌,应该为每个应用程序生成。 要生成令牌,请按照相关页面上的说明进行操作。 必需的参数如下:
- 范围 :读取,写入等
- 应用名称
- 到期日
- 板的ID。 为了获得它,请在板的URL末尾附加
.json
以显示其JSON表示形式。 ID是前几个参数之一:{ "id": "5d383691a3aeaa3b5741953d", "name": "My board", "desc": "", "descData": null, "closed": false, "idOrganization": null, "idEnterprise": null }
- 最后,发送类似于以下内容的
POST
请求:curl-X POST -H"Content-Type: application/json"\ https://api.trello.com/1/tokens/ { token } /webhooks/ \ -d'{ "key": "{key}", "callbackURL": "http://www.mywebsite.com/trelloCallback", "idModel":"{boardID}", "description": "Name of the webhook" }'
准备网络挂钩
要检查webhook是否有效,Trello将立即向刚刚注册的回调发送HEAD
请求。 如果此请求不成功,则注册将失败。 例如,如果应用未启动或URL无法访问,则会发生这种情况。
HEAD
HTTP方法很少使用。 例如,当使用Spring Boot时,它需要显式配置这样的端点:
funroutes(runtimeService:RuntimeService)=router{
valhandler=TriggerHandler(runtimeService)
POST("/trigger",handler::post)
HEAD("/trigger",handler::head)
}
classTriggerHandler(privatevalruntimeService:RuntimeService){
funpost(request:ServerRequest):ServerResponse{
// Starts the workflow instance
}
funhead(request:ServerRequest)=ServerResponse.ok().build()
}
由于控制器未提供任何GET
端点,因此上述代码段与HTTP规范不太兼容:
HEAD方法与GET相同,除了服务器在响应中不得返回消息正文。 响应HEAD请求的HTTP标头中包含的元信息应该与响应GET请求发送的信息相同。 此方法可用于获取有关请求所隐含的实体的元信息,而无需转移实体主体本身。 此方法通常用于测试超文本链接的有效性,可访问性和最新修改。
https://ietf.org/rfc/rfc2616.txt
在所有情况下,它都能完成工作。 此外,我没有找到轻松创建委托给GET
端点的HEAD
端点的任何方法。 提示非常受欢迎。
Google权限
Google需要管理对象(读取,写入等)的权限。无论在Calendar还是Sheets(或其他Google API)上,最新文档的问题都在于它偏向Android, 例如 Calendar Java Quickstart 。 在这种用例中,许可请求是交互式的:首先向用户显示一个身份验证屏幕,然后要求用户提供所需的许可。
通常,工作流允许交互式或自动步骤。 交互式步骤允许输入一个人的凭据并授权该应用程序,但是先前定义的工作流程仅具有自动化步骤。 对于真正的自动化工作流程,应尽可能避免交互步骤。 但是,出于安全原因,Google禁止使用自己的帐户凭据(登录名和密码)。 但是它提供了另一种选择:可以创建一个所谓的服务帐户,并为其授予对相关日历和文档的写权限。
创建一个Google服务帐户
要创建服务帐户:
- 转到Google Cloud控制台中的服务帐户页面
- 创建或选择一个项目
- 填写必填项
- 选择新创建的帐户,单击“ Edit ,然后单击“ Create Key 。 下载密钥并将其存储在安全的地方,因为它包含将自己作为创建的服务帐户进行身份验证所必需的凭据。
配置权限
要使服务帐户可以访问自己的日历(或文档),需要执行两个步骤:
- 首先,应该授予项目使用API的权限。 在创建服务帐户的项目上下文中,打开左侧菜单。 转到 。选择Google Calendar API ,然后在打开的页面中点击Enable 。 对Google Calendar API重复上述步骤。
- 然后,应该让代表团访问自己的日历。 在日历中,找到菜单:我的日历列表,然后点击相关菜单,然后点击Settings and sharing 。 找到“ Share with specific people部分,然后添加访问级别为“ Manage changes to events的服务帐户。
对于Google表格,请与服务帐户共享文档。
- 如果该选项显示为灰色,则表示域管理员不允许该选项。 如果您是自己域的管理员,请转到Google管理控制台 。 然后,点击“ 。单击Sharing settings 。 选择External sharing options for primary calendars ,然后Share all information, and outsiders can change calendars 。 这样可以为组织外部的帐户(例如服务帐户)提供写访问权限。
如有必要,请对Google表格重复上述步骤。
结论
上一篇文章描述了自动化工作流程的背景,而本篇文章则列出了必要的配置步骤:Trello Webhook和Google服务帐户。 虽然没有什么比平常的要好,但是如果以前不知道这些事实,则需要花费一些时间来研究上述事实。
翻译自: https://blog.frankel.ch/automating-conference-submission-workflow/2/