拉力赛 API 创建 ConversationPost
Rally API create ConversationPost
使用以下代码,我正在尝试为 Capability 创建新对话 post。但是它说
由于 I/O 错误,无法将输入流解析为 JSON 文档:解析错误:预期为“{”,但看到了“” [字符读取 = >>><<< ]
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
};
}
我找不到任何问题。
能否请你帮忙?
谢谢!
彼得
我认为根据您的错误消息,有效负载可能需要作为 JSON 数据发送。如果我的猜测是正确的,下面的修改怎么样?
修改后的脚本:
从:
return {
headers: { "ZSESSIONID": rallyApiKey },
payload: payload,
method: method
};
到:
return {
headers: { "ZSESSIONID": rallyApiKey },
payload: JSON.stringify(payload),
method: method,
contentType: "application/json"
};
注:
- 在此修改中,假设
payload
和rallyApiKey
的值是使用API的有效值。请注意这一点。
- 当上述修改不是您问题的直接解决方案时,能否提供您要使用的API官方文档?借此,我想确认一下。
参考:
感谢您的快速回复。
与以下
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"
};
它给了我
由于 I/O 错误,无法将输入流解析为 JSON 文档:解析错误:应为“{”,但看到了 'h' [ 读取的字符 = >>>h<<< ]
如果我改成
var options={
headers: { "ZSESSIONID": rallyApiKey },
payload: JSON.stringify(payload),
method: method,
contentType:"application/json"
};
它给了我
由于 I/O 错误,无法将输入流解析为 JSON 文档:解析错误:预期为 '}' 但看到了 ',' [ 读取的字符 = >>>{"headers":{ "ZSESSIONID":"_ycHaCSd2QZSf8kbkQ0R1yhjohUvSzUYas0caApHt2A"},<<< ]
我使用的唯一文档是:
https://rally1.rallydev.com/slm/doc/webservice/objectModel.sp#ConversationPost
我找不到任何区别,但这实际上开始起作用了。
我相信问题是由错误组合引起的。我删除了一个问题,但也许会添加另一个问题。
这是一个有效的代码。
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;
}
感谢 Tanaike 的帮助。非常感谢。
使用以下代码,我正在尝试为 Capability 创建新对话 post。但是它说
由于 I/O 错误,无法将输入流解析为 JSON 文档:解析错误:预期为“{”,但看到了“” [字符读取 = >>><<< ]
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
};
}
我找不到任何问题。 能否请你帮忙? 谢谢! 彼得
我认为根据您的错误消息,有效负载可能需要作为 JSON 数据发送。如果我的猜测是正确的,下面的修改怎么样?
修改后的脚本:
从:return {
headers: { "ZSESSIONID": rallyApiKey },
payload: payload,
method: method
};
到:
return {
headers: { "ZSESSIONID": rallyApiKey },
payload: JSON.stringify(payload),
method: method,
contentType: "application/json"
};
注:
- 在此修改中,假设
payload
和rallyApiKey
的值是使用API的有效值。请注意这一点。 - 当上述修改不是您问题的直接解决方案时,能否提供您要使用的API官方文档?借此,我想确认一下。
参考:
感谢您的快速回复。 与以下
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"
};
它给了我
由于 I/O 错误,无法将输入流解析为 JSON 文档:解析错误:应为“{”,但看到了 'h' [ 读取的字符 = >>>h<<< ]
如果我改成
var options={
headers: { "ZSESSIONID": rallyApiKey },
payload: JSON.stringify(payload),
method: method,
contentType:"application/json"
};
它给了我
由于 I/O 错误,无法将输入流解析为 JSON 文档:解析错误:预期为 '}' 但看到了 ',' [ 读取的字符 = >>>{"headers":{ "ZSESSIONID":"_ycHaCSd2QZSf8kbkQ0R1yhjohUvSzUYas0caApHt2A"},<<< ]
我使用的唯一文档是: https://rally1.rallydev.com/slm/doc/webservice/objectModel.sp#ConversationPost
我找不到任何区别,但这实际上开始起作用了。 我相信问题是由错误组合引起的。我删除了一个问题,但也许会添加另一个问题。 这是一个有效的代码。
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;
}
感谢 Tanaike 的帮助。非常感谢。