我正在尝试通过他们的api(使用gapi)将实验插入Google分析
var experiment = {
"name": "Testing",
"description": "test",
"status": "READY_TO_RUN",
"variations": [{
"name": "Original",
"url": "http://abc.se",
}, {
"name": "Variant 1",
"url": "http://abc.se/1",
}],
};
gapi.client.analytics.management.experiments.insert({
'accountId': currentProfile['accountId'],
'profileId': currentProfile['profileId'],
'webPropertyId': currentProfile['webPropertyId'],
'resource': experiment
}).execute(callback);
我得到的响应代码是“code”:500,“message”:“内部错误。”,
任何帮助都将受到赞赏。 (关于stackoverflow的第一个问题,如果我的问题很模糊,我会事先道歉。)
答案 0 :(得分:0)
首先,查看API Reference for the Experiment INSERT method。
它要求您发出POST请求,并且在请求正文中您需要提供实验资源。在这种情况下,必需的属性/字段是名称,状态和变体名称。您还需要设置objectiveMetric,因为根据引用,如果status为“RUNNING”并且servingFramework是“REDIRECT”或“API”之一,则此字段是必需的。
如果您正在使用JavaScript客户端,则需要使用gapi.client.request来执行此方法。你不能按照你所描述的方式去做,因为那会产生GET请求,而你还没有提供请求体。您需要使用请求正文发出POST请求。看看Using gapi.client.request to make REST requests。
所以它看起来像:
var requestBody = {
'name': 'Testing',
'status': 'RUNNING',
'objectiveMetric': 'ga:timeOnSite',
'variations': [
{'name': 'VER 1', 'status': 'ACTIVE', 'url': 'http://abs.com/1'},
{'name': 'VER 2', 'status': 'ACTIVE', 'url': 'http://abs.com/2'}
],
};
var request = gapi.client.request({
'path': '/analytics/v3/management/accounts/YOUR_ACCOUNT_ID/webproperties/YOUR_WEBPROPERTY_ID/profiles/YOUR_PROFILE_ID/experiments',
'method': 'POST',
'body': JSON.stringify(requestBody)});
request.execute(handleAccounts);
答案 1 :(得分:0)
解决方案是添加参数“objective Metric”。虽然未在文档中指定。
最终代码:
var requestBody = {
"name": "testing2", //required
"status": "READY_TO_RUN", //required
"objectiveMetric": "ga:goal11Completions", //required?
"variations": [
{
"name": "test1", //required
"status": "ACTIVE",
"url": "http://abs.se/3" //required
},
{
"name": "test2", //required
"status": "ACTIVE",
"url": "http://abs.se/4" //required
}
]
};
var request = gapi.client.request({
'path': '/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments',
'method': 'POST',
'body': JSON.stringify(requestBody)});
request.execute(handleAccounts);
}
非常感谢Pete的帮助。