0

我第一次尝试使用由另一个跟踪平台 (WhatConverts) 触发的 webhook 来使用 Optimizely API。目标是跟踪电话,因为 Optimizely 本身没有。

我成功地从 WhatConverts 捕获数据并将其写入数据库以供以后使用。我只是在将其发送到 Optimizely 时遇到问题。我在这里遵循了 API 文档:

Optimizely X 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;
    }
}

再次,同样的结果。有人能指出我正确的方向来让这个工作吗?

4

1 回答 1

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'
);
于 2018-02-08T21:53:22.230 回答