首页 > 解决方案 > 如何使用 Asana 的外部数据功能存储复杂的元数据

问题描述

背景

我的组织使用 Asana 平台来协调我们的工作。我一直在利用 Asana 的 API 来自动化我们的许多日常操作,并将 Asana 的平台与我们使用的其他外部服务集成。我使用 python 和 requests 库与 Asana 的 API 进行交互,以发出 GET、POST 和 PUT 请求。

很多时候,我需要在 Asana 中获取或发布特定任务,我通常可以使用 Asana 自动生成的任务 ID 来实现。

result = requests.get("https://app.asana.com/api/1.0/tasks/task_id", headers)

但是,有时通过存储在其中的特定信息来识别任务对我很有用。通过将相关的特定信息存储在任务的元数据中,我已经能够成功地做到这一点,Asana 将其称为“外部数据”。

result = requests.get("https://app.asana.com/api/1.0/tasks/external_id", headers)

这两种方法都对我有用。但是,我在将特定数据存储在任务的外部数据中时遇到了问题,我在下面的部分中对此进行了概述。

问题

目前,当我将元数据存储在任务外部数据中时,我的 PUT/POST 请求如下:

header = {
    "Authorization" : "Bearer " + AUTH_TOKEN
}

data = {
    "data" : {
        "name" : "Burgers",
        "external" : {
            "id" : "external_id",
            "data" : "data_value"
        }
    }
}

url = "https://app.asana.com/api/1.0/tasks/task_id"
result = requests.put(url, headers=header, json=data)
return result

这里要注意的重要一点是“data_value”是一个字符串。然而,根据 Asana 的文档here,“data_value”实际上可以存储键和值的字典。我试图通过执行以下操作来传递字典对象:

data = {
    "data" : {
        "name" : "Burgers",
        "external" : {
            "id" : "external_id",
            "data" : {
               "data_value" : "some_data", 
               "data_value_2" : "some_data"
            }
        }
    }
}

但我继续收到一条错误消息:

"{"errors":[{"message":"external: data: Value is not a string: [object Object]","help":"有关 API 状态代码以及如何处理它们的更多信息,请阅读文档关于错误:https ://asana.com/developers/documentation/getting-started/errors "}]}"

有什么想法我哪里出错了吗?有没有人在这方面取得成功?

标签: pythonapiasana

解决方案


推荐阅读