# Вход на основе API

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

## Как это работает

Вход на основе API позволяет запускать customer journey в тот момент, когда происходит определенное бизнес-событие. Чтобы запустить кампанию, необходимо отправить специальный API-запрос.

Вот несколько примеров использования входа на основе API:

* Информировать клиентов о том, что товары снова в наличии
* Сообщать пользователям о снижении цены на популярный товар
* Уведомлять подписчиков о выходе нового эпизода подкаста

В отличие от обычных событий (Events), все эти бизнес-события могут происходить вне приложения. Например, наличие товара можно проверить только во внешней базе данных. Именно здесь пригодится вход на основе API: вы можете настроить отправку запроса на запуск Journey всякий раз, когда происходят определенные изменения вне приложения (например, в вашей внешней базе данных).

<img src="/shared-33.webp" alt="Элемент входа на основе API на холсте Journey"/>

Это работает следующим образом:

1. Создайте Journey с входом на основе API. В настройках входа вы найдете шаблон запроса, который запускает Journey.
2. Добавьте в запрос условия сегментации, используя [язык сегментации](/ru/developer/api-reference/segmentation-filters-api/segmentation-language). Вы также можете добавить в запрос плейсхолдеры для изменения контента сообщения в зависимости от контекста.
3. При необходимости автоматизируйте запрос. Например, информация об изменении цены может быть немедленно отправлена из базы данных в webhook. Как только это произойдет, webhook должен автоматически отправить запрос на запуск Journey. Вы также можете отправить запрос вручную, если вам не нужна автоматизация.

Вы можете отправлять запрос неограниченное количество раз, чтобы изменить условия сегментации или контент сообщения.

Для получения более подробной информации следуйте приведенным ниже инструкциям.

## Настройка Journey с входом на основе API

1. Создайте Journey с входом на основе API:

<video src="/journey-elements-api-based-entry-1.webm" title="Создание нового Journey и выбор входа на основе API" autoplay loop muted playsinline />

2. Дважды щелкните на шаге входа на основе API. Откроется окно конфигурации входа.

3. Вы можете изменять контент пуша и email-сообщения каждый раз при запуске Journey, используя плейсхолдеры. Значение каждого плейсхолдера можно изменить в запросе. Если вам не нужна эта опция, вы можете пропустить этот шаг.

> Например, вы создаете Journey для уведомления подписчиков о выходе нового эпизода подкаста. Используя плейсхолдер, вы можете изменять название подкаста каждый раз при запуске Journey.

Сначала добавьте имена плейсхолдеров в окне настройки входа на основе API. Вы можете использовать любые удобные для вас имена.

<img src="/journey-elements-api-based-entry-2.webp" alt="Добавление имен плейсхолдеров контента в окне настройки входа на основе API"/>

Теперь создайте [пресет пуша](/ru/product/content/push-presets) или [контент email-сообщения](/ru/product/content/email-content/) и вставьте плейсхолдер вместо текста, который вы хотите изменить. Плейсхолдер должен быть в одном из следующих форматов в зависимости от ваших потребностей:

* `{placeholder_name|format_modifier|}` – если значение плейсхолдера не указано при запуске кампании, пользователи увидят на его месте пустое пространство.
* `{placeholder_name|format_modifier}` – если значение плейсхолдера не указано и еще не было присвоено пользователю (в случае, если вы использовали Tag в качестве плейсхолдера), сообщение не будет отправлено.

<details>

<summary>Модификаторы формата</summary>

* **CapitalizeFirst** – делает заглавной первую букву в значении плейсхолдера
* **CapitalizeAllFirst** – делает заглавными первые буквы во всех словах в значении плейсхолдера
* **UPPERCASE** – переключает все буквы в верхний регистр
* **lowercase** – переключает все буквы в нижний регистр
* **regular** – вставляет значение плейсхолдера в точности так, как указано в запросе

</details>

<img src="/journey-elements-api-based-entry-3.webp" alt="Вставка плейсхолдера в пресет пуша для динамического контента"/>

<Aside type="tip">
Вы также можете использовать имя [существующего тега (Tag)](/ru/product/audience-data-and-segmentation/user-data-tags/) вместо имени плейсхолдера. В этом случае вам необходимо настроить перезапись значения этого тега значением, указанным в запросе, как описано ниже.
</Aside>

При настройке элемента Push или Email в вашем Journey выберите созданный пресет и включите опцию **Персонализировать сообщение с помощью атрибутов события**.

Выберите плейсхолдеры, которые вы хотите изменять в запросе при запуске Journey. Выберите **Вход на основе API** в качестве источника и имя плейсхолдера в качестве динамического атрибута:

<video src="/journey-elements-api-based-entry-4.webm" title="Персонализация сообщения с помощью атрибутов события из входа на основе API" autoplay loop muted playsinline />

Нажмите **Применить**, чтобы сохранить изменения.

4. В окне конфигурации входа скопируйте шаблон запроса для его изменения:

<img src="/journey-elements-api-based-entry-5.webp" alt="Копирование шаблона запроса из окна конфигурации входа на основе API"/>
<Aside> 
Чтобы запустить Journey через API, вы должны включить действительный токен авторизации в заголовок `Authorization`.

**Требуемый формат заголовка**

  ```http
  Authorization: Api <your_api_token>
  ```
  **Пример**

  ```http
  Authorization: Api c8dc6435-xxxxxxxxxxxxxxx
  ```
  
 </Aside>


5. Добавьте фильтры аудитории в параметр `"filter"`, используя [язык сегментации](/ru/developer/api-reference/segmentation-filters-api/segmentation-language) или [скопируйте логику сегментации](/ru/product/audience-data-and-segmentation/segmentation/#copy-segment-logic) из ваших сегментов. Заранее настройте необходимые [теги (Tags)](/ru/product/audience-data-and-segmentation/user-data-tags/tags).

Например, чтобы таргетировать пользователей, которые добавили товар _Socks_ в свой _Wishlist_, значение `"filter"` должно выглядеть следующим образом:

`"filter": "A(\"12345-12345\") * "T(\"Wishlist\", EQ, \"Socks\")"`

В этом примере у вас должен быть настроен тег _Wishlist_ в вашем приложении.

<Aside type="note">
Код вашего приложения автоматически добавляется в параметр `"filter"` в формате `A(\"12345-12345\")`. Не удаляйте и не изменяйте его.

Также, пожалуйста, имейте в виду, что кавычки ("") и обратные слэши (\\) должны быть экранированы обратным слэшем (\\) в JSON-запросах.
</Aside>

<Aside type="tip">
Вы также можете таргетировать определенные устройства или пользователей напрямую, передавая массив HWID в параметре `"hwids"` или User ID в параметре `"users"` вместо использования фильтров:

```json
"users": ["user_id_1", "user_id_2", ...],
"hwids": ["hwid_1", "hwid_2", ...]
```
</Aside>

6. Если вы настроили плейсхолдеры, укажите желаемый контент в качестве их значений:

<img src="/journey-elements-api-based-entry-6.webp" alt="Указание значений плейсхолдеров в API-запросе для запуска Journey"/>


7. Если вы планируете часто перезапускать кампанию и не хотите, чтобы одни и те же пользователи входили в Journey несколько раз, установите [ограничения на вход в кампанию](/ru/product/customer-journey/journey-settings#campaign-entry-limit).

> Например, вы создали кампанию для уведомления пользователей о снижении цены на определенный товар. Вы хотите перезапустить Journey несколько раз, отправив несколько запросов с разными фильтрами аудитории. В этом случае вы можете добавить ограничения на вход в кампанию, чтобы уведомление не отправлялось повторно пользователям, которые соответствуют нескольким фильтрам.

8. Если вы хотите, чтобы Journey запускался всякий раз, когда происходит определенное бизнес-событие, автоматизируйте запрос с помощью webhook. Как только событие произойдет, webhook должен автоматически отправить запрос на запуск Journey.

Вы также можете отправить запрос вручную, если вам не нужна автоматизация.

<Aside type="note">
* Если вы измените условия сегментации при отправке нового запроса, это не повлияет на пользователей, которые уже вошли в Journey.
* Если вы измените контент сообщения при отправке нового запроса, все пользователи получат новую версию сообщения (включая тех, кто уже вошел в Journey, но еще не получил это сообщение).
</Aside>