← Cloudflare Zaraz / zaraz / advanced
Context Enricher
Zaraz Context Enricher представляет собой инструмент для изменения или обогащения context который используется в Zaraz с помощью Cloudflare Worker. Context Enricher дает доступ к клиентским и системным переменным.
Создание Worker
Чтобы использовать Context Enricher, сначала создайте новый Cloudflare Worker. Сделать это можно через панель управления Cloudflare или с помощью Wrangler.
Чтобы создать новый Worker в панели управления Cloudflare:
-
На панели управления Cloudflare перейдите к разделу Workers & Pages страницу.
Перейдите в Workers & Pages ↗ -
Выберите Создать приложение.
-
Укажите имя для Worker и выберите Развернуть.
-
Выберите Изменить код.
Теперь у вас есть простой Worker, отвечающий строкой "Hello world." Чтобы этот Worker работал в качестве Context Enricher, измените код так, чтобы он возвращал контекст обратно:
export default {
async fetch(request, env, ctx) {
const { system, client } = await request.json();
// Here goes your modification to the system or client objects.
/*
For example, to change the country to a fictitious "Pirate's Island" ("PI"), use:
system.device.location.country = 'PI';
*/
return new Response(JSON.stringify({ system, client }));
},
};Продолжайте чтение, чтобы увидеть более полные примеры для разных сценариев использования, или обратитесь к Zaraz Context.
Настройка Context Enricher
Теперь, когда Worker опубликован, его можно выбрать в настройках Zaraz:
-
На панели управления Cloudflare перейдите к разделу Настройки страницу.
Перейдите в Настройки ↗ -
Выберите свой Context Enricher Worker.
-
Сохраните настройки.
Теперь ваш Context Enricher будет выполняться для всех запросов Zaraz в этой зоне.
Пример Context Enricher
Добавление произвольной информации с помощью API
С помощью Context Enricher можно добавлять информацию в ваш контекст. Например, вы можете использовать API для получения текущей погоды по местоположению пользователя и добавления её в контекст.
function getWeatherForLocation({ client, system }) {
// Get the location from the context.
const { city } = system.device.location;
// Get the weather from an API.
const response = await fetch(
`https://wttr.in/${encodeURIComponents(city)}?format=j1`
).then((response) => response.json());
// Add the weather to the context.
client.weather = weather;
return { client, system };
}
export default {
async fetch(request, env, ctx) {
const { system, client } = await request.json();
// Add the weather to the context.
const newContext = getWeatherForLocation({ system, client });
// Return as JSON
return new Response(JSON.stringify(newContext));
},
};Теперь свойство weather можно использовать в любом месте Zaraz, выбрав Track Property из поля ввода атрибутов и введя weather.
Маскирование конфиденциальной информации, например адресов электронной почты
Предположим, что нужно скрыть конфиденциальную информацию, например адреса электронной почты. Для этого мы заменим все вхождения email-адресов в контексте. Учтите, что это лишь пример, который может подойти не для всех пограничных случаев и сценариев использования.
Для простоты в этом примере мы заменим все строки, содержащие @ символ:
function redactEmailAddressesFromObject(context) {
// Loop through all keys of the object.
for (const key in context) {
// Check if the value is a string.
if (typeof context[key] === "string") {
// Check if the string contains an @ symbol.
if (context[key].includes("@")) {
// Replace the string with a redacted version.
context[key] = "[email protected]";
}
} else if (typeof context[key] === "object") {
// Recursively call this function to redact the object.
context[key] = redactEmailAddressesFromObject(context[key]);
}
}
return context;
}
export default {
async fetch(request, env, ctx) {
const { system, client } = await request.json();
// Redact email addresses from the context.
const newContext = redactEmailAddressesFromObject({ system, client });
// Return as JSON
return new Response(JSON.stringify(newContext));
},
};