我尝试首次使用Optimizely API,使用由另一个跟踪平台(WhatConverts)触发的webhook。目标是跟踪电话,因为Optimizely本身并没有。
我成功地从WhatConverts捕获数据并将其写入数据库以供以后使用。我只是将问题发送给Optimizely。我在这里遵循API文档:
以下是我根据他们的演示构建数据的方法:
$jsonData = array(
'account_id' => '8585984149',
'project_id' => '8585984149',
'visitors' => array(
'session_id' => '',
'visitor_id' => 'java-lover@example.com',
'snapshots' => array(
'decisions' => array(
'campaign_id' => '8603360066',
'experiment_id' => '8599910077',
'variation_id' => '8602330084'
),
'events' => array(
'entity_id' => '9560823711',
'type' => 'campaign_activated',
'timestamp' => 1491519130343,
'uuid' => '3a427b02-7ae0-4b20-8f02-32cc8a067be4'
),
),
),
'anonymize_ip' => true,
'client_name' => 'Optimizely/event-api-demo',
'client_version' => '1.0.0'
);
然后我json_encode()
然后发送它作为POST。但是,我收到以下错误" 在批处理json有效负载中缺少必需的字段访问者[] "。
我也尝试过在研究过程中遇到的json_encode($jsonData, JSON_PRETTY_PRINT)
,但得到的结果相同。
最后,我尝试了在编码之前找到的这个函数,因为我读取字符串作为键会强制它成为一个对象:
function fix_keys($jsonData) {
$numberCheck = false;
foreach ($jsonData as $k => $val) {
if (is_array($val)) $jsonData[$k] = fix_keys($val); //recurse
if (is_numeric($k)) $numberCheck = true;
}
if ($numberCheck === true) {
return array_values($jsonData);
} else {
return $jsonData;
}
}
同样,结果相同。任何人都可以指出我正确的方向让这个工作吗?
答案 0 :(得分:1)
问题可能是您在访问者中发送了错误的数据,因为API需要数组数组。你能尝试发送类似的东西吗?
$jsonData = array(
'account_id' => '8585984149',
'project_id' => '8585984149',
'visitors' =>
array(
array(
'session_id' => '',
'visitor_id' => 'java-lover@example.com',
'snapshots' => array(
'decisions' => array(
'campaign_id' => '8603360066',
'experiment_id' => '8599910077',
'variation_id' => '8602330084'
),
'events' => array(
'entity_id' => '9560823711',
'type' => 'campaign_activated',
'timestamp' => 1491519130343,
'uuid' => '3a427b02-7ae0-4b20-8f02-32cc8a067be4'
),
),
)
),
'anonymize_ip' => true,
'client_name' => 'Optimizely/event-api-demo',
'client_version' => '1.0.0'
);