# Гибридная интеграция

Гибридная интеграции сочетает возможности API и WEB интеграций, обеспечивая максимальную производительность и гибкость. Основные кампании, рендерятся через API на сервере, благодаря чему персонализированный контент включается в HTML-разметку ещё до загрузки страницы, исключая задержки и мигание. При этом вы сохраняете возможность быстро тестировать гипотезы с помощью web-кампаний.

# Идентификация пользователей

Если Web интеграция уже завершена, то в браузере пользователя в корневом домене сайта есть куки:

Если вы еще не выставляете куку _slid_server, то завершите Web интеграцию

# Передача параметров

Перед тем, как сделать API запрос, необходимо прочитать значение кук _slid_server и _sl_session. В параметрах API запроса необходимо передавать значения этих кук:

user.slid:

  • значение куки _slid_server, если оно есть
  • если нет _slid_server, то значение куки _slid
  • иначе null

session.sl:

  • значение куки _sl_session, если оно есть
  • иначе null
<?php
// Получаем значение куки _slid_server или _slid
$user_id = $_COOKIE['_slid_server'] ?? $_COOKIE['_slid'] ?? null;

// Получаем значение куки _sl_session
$session_id = $_COOKIE['_sl_session'] ?? null;

// Формируем параметры запроса
$requestParams = [
    "user" => [
        "slid" => $user_id,
    ],
    "session" => [
        "sl" => $session_id,
    ],
];

?>

# Обработка ответа

Если платформой был сгенерирован новый ID пользователя или сессии, то в составе ответа будут возвращены значения _slid_server и _sl_session.

  • новый ID пользователя генерируется, если передается user.slid: null)
  • новый ID сессии генерируется, если передавется session.sl: null или время жизни передаваемой сессии истекло
{
    "user": {
            "slid": "6495a07d71568849c607a6ed"
    },
    "session": {
            "sl": "43F9AD00-2D33-4AA3-8EE4-5638E8EB5976"
    },
    "cookies": [
            {
                "name": "_slid_server",
                "value": "6495a07d71568849c607a6ed",
                "maxAge": "31556926"
            },
            {
                "name": "_slsession",
                "value": "43F9AD00-2D33-4AA3-8EE4-5638E8EB5976",
                "maxAge": "1800"
            }
    ]
}

Данные значения необходимо установить в соответствующие куки _slid_server и _sl_session. Значения кук и время их жихни необходимо обновлять при каждом получении их в ответе. Для кук не должен быть установлен параметр HttpOnly.

<?php
if (isset($data['cookies']) && is_array($data['cookies'])) {
    foreach ($data['cookies'] as $cookie) {
        if (isset($cookie['name'], $cookie['value'], $cookie['maxAge'])) {
            // Устанавливаем куку
            setcookie(
                $cookie['name'],        // Имя куки
                $cookie['value'],       // Значение куки
                time() + (int)$cookie['maxAge'], // Время истечения срока действия
                "/",                    // Доступность на всём сайте
                $site_root_domain            // .site-domain.com
            );
        }
    }
}
?>

# Примеры ответов

  • На запрос /choose с заполненными объектами user и session

    {
    	"choices": [
    	{
    		"id": "647858625ad90a40be0042c3",
    		"name": "CTA change",
    		"type": "DECISION",
    		"variations": [
    			{
    				"id": "647858625ad90a40be0042cb",
    				"name": "Variation 2",
    				"payload": {
    					"type": "CUSTOM_JSON",
    					"data": {
    						"custom": {
    							"payload": {
    								"value": "0.3"
    							}
    						}
    					}
    				}
    			}
    		],
    		"groups": [],
    		"decisionId": "647858625ad90a40be0042c3:6492d1a95c98ebc980096516:647858625ad90a40be0042c7:647858625ad90a40be0042cb"
    	}
  • На запрос /choose с незаполненными user и session

    {
    	"choices": [
    	{
    		"id": "647858625ad90a40be0042c3",
    		"name": "CTA change",
    		"type": "DECISION",
    		"variations": [
    			{
    				"id": "647858625ad90a40be0042cb",
    				"name": "Variation 2",
    				"payload": {
    					"type": "CUSTOM_JSON",
    					"data": {
    						"custom": {
    							"payload": {
    								"value": "0.2"
    							}
    						}
    					}
    				}
    			}
    		],
    		"groups": [],
    		"decisionId": "647858625ad90a40be0042c3:6492d1a95c98ebc980096516:647858625ad90a40be0042c7:647858625ad90a40be0042cb"
    	}],
    	"user": {
    		"slid": "649406313e4805d9e10a7a76"
    	},
    	"cookies": [
    		{
    			"name": "_slid_server",
    			"value": "649406313e4805d9e10a7a76",
    			"maxAge": "31556926"
    		},
    		{
    			"name": "_slsession",
    			"value": "8B578AEC-ECB7-4976-AC7C-70857B845DBE",
    			"maxAge": "1800"
    		}
    	],
    	"session": {
    		"sl": "8B578AEC-ECB7-4976-AC7C-70857B845DBE"
    	}
    }