01. 系列主题

Habitica 是一个游戏化的 GTD 工具,支持组队打怪,我计划开发一个适合小白用户部署的开源 Web 应用,让用户可以自动接受任务。

02. 本期目标

上期末尾,我计划使用 Golang 建立基本应用,并自动安装 Webhook 到 Habitica

决定了存储和语言框架,下面就可以动手开发了,下期,准备先实现 webhook 的自动安装。

greatghoul,公众号:老狗拾光 使用 Vercel 实现 Habitica 自动接受新任务 - 02 存储机制及开发语言

03. 搭建应用

这个 Webhook 应用其实非常简单:

  • 一个安装引导页面,用于自动安装 Webhook
  • 一个 Webhook 请求,用于接收 Habitica Webhook 并自动接受任务

首先,创建一个空白的应用:

以下是一些关键的 AI 提示词,Golang 的安装不在本文范围内,不作赘述。

使用 https://github.com/vercel/examples/tree/main/go/gin 模板初始化一个 Hello World Vercel 应用。

  • 不使用任何第三方 js 和 css
  • 不使用任何 js build 方案,使用古法 javascript
  • 使用 go + gin
  • deploy 按钮需要配置环境变量 HABITICA_USER_ID 和 HABITICA_API_TOKEN

建立好应用后,需要考虑用户没有配置环境变量的情况,给一个简单的用户指引:

如果环境变量没有设置。提示用户在 https://habitica.com/user/settings/siteData 获取,然后在 Vercel 中设置。并提供 Vercel 设置环境变量的文档页面链接。

Image

如果环境变量配置正确,我希望显示一个配置按钮,让用户手动点击来完成 Webhook 安装。

如果环境变量配置正确,显示用户基本信息(名称,等级)以及一个 配置 webhook 按钮。

提供一个 webhook endpoint, 当点击配置按钮,自动配置 webhook 到 habitica 中,仅注册 questInvited 事件。

参考 https://apidoc.habitica.com/#api-Webhook-AddWebhook

{ “enabled”: true, “url”: “https://some-webhook-url.com”, “label”: “My Quest Webhook”, “type”: “questActivity”, “options”: { // set at least one to true “questStarted”: false, // default “questFinished”: false, // default “questInvited”: true, // default } }

运行后,会显示配置按钮。

Image

因为 Habitica API Doc 中没有给出 quest invited 的具体事件的例子,我需要先部署一个应用来收集下请求的内容。方便下一步的行动。

https://apidoc.habitica.com/#api-Webhook-AddWebhook

如果配置成功,不再显示 Configure Quest Webhook 按钮。 如果收到 habitica 的 webhook 请求,在 server 日志中打印请求参数,包括 query parameter 以及 request body.

此时,安装功能的开发基本完成了。

04. 安装和调试

代码开源在 https://github.com/greatghoul/HabitiQuest

点击 README 中的 Deploy 按钮即可进入 Vercel 安装部署引导页面。

Image

Image

选择 Git Provider 并点击 Create 创建应用后,在引发页面提供 User ID 和 API Token 然后点击 Deploy 即可完成应用安装。

Image

Image

Image

访问 Vercel 生成的应用页面,就可以看到 Webhook 安装页面了。

Image

点击 Configure Quest Webhook 就可以安装 Webhook 到 Habitica 中。

Image

我已经在 Webhook 请求中加入了日志,等团队完成了当前的任务,团长会发起新任务邀请,在 Vercel 的日志中,我应该就能看到 Webhook 请求的具体信息了。

Image

05. 下期计划

下期的任务就比较简单了,等待下一次任务邀请,获取 webhook 请求的具体信息,然后做自动接受任务的处理,就可以完成这个小工具的开发了。


文章同步发表于微信公众号老狗拾光,欢迎关注。

微信公众号老狗拾光