Asana API:使用 task/addTag 或使用标签创建任务时请求无效

Asana API: Invalid Request when using task/addTag or creating a task with tags

我似乎无法为新任务或现有任务添加标签。

我在 https://github.com/Asana/php-asana

使用 github 的 API

根据文档 here,我设置了选项并启动了对任务端点的 API 调用。它失败了:

致命错误:/mydir/asana/Asana/Errors/AsanaError 中的消息 'Invalid Request' 未捕获异常 'Asana\Errors\InvalidRequestError'。php:29

    // create new task
    $newTaskOptions = array(
        'name' => $taskName,
        'notes' => $taskNotes,
        'projects' => [11111111115445],
        'tags' => [11111119991, 11111119992]   // without this, the task is created ok
    );

    $newTask = $client->tasks->create($newTaskOptions);

这是发送到 request 过程的对象:

array(2) {
  ["headers"]=> array(1) {
    ["content-type"] => string(16) "application/json"
  }
  ["data"]=> array(2) {
    ["data"]=> array(4) {
      ["name"]=> string(17) "module 1 - task 1"
      ["notes"]=> string(32) "description of module 1 - task 1"
      ["projects"]=> array(1) {
        [0]=> int(11111111115445)
      }
      ["tags"]=> array(2) {
        [0]=> int(11111119991)
        [1]=> int(11111119992)
      }
    }
    ["options"]=> array(0) {
    }
  }
}

即使使用他们的 [ { id: 59746, name: 'Grade A' }, ... ] 示例(使用正确的标签 ID 和名称),它仍然会出错。实际上,它会在第一个“{”处引发语法错误。

接下来,如果我尝试 tasks/taskid/addTag 现有任务,我会收到类似的错误。下面是这段代码。

foreach ($tags as $tag){
  $newTag = $client->tasks->addTag($newTask->id, array('tag' => $tag));
}

addTag 命令的第二部分需要一个数组,根据文档使用 tag 作为数组键。我尝试了其他键,例如 textdatatags 无济于事。

我看了看重现你的第一个例子,它完全适合我。 (不幸的是,我们的 API 在某些地方是不对称的,这是其中之一:发送 ID 数组是要走的路,如您的第一个示例所示,但您将得到的是那些嵌套的 {ID, name} 对在响应中。)

我不确定您可能 运行 喜欢什么 - 我怀疑这可能是您使用的实际 PHP 代码之外的东西。如果标签的 ID 在 Asana 中不存在,我能够得到一个无效的请求错误抛出,这可能是问题所在吗?

为了解决错误,我们希望在响应中发回一条相当友好的消息。如果您将上面的请求代码更改为

try {
  $newTask = $client->tasks->create($newTaskOptions);
} catch (Asana\Errors\InvalidRequestError $e) {
  var_dump($e->response->body);
}

希望它能帮助您了解发生了什么(即在我的复制中,我得到了)

object(stdClass)#24 (1) {
  ["errors"]=>
  array(1) {
    [0]=>
    object(stdClass)#25 (2) {
      ["message"]=>
      string(40) "tags: [1]: Unknown object: 1980346754317"
      ["help"]=>
        string(155) "For more information on API status codes and how to handle them, read the docs on errors: https://asana.com/developers/documentation/getting-started/errors"
    }
  }
}

问题出在这里....标签已分配给工作区。因此,从 workspace-1/project-1/task-1 复制到 workspace-2/project-1/task-1 的标签将不起作用,除非该标签首先在 workspace-2.

中创建

一旦在目标工作区中创建了标签,代码就可以完美运行。