Rally API创建ConversationPost

Rally API创建ConversationPost,api,google-apps-script,post,rally,payload,Api,Google Apps Script,Post,Rally,Payload,通过下面的代码,我试图为这个功能创建新的对话帖子。但是它说 由于I/O错误,无法将输入流解析为JSON文档:解析错误:应为“{”但为“saw”￿' [字符读取=>>>￿ Logger.log(错误)); } 功能选项POST(方法、有效载荷){ var rallyApiKey=“”; 如果(rallyApiKey!=“”){ PropertiesService.getScriptProperties().setProperty(“RallyApiKey”,RallyApiKey); }否则{ r

通过下面的代码,我试图为这个功能创建新的对话帖子。但是它说

由于I/O错误,无法将输入流解析为JSON文档:解析错误:应为“{”但为“saw”￿' [字符读取=>>>￿ Logger.log(错误)); } 功能选项POST(方法、有效载荷){ var rallyApiKey=“”; 如果(rallyApiKey!=“”){ PropertiesService.getScriptProperties().setProperty(“RallyApiKey”,RallyApiKey); }否则{ rallyApiKey=PropertiesService.getScriptProperties().getProperty(“rallyApiKey”); } if(rallyApiKey==null)返回null; 返回{ 标题:{“ZSESSIONID”:rallyApiKey}, 有效载荷:有效载荷, 方法:方法 }; } 我看不出有什么问题。 你能帮忙吗? 非常感谢。
Petr

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

修改脚本: 发件人: 致: 注:
  • 在此修改中,它假定
    有效负载
    rallyApiKey
    的值是使用API的有效值。请注意这一点
  • 当上述修改不是您问题的dierct解决方案时,您能提供您想要使用的API的官方文件吗?通过这一点,我想确认一下
参考:

    • 感谢您的快速响应。 有以下几点

      var payload = {"ConversationPost":{"Artifact": "/portfolioitem/capability/"+objId,"Text": post}};
        var method = "POST";
        var options = optionsPost_(method, payload);
      

      它给了我


      由于JSON文档的I/O错误,无法将输入流解析为JSON文档:解析错误:预期为“{”,但看到了“h”[chars read=>>>h>{“headers”:{“ZSESSIONID”:“{YCHACSD2QZSF8KBKQ0R1YHJHUVSZUYAS0CAAPHT2A},我找不到任何差异,但这实际上已开始工作。 我相信问题是由多个错误造成的。我删除了一个问题,但可能会添加另一个问题。 下面是一个有效的代码

      function createPost(objId, post) {
        objId = '313878829908';
        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, payload));
        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;
      
        var options={
          'headers': {'ZSESSIONID': rallyApiKey },
          'payload': JSON.stringify(payload),
          'method': method,
          'contentType':'application/json'
        };
        return options;
      }
      
      函数createPost(objId,post){
      objId='313878829908';
      post=“思维导图:加油站的你好。

      ” 变量url=”https://rally1.rallydev.com/slm/webservice/v2.0/conversationpost/create"; var payload={'ConversationPost':{'Artifact':'/portfolioitem/capability/'+objId,'Text':post}; var方法='POST'; //var选项=选项POST(方法、有效载荷); var response=UrlFetchApp.fetch(url,optionsPost(方法,负载)); var content=JSON.parse(response.getContentText()); content.CreateResult.Errors.forEach(error=>Logger.log(error)); } 功能选项POST(方法、有效载荷){ var rallyApiKey=“”; 如果(rallyApiKey!=“”){ PropertiesService.getScriptProperties().setProperty(“RallyApiKey”,RallyApiKey); }否则{ rallyApiKey=PropertiesService.getScriptProperties().getProperty(“rallyApiKey”); } if(rallyApiKey==null)返回null; var期权={ 'headers':{'ZSESSIONID':rallyApiKey}, “有效负载”:JSON.stringify(有效负载), “方法”:方法, “contentType”:“application/json” }; 返回选项; }

      谢谢塔奈克的帮助。我真的很感激。

      谢谢塔奈克。@Petr Sedláček感谢你的回复。我为给你带来的不便表示歉意。我注意到你将当前情况作为答案发布。我想建议将其添加到你的问题中。关于官方文件,我无法看到,因为我没有账户。对此我深表歉意。您是否有关于您想要使用的API的任何其他文档?此外,从官方文档中,我想确认请求的
      有效负载
      标题
      的格式。嗨,Tanaike。感谢您的快速响应。很抱歉,我没有意识到只有在登录后才能访问文档在帐户中…我没有发现它通常可用,所以我想我无法共享它。如果我找到联系人,我将尝试寻求支持。这可能会有所帮助?@Petr Sedláček感谢您的回复。现在我注意到您的问题已经解决。我很高兴。当我看到您添加的答案时,您的答案似乎与m相同y建议的答案。因此我无法理解
      这个问题是由错误组合造成的。
      。我为自己的英语水平低下而道歉。我能问一下你添加的答案和我建议的答案之间的差异的细节吗?我想确认一下,并从中学习。
      return {
        headers: { "ZSESSIONID": rallyApiKey },
        payload: JSON.stringify(payload),
        method: method,
        contentType: "application/json"
      };
      
      var payload = {"ConversationPost":{"Artifact": "/portfolioitem/capability/"+objId,"Text": post}};
        var method = "POST";
        var options = optionsPost_(method, payload);
      
      var options={
          headers: { "ZSESSIONID": rallyApiKey },
          payload: payload,
          method: method,
          contentType:"application/json"
        };
      
      var options={
              headers: { "ZSESSIONID": rallyApiKey },
              payload: JSON.stringify(payload),
              method: method,
              contentType:"application/json"
            };
      
      function createPost(objId, post) {
        objId = '313878829908';
        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, payload));
        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;
      
        var options={
          'headers': {'ZSESSIONID': rallyApiKey },
          'payload': JSON.stringify(payload),
          'method': method,
          'contentType':'application/json'
        };
        return options;
      }