# Подключенный контент

Подключенный контент — это функция в [шаблонах Liquid](/ru/product/personalization/liquid-templates/), которая позволяет динамически извлекать и использовать данные из внешнего источника, такого как веб-сервис, непосредственно в ваших email-сообщениях или push-уведомлениях. Эта функция обеспечивает персонализацию в реальном времени, извлекая JSON-данные по указанному URL и сохраняя их в переменную, которую можно использовать в вашем контенте. 

## Основные сценарии использования

- **Рекомендации по продуктам**: отображение персонализированных списков продуктов, адаптированных для каждого пользователя.

- **Промокоды**: вставка уникальных промокодов, сгенерированных бэкенд-сервисом.

## Предварительные условия

* Чтобы использовать подключенный контент, у вас должен быть собственный бэкенд-сервис, который генерирует и предоставляет необходимые данные (например, промокоды, рекомендации по продуктам) на основе **User ID, HWID или пользовательских тегов**. Затем Pushwoosh извлекает эти данные перед отправкой сообщения.

## Пошаговое руководство по внедрению

<Aside type="caution" icon="setting" title="Требуется помощь разработчика">
Вам понадобится помощь вашей команды разработчиков для использования подключенного контента. Поделитесь с ними этим руководством, чтобы начать работу.
</Aside>

### Шаг 1. Настройте бэкенд-сервис 

Бэкенд-сервис должен:

* Принимать запрос, содержащий параметры, специфичные для пользователя (например, `userId`). Подключенный контент поддерживает `UserID`, `HWID` или любые пользовательские теги, которые вы настроили в своем проекте.  
* Возвращать JSON-ответ с необходимыми данными. Этот контент затем можно динамически вставлять в сообщения.

<Aside type="note" title="Как это работает"> 

Бэкенд-сервис действует как поставщик данных, отвечая на HTTP-запросы информацией, специфичной для пользователя. 

1. Pushwoosh отправляет запрос на ваш бэкенд, передавая идентификаторы, специфичные для пользователя, в качестве параметров запроса.  
2. Ваш бэкенд обрабатывает запрос и извлекает запрошенные данные.  
3. Ваш бэкенд возвращает JSON-ответ.  
4. Перед отправкой сообщения Pushwoosh извлекает JSON-ответ от бэкенд-сервиса и динамически использует возвращенные значения (например, `code`) в контенте сообщения.

**Пример ответа**

```
{ "code": "SPECIALOFFERFORUSER12345" }
```
</Aside>



### Шаг 2. Создайте пресет с подключенным контентом в Pushwoosh
 
1. В [редакторе контента Push](/ru/product/content/push-presets/) или [Email](/ru/product/content/email-content/drag-and-drop-email-editor/) вставьте синтаксис подключенного контента в поле сообщения.

**Пример** 

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }} :save result %}  
```
**Разбор синтаксиса**
|  |  |
| ----- | ----- |
| `connected_content` | Извлекает JSON-данные с указанного URL бэкенда. |
|    `http://your-backend-url.com` | Конечная точка бэкенда, которая возвращает необходимые данные в формате JSON. |
| `userId={{ ${userid} }}` | Динамический параметр запроса, который передает ID пользователя на бэкенд. Внутри `connected_content` оборачивайте переменную в `${}`. В тексте сообщения пишите `{{userid}}` без него. |
| `:save result` | Сохраняет полученный JSON-ответ в переменную `result` для использования в шаблонах Liquid. |

![Вставьте синтаксис подключенного контента](/connectedcontent.webp)

**Аутентификация (необязательно)**

Если ваш бэкенд-сервис требует аутентификации, вы можете включить API-ключ или токен в запрос подключенного контента для обеспечения безопасного доступа. 

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }}&auth=YOUR_API_KEY :save result %}  
```

Вы также можете отправлять данные аутентификации (или любые другие данные) в виде HTTP-заголовков, используя необязательный параметр `:headers` — JSON-объект с именами и значениями заголовков.

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }} :headers {"Authorization": "Bearer YOUR_TOKEN", "X-Api-Key": "YOUR_API_KEY"} :save result %}  
```
|  |  |
| ----- | ----- |
| `:headers {...}` | JSON-объект HTTP-заголовков, отправляемых с запросом, например, `Authorization: Bearer <token>`. |

<Aside type="caution" title="Только статические значения">
Переменные персонализации `${}` работают только внутри URL. Значения внутри `:headers` являются статическими и не интерполируются.
</Aside>

<Aside type="danger" title="Не храните учетные данные в URL">
Предпочитайте `:headers` параметру запроса URL (например, `&auth=YOUR_API_KEY`) для API-ключей и токенов: если запрос не удастся, URL запроса записывается в логи, раскрывая размещенный там ключ. Значения внутри `:headers` никогда не логируются.

Подключенный контент также требует, чтобы для вашей учетной записи были включены шаблоны контента Liquid. Если они не включены, весь тег `connected_content` — включая любой ключ внутри него — отправляется каждому получателю как обычный текст вместо рендеринга. Свяжитесь со [службой поддержки Pushwoosh](https://help.pushwoosh.com/hc/en-us/requests/new), если вы не уверены, включена ли эта функция для вашей учетной записи.
</Aside>

**Использование тегов в подключенном контенте**

Чтобы передать значение тега, добавьте его в URL как параметр запроса в той же форме `{{ ${tag_name} }}`. Если написать `{{ tag_name }}` внутри тега `connected_content`, значение отправится пустым.

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }}&lang={{ ${Language} }} :save result %} 
```

2. Затем добавьте текст сообщения, включающий **полученные данные**, например:

```

Привет, {{userid}}, получи свой личный промокод - {{result.code}} 
```

![Добавьте текст сообщения с полученными данными](/connectedcontent-1.webp)

3. После завершения работы с контентом сообщения и настройки параметров пресета сохраните его для повторного использования в кампаниях.

<video src="/connectedcontent-2.webm" title="Отправка сообщения с подключенным контентом" autoplay loop muted playsinline />

### Шаг 3. Отправьте сообщение, используя настроенный пресет 

Отправьте сообщение с этим пресетом, используя [форму одноразовой отправки push-уведомления](/ru/product/messaging-channels/push-notifications/send-push-notifications/one-time-push/#how-to-send-a-push-notification-using-the-one-time-push-form) или [email-сообщения](/ru/product/messaging-channels/emails/sending-emails/send-one-time-emails/) или [customer journey](/ru/product/customer-journey/pushwoosh-journey-overview/). 

<Aside type="caution" title="Важно">
Если сервис вернет статус, отличный от HTTP 200 OK, email-сообщение или push-уведомление не будет отправлено. Это гарантирует, что ваше сообщение будет отправлено только в том случае, если необходимые данные будут успешно получены.
</Aside>