将Val Town与Tana整合
#javascript #生产率 #自动化 #socialmedia

问题陈述

我一直在使用tana进行知识管理,并作为Kanban跟踪工作的Kanban董事会。从过去的经验来看,我了解到我受到生产力指标的动力。因此,我实施了两个tana commands,以跟踪我完成的工作并收到有关我的生产力统计信息的通知。

解决方案概述

为了完成此任务,我创建了三个tana命令。第一个命令将当前节点的名称写入Airtable base。此基础包括任务的名称(来自节点名称)和完成的日期。

第二个命令在Val Town上呼叫Val。 val是一个脚本,计算今天完成的任务,并且昨天完成任务,并产生这样的消息:您今天完成了$ {todaycount}任务,与昨天的$ {canceptcount}相比。

第三个命令是一个“超级命令”,仅按顺序运行第一个和第二个命令。

我的所有任务都用#outcome标记,最后一步是将命令添加到#outcome标签中,以便我可以在完成任务时单击它,然后将任务写入可播放,然后将通知弹出,显示了当今的生产力统计。

写信给Airtable

要创建一个新命令,您只需在节点文本中输入名称,然后运行“转换为命令节点”命令。然后,您嵌套塔娜(Tana)在下面命令:

Tana command

您还可以看到调用Airtable API,我还将状态设置为“完成”。当您看到下面的成品时,这将更有意义。

创建阀

Val Town是一个网站,您可以在其中编写JavaScript或打字稿的片段。它具有社交功能,其中一件很酷的事情是您的脚本可通过API调用,非常适合与Tana集成。在Val Town,我为Airtable和Pushover API键设置了秘密,然后在私人Val中引用它们。尽管我决定不使用public val for calling Pushover,但由于Val作者可以重写该代码的风险,因此我不觉得可以安全地致电使用秘密数据。这是discussed here,将来会解决。

这是我的val的内容,它执行了指标计算并调用pushover:

async function get_work_stats() {
  const today = new Date();
  today.setHours(0, 0, 0, 0);
  const yesterday = new Date(today);
  yesterday.setDate(yesterday.getDate() - 1);
  const options = {
    method: "GET",
    headers: {
      authorization: `Bearer ${@me.secrets.airtable_api_key}`,
    },
  };
  const response = await fetch(
    "https://api.airtable.com/v0/appzwhnlnPyQYXO5f/Tasks",
    options,
  );
  const data = await response.json();
  let todayCount = 0;
  let yesterdayCount = 0;
  for (let record of data.records) {
    const recordDate = new Date(record.fields.Created);
    recordDate.setHours(0, 0, 0, 0);
    if (+recordDate === +today) {
      todayCount++;
    }
    else if (+recordDate === +yesterday) {
      yesterdayCount++;
    }
  }
  const message =
    `You have completed ${todayCount} tasks today, compared to ${yesterdayCount} yesterday.`;
  const po = await fetch("https://api.pushover.net/1/messages.json", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      token: @me.secrets.pushover_app_key,
      user: @me.secrets.pushover_user,
      message: message,
    }),
  });
  const poData = await po.json();
}

请注意,此Val不会返回任何内容,因为我们仅对API调用的副作用感兴趣。

从塔娜打电话给Val Town API

我们快要完成了!现在可以使用Val,这就是我从Tana称呼的方式:

Tana call val

将所有这些放在一起

现在,我已经有了我的tana命令来将任务完成状态写入Airtable,另一个命令将指标状态提取并将其发布到推销中,我创建了一个按顺序运行两个命令的Tana Super命令,并给它提供表情符号名称,以便在日常用法中看起来不错:

Super command

我所有的任务都用#outcome标记,所以最后一步是为此超级标签启用此命令:

Tana advanced command

演示

现在,当我检查任务时,我单击绿色的复选标记,而不是左侧的复选框。请参阅此示例:

该任务保存到Airtable,我在手机上收到通知。

iPhone notification

下一步

我将继续构建此工作流程,以包括更有意义的指标。除了“今日对抗昨天”外,我还希望与上周的同一天相比看到今天。我还想添加见解,例如,当我超过上周的每周总数时,积极的强化。幸运的是,该系统可扩展到包括最重要的指标。

最后,我最终将从Pushover切换到Telegram Bot。 Telegram具有令人难以置信的API,可以免费运行机器人,并且Telegram为所有主要平台提供了本地客户。