首页 > 解决方案 > Rally API 创建 ConversationPost

问题描述

使用以下代码,我正在尝试为 Capability 创建新的对话帖子。但它说

由于 I/O 错误,无法将输入流解析为 JSON 文档:解析错误:预期为 '{' 但看到了 '' [ chars read = >>><<< ]

function createPost(objId, post) {
  objId = "313878829904";
  post = "<p>MindMap:Hello from GAS.</p>"
  var url = "https://rally1.rallydev.com/slm/webservice/v2.0/conversationpost/create";
  
  var payload = {
    "ConversationPost": {
      "Artifact": "/portfolioitem/capability/" + objId,
      "Text": post
    }
  }
  
  var method = "POST";
  var options = optionsPost_(method, payload);
  var response = UrlFetchApp.fetch(url, optionsPost_(method, options));
  var content = JSON.parse(response.getContentText());
  content.CreateResult.Errors.forEach(error => Logger.log(error));
}

function optionsPost_(method, payload) {
  var rallyApiKey = "";
  if (rallyApiKey != "") {
    PropertiesService.getScriptProperties().setProperty("RallyApiKey", rallyApiKey);
  } else {
    rallyApiKey = PropertiesService.getScriptProperties().getProperty("RallyApiKey");
  }

  if (rallyApiKey == null) return null;

  return {
    headers: { "ZSESSIONID": rallyApiKey },
    payload: payload,
    method: method
  };
}

我看不出有什么问题。能否请你帮忙?谢谢!彼得

标签: apigoogle-apps-scriptpostrallypayload

解决方案


我认为从您的错误消息中,可能需要将有效负载作为 JSON 数据发送。如果我的猜测是正确的,那么下面的修改呢?

修改后的脚本:

从:
return {
  headers: { "ZSESSIONID": rallyApiKey },
  payload: payload,
  method: method
};
至:
return {
  headers: { "ZSESSIONID": rallyApiKey },
  payload: JSON.stringify(payload),
  method: method,
  contentType: "application/json"
};

笔记:

  • 在这个修改中,它假设payloadrallyApiKey的值是使用 API 的有效值。请注意这一点。
  • 当上述修改不是您问题的直接解决方案时,您能否提供您要使用的API的官方文档?借此,我想确认一下。

参考:


推荐阅读