网淘吧来吧,欢迎您!

Asana (PAT)技能使用说明

2026-04-01 新闻来源:网淘吧 围观:28
电脑广告
手机广告

Asana

此技能提供了一个无依赖的Node.js命令行界面,通过使用个人访问令牌来调用Asana REST API (v1)

  • 脚本:
  • {baseDir}/scripts/asana.mjs认证:ASANA_PAT(首选)或
  • ASANA_TOKEN输出:仅限JSON

(标准输出),适用于代理和自动化

  1. 设置在您的Asana账户中创建一个Asana个人访问令牌(使用个人访问令牌无需
  2. 开发者控制台)。将该令牌提供给OpenClaw/Clawdbot,作为ASANA_PAT

  • 常见的注入模式

    Asana (PAT)

    Shell环境变量(本地测试):

  • OpenClaw 配置(推荐):设置skills.entries.asana.apiKey(或env.ASANA_PAT),这样密钥仅在代理运行时注入。

通过 OpenClaw CLI 配置(推荐)

这是设置 PAT 最安全的方式,因为它能将密钥排除在提示和临时 shell 历史记录之外。

推荐方式(apiKey → ASANA_PAT):

openclaw config set skills.entries.asana.enabled true
openclaw config set skills.entries.asana.apiKey "ASANA_PAT_HERE"

skills.entries.asana.apiKey是一个便捷字段:对于声明了metadata.openclaw.primaryEnv的技能,OpenClaw 会在代理运行时将apiKey注入到该环境变量中(此技能的主环境变量是ASANA_PAT)。

替代方案(显式环境变量):

openclaw config set skills.entries.asana.enabled true
openclaw config set skills.entries.asana.env.ASANA_PAT "ASANA_PAT_HERE"

验证存储的内容:

openclaw config get skills.entries.asana
openclaw config get skills.entries.asana.enabled
openclaw config get skills.entries.asana.apiKey

移除存储的令牌:

openclaw config unset skills.entries.asana.apiKey
# or
openclaw config unset skills.entries.asana.env.ASANA_PAT

重要提示:沙盒化运行

当会话在沙盒中运行时,技能进程会在 Docker 内部运行,并且继承主机环境。在这种情况下,skills.entries.*.env/apiKey仅适用于主机运行。

