优化 API - "Missing the required field visitors"
Optimizely API - "Missing the required field visitors"
我第一次尝试使用 Optimizely API 使用由另一个跟踪平台 (WhatConverts) 触发的 webhook。目标是跟踪 phone 调用,因为 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;
}
}
同样的结果。任何人都可以指出正确的方向来使它正常工作吗?
问题可能是您向访问者发送了错误的数据,因为 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'
);
我第一次尝试使用 Optimizely API 使用由另一个跟踪平台 (WhatConverts) 触发的 webhook。目标是跟踪 phone 调用,因为 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;
}
}
同样的结果。任何人都可以指出正确的方向来使它正常工作吗?
问题可能是您向访问者发送了错误的数据,因为 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'
);