# vebhuki

Источник: https://docs.emdesell.ru/nastroika-servisa/nastroiki/vebhuki

***

[API](https://docs.emdesell.ru/nastroika-servisa/nastroiki/api.md) <--- [Вебхуки](https://docs.emdesell.ru/nastroika-servisa/nastroiki/vebhuki.md) ---> [Прочее](https://docs.emdesell.ru/nastroika-servisa/nastroiki/prochee.md)

***

# Вебхуки

Вебхук — это запрос, который школа сама отправляет на адрес другого сервиса, когда в школе происходит событие: создан аккаунт, оплачен заказ, ученик получил доступ. Так данные попадают в CRM, таблицы и сервисы автоматизации без ручной выгрузки.

Вебхуки доступны только на тарифах **Эксперт** и **Эксперт + WhiteLabel**.

Чтобы другой сервис сам запрашивал данные школы или менял их, используется [API](https://docs.emdesell.ru/nastroika-servisa/nastroiki/api.md).

## Создание вебхука

* Перейдите в раздел **Настройки** → вкладка **API и Вебхуки**
* В параметре **Вебхуки** выберите **Включены**
* Нажмите **Создать вебхук**
* В поле **Название Вебхука** укажите название, например «Оплата в CRM»
* В списке **Событие** выберите, после чего отправлять запрос. Без события вебхук не сохранится
* В поле **Тип запроса | URL** выберите тип запроса и вставьте адрес целиком, например `https://mysystem.ru/emdesell-webhook`. Тип запроса и адрес дает сервис, который принимает данные. Чаще всего это **POST**
* В блоке **Заголовки** нажмите **Добавить** и заполните заголовки, которые требует сервис
* В блоке **Тело запроса** выберите **JSON** или **Form-data** и опишите данные
* Нажмите **Сохранить изменения**

![](https://docs.emdesell.ru/.assets/vebhuki/01.png)

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

## Переменные

Школа отправляет только то, что вы написали в настройках вебхука. Данные события подставляются через переменные в фигурных скобках, например `{email}`. Переменные работают в URL, заголовках и теле запроса.

Кнопка **Доступные переменные** показывает список для выбранного события. Нажатие на переменную копирует ее. Переменная, которая подходит к событию, подсвечивается в поле цветом.

![](https://docs.emdesell.ru/.assets/vebhuki/02.png)

* Время передается числом секунд с 1 января 1970 года (Unix-время)
* Если значения нет, вместо переменной подставляется `null`

Полный список — в конце страницы.

## Пример: оплата в CRM

Вебхук передает в CRM контакт покупателя и сумму после оплаты:

* **Событие** — **Заказ завершен**
* **Тип запроса | URL** — **POST** и адрес из настроек CRM, например `https://mysystem.ru/emdesell-webhook`
* **Заголовки** — `Content-Type`: `application/json`
* **Тело запроса** — **JSON**:

```json
{
  "order_id": {id},
  "email": "{email}",
  "name": "{first_name}",
  "phone": "{phone}",
  "sum": {sum},
  "currency": "{currency}"
}
```

![](https://docs.emdesell.ru/.assets/vebhuki/03.png)

Заголовок `Content-Type` школа сама не добавляет. Без него сервис может не распознать JSON.

Текстовые переменные берите в кавычки, числовые — без кавычек.

В режиме **Form-data** пары параметр и значение добавляются кнопкой **Добавить** и отправляются как обычная форма (`application/x-www-form-urlencoded`). Заголовок для этого режима не нужен.

## Проверка

* Создайте временный адрес в сервисе для приема тестовых запросов, например [https://webhook.site](https://webhook.site), и укажите его в поле **Тип запроса | URL**
* Выполните событие в школе: например, для **Аккаунт создан** создайте тестовый аккаунт
* Посмотрите в сервисе, какой запрос пришел и подставились ли переменные
* Замените адрес на рабочий и нажмите **Сохранить изменения**

## Как отправляются запросы

* Школа ждет ответ сервиса до 5 секунд
* Запрос отправляется один раз. Если сервис был недоступен или ответил ошибкой, повтора не будет, и событие до него не дойдет
* Журнала отправленных запросов в школе нет: смотреть результат нужно на стороне сервиса
* Школа не подписывает запросы. Чтобы сервис мог проверить, что запрос пришел из вашей школы, добавьте в **Заголовки** свой заголовок с секретным значением и проверяйте его на стороне сервиса

## События

| Событие | Когда отправляется |
| --- | --- |
| **Аккаунт создан** | Создан новый аккаунт |
| **Заказ создан** | Создан новый заказ, он еще не оплачен |
| **Заказ завершен** | Заказ оплачен или закрыт |
| **Урок просмотрен** | Ученик впервые открыл урок |
| **ДЗ одобрено** | Домашнее задание ученика одобрено |
| **Тест сдан** | Ученик успешно сдал тест |
| **Доступ получен** | Ученику выдан доступ |
| **Доступ закончился** | У ученика закончился или снят доступ |
| **Вебинар посещен** | Ученик впервые зашел на вебинар |

## Переменные событий

<details>

<summary>Аккаунт создан</summary>

| Переменная | Значение |
| --- | --- |
| `{id}` | ID аккаунта |
| `{email}` | Email аккаунта |
| `{first_name}` | Имя аккаунта |
| `{last_name}` | Фамилия аккаунта |
| `{patronymic}` | Отчество аккаунта |
| `{phone}` | Телефон аккаунта |
| `{extra_data}` | Доп. данные аккаунта |
| `{role}` | Роль аккаунта |
| `{bothelp_cuid}` | Bothelp Cuid аккаунта |
| `{vk_id}` | VK ID аккаунта |
| `{telegram_id}` | Telegram ID аккаунта |
| `{salebot_id}` | Salebot ID аккаунта |
| `{bonus_balance}` | Баланс бонусов аккаунта |

</details>

<details>

<summary>Заказ создан и Заказ завершен</summary>

| Переменная | Значение |
| --- | --- |
| `{id}` | ID заказа |
| `{account_id}` | ID аккаунта |
| `{type}` | Тип заказа |
| `{payment_system}` | Платежная система заказа |
| `{currency}` | Валюта заказа |
| `{sum}` | Сумма заказа |
| `{payment_form_id}` | ID платежной формы |
| `{payment_subscription_id}` | ID подписки |
| `{subscriber_id}` | ID подписчика |
| `{creation_time}` | Время создания заказа |
| `{completion_time}` | Время завершения заказа |
| `{status}` | Статус заказа |
| `{key}` | Ключ |
| `{first_name}` | Имя |
| `{last_name}` | Фамилия |
| `{patronymic}` | Отчество |
| `{email}` | Email |
| `{phone}` | Телефон |
| `{extra_data}` | Доп. данные |
| `{code}` | Код |
| `{promo_code}` | Промокод |
| `{used_bonuses}` | Использованные бонусы |
| `{senler_vk_id}` | Senler VK ID |
| `{bothelp_cuid}` | Bothelp Cuid |
| `{salebot_id}` | Salebot ID |
| `{utm_source}` | UTM Source |
| `{utm_medium}` | UTM Medium |
| `{utm_campaign}` | UTM Campaign |
| `{utm_content}` | UTM Content |
| `{utm_term}` | UTM Term |
| `{payment_method_id}` | ID метода оплаты |
| `{comment}` | Комментарий |
| `{payment_link}` | Ссылка на оплату |

</details>

<details>

<summary>Урок просмотрен</summary>

| Переменная | Значение |
| --- | --- |
| `{lesson_id}` | ID урока |
| `{account_id}` | ID аккаунта |
| `{time}` | Время просмотра |

</details>

<details>

<summary>ДЗ одобрено</summary>

| Переменная | Значение |
| --- | --- |
| `{homework_id}` | ID домашнего задания |
| `{lesson_id}` | ID урока |
| `{account_id}` | ID аккаунта |
| `{time}` | Время одобрения |
| `{creation_time}` | Время создания ДЗ |

</details>

<details>

<summary>Тест сдан</summary>

| Переменная | Значение |
| --- | --- |
| `{test_id}` | ID теста |
| `{lesson_id}` | ID урока |
| `{account_id}` | ID аккаунта |
| `{time}` | Время сдачи |

</details>

<details>

<summary>Доступ получен и Доступ закончился</summary>

| Переменная | Значение |
| --- | --- |
| `{access_id}` | ID доступа |
| `{account_id}` | ID аккаунта |
| `{start_time}` | Время начала доступа |
| `{end_time}` | Время окончания доступа, `0` у бессрочного доступа |

</details>

<details>

<summary>Вебинар посещен</summary>

| Переменная | Значение |
| --- | --- |
| `{webinar_id}` | ID вебинара |
| `{account_id}` | ID аккаунта |
| `{time}` | Время посещения |

</details>

***

[API](https://docs.emdesell.ru/nastroika-servisa/nastroiki/api.md) <--- [Вебхуки](https://docs.emdesell.ru/nastroika-servisa/nastroiki/vebhuki.md) ---> [Прочее](https://docs.emdesell.ru/nastroika-servisa/nastroiki/prochee.md)

***