通过以下方式设置Docker环境变量:

  • agents.defaults.sandbox.docker.env(或按代理设置agents.list[].sandbox.docker.env
  • 或者将环境变量构建到你的沙箱镜像中

首次调用(完整性检查 + 发现)

  • 我是谁:

    node {baseDir}/scripts/asana.mjs me

  • 列出工作空间:

    node {baseDir}/scripts/asana.mjs workspaces

  • (推荐)设置一次默认工作空间:

    node {baseDir}/scripts/asana.mjs set-default-workspace --workspace <workspace_gid>

ID解析

当用户提供名称(项目/任务/用户)时,使用以下方法之一解析为GID:

  • typeahead --workspace <gid> --resource_type project|task|user --query "..."(快速,最佳默认)
  • 项目 --工作区 <gid> --全部(枚举)
  • 用户 --工作区 <gid> --全部(枚举)

当存在多个匹配项时,避免猜测 GID。

核心:任务

列出分配给用户的任务(个人效率)

node {baseDir}/scripts/asana.mjs 任务-分配 --分配对象 我 --工作区 <工作区_gid> --全部

列出项目中的任务

node {baseDir}/scripts/asana.mjs 项目中的任务 --项目 <项目_gid> --全部

搜索任务(高级搜索 API)

规范原语:搜索-任务(支持多种过滤器;优于添加狭窄的“搜索助手”命令)。

单行命令示例(在项目内搜索):

node {baseDir}/scripts/asana.mjs 搜索-任务 --工作区 <gid> --项目 <项目_gid> --文本 "..." --全部

有用的过滤器:

  • --分配对象 我|<gid|邮箱>(映射至assignee.any
  • --completed true|false
  • --created_at.after <iso>/--modified_at.after <iso>
  • --due_on.before YYYY-MM-DD/--due_at.before <iso>
  • --is_blocked true|false/--is_blocking true|false

创建 / 更新 / 完成

  • 创建:

    node {baseDir}/scripts/asana.mjs create-task --workspace <gid> --name "..." --projects <project_gid> --assignee me

  • 更新:

    node {baseDir}/scripts/asana.mjs update-task <task_gid> --name "..." --due_on 2026-02-01

  • 完成:

    node {baseDir}/scripts/asana.mjs complete-task <task_gid>

项目经理工作流程

此技能支持项目经理在Asana中常用的工作流程:

  • 保持项目简报最新(更新/插入项目简报
  • 撰写状态更新创建状态更新
  • 安全地处理时间线(开始/截止日期)和班次安排
  • 自定义字段作为一等元数据使用
  • 解读阻碍因素和依赖关系图(项目阻碍因素依赖项被依赖项

项目简报

  • 阅读:

    node {baseDir}/scripts/asana.mjs project-brief <project_gid>

  • 更新或插入(创建或更新):

    node {baseDir}/scripts/asana.mjs upsert-project-brief <project_gid> --title "项目简报" --html_text "<body>...</body>"

状态更新

  • 创建:

    node {baseDir}/scripts/asana.mjs create-status-update --parent <project_gid> --status_type on_track --text "每周更新..."

  • 列表:

    node {baseDir}/scripts/asana.mjs status-updates --parent <project_gid> --all

分区与移动任务

  • 列出分区:

    node {baseDir}/scripts/asana.mjs sections --project <project_gid> --all

  • 创建分区:

    node {baseDir}/scripts/asana.mjs create-section --project <project_gid> --name "受阻"

向项目添加任务

命令:add-task-to-project

调用POST /tasks/{task_gid}/addProject并支持可选的分区放置和排序。

示例:

node {baseDir}/scripts/asana.mjs add-task-to-project <task_gid> --project <project_gid>

包含分区及排序:

node {baseDir}/scripts/asana.mjs add-task-to-project <task_gid> --project <project_gid> --section <section_gid> --insert_before null --insert_after null

(--section--insert_before--insert_after是可选的;当提供时,它们会被传递到请求体中。)

从项目中移除任务

命令:remove-task-from-project

调用POST /tasks/{task_gid}/removeProject

示例:

node {baseDir}/scripts/asana.mjs remove-task-from-project <task_gid> --project <project_gid>

自定义字段

自定义字段对于可靠的PM自动化至关重要。

  • 列出项目的自定义字段:

    node {baseDir}/scripts/asana.mjs project-custom-fields <project_gid> --all

  • 读取自定义字段定义:

    node {baseDir}/scripts/asana.mjs custom-field <custom_field_gid>

  • 在创建/更新时设置任务自定义字段:

    node {baseDir}/scripts/asana.mjs update-task <task_gid> --custom_fields '{"<custom_field_gid>":"<value>"}'

注意事项:

  • 对于枚举类型,值通常是枚举选项的GID。
  • 对于数字类型,发送JSON数字。

富文本、提及和可靠性

Asana的富文本字段是符合XML规范的HTML片段包裹在<body>根元素内。API会拒绝无效的XML或不支持的标签。

关键点:

  • 使用html_notes用于任务描述。
  • 使用html_text用于评论/故事和状态更新。
  • 避免使用不支持的标签,如<p><br>;更推荐使用字面换行符(\n)和<hr/>分隔符。
  • 对于提及/链接,使用<a data-asana-gid="..."></a>(或自闭合的<a .../>)。

提及通知

创建提及链接并不能保证通知的送达,如果用户尚未被分配或未关注。

为了可靠地发送提醒,请执行以下操作之一:

  • 先分配用户,再发布评论,或者
  • 添加用户为关注者,等待几秒钟,然后发布评论

此技能支持“添加关注者 + 等待”模式:

node {baseDir}/scripts/asana.mjs comment <task_gid> --html_text "<body>Hi <a data-asana-gid=\"<user_gid>\"/>...</body>" --ensure_followers <user_gid> --wait_ms 2500

纯文本评论 (--text) 通过 API不会创建真正的 @ 提及;它们会保持为纯文本。

附件、上传和行内图片

  • 向任务上传文件附件:

    node {baseDir}/scripts/asana.mjs upload-attachment --parent <task_gid> --file /path/to/file.png

  • 将现有图片附件嵌入为行内图片(仅限任务和项目简介):

    node {baseDir}/scripts/asana.mjs append-inline-image --attachment <attachment_gid> --task <task_gid>

活动动态 / “类似收件箱”的工作流

Asana 并未为所有通知提供统一的“收件箱”API。最接近的稳定底层接口是事件端点,其作用范围限定于特定资源(项目、任务等)。

使用:

  • events --resource <gid>来获取项目(或用户的“我的任务”项目)的增量变更。
  • 该命令会在本地存储同步令牌,确保后续运行仅获取变更内容。

时间线调整

  • 调整单个任务(可选择包含子任务):

    node {baseDir}/scripts/asana.mjs shift-task-dates <task_gid> --delta_days 7 --dry_run true

  • 调整整个项目的任务:

    node {baseDir}/scripts/asana.mjs shift-project-tasks --project <project_gid> --delta_days -3 --dry_run true --all

先使用--dry_run true运行,然后使用--dry_run false重新运行。

超出范围

  • 投资组合(高级功能)已特意省略。
  • 此处未嵌入“机器人个性”;请在您的代理提示中配置行为。

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏

文章底部电脑广告
手机广告位-内容正文底部

相关文章

您是本站第406761名访客 今日有4篇新文章/评论