# Як налаштувати підписку користувача на нотифікації

Згідно політики месенджерів, боти не можуть відправляти повідомлення першими. Для того, щоб користувач міг отримувати нотифікації із боту, він повинен спочатку взаємодіяти з ботом та відправити йому будь-яке початкове повідомлення.

## Як працює підписка?

1. Користувач натискає кнопку на сайті/в застосунку "хочу отримувати повідомлення в месенджер"
2. Відкривається посилання на бота з параметрами (deeplink)
3. Користувач натискає "Почати" в месенджері
4. Бот повертає `chat_id` та `channel` назад в застосунок через action `send_me`
5. Тепер можна відправляти нотифікації користувачу через API `call_node`

## Створення кнопки підписки

На стороні сайту/застосунку створіть кнопку "хочу отримувати повідомлення в месенджер" (або "слідкувати за статусом замовлення в месенджері", "вибрати канал підтримки" тощо).

В цій кнопці стартовий параметр може містити:
- `customer_id` клієнта у вашій CRM/ERP
- ID замовлення
- Інші дані для ідентифікації

> 📖 **Документація:** Детальніше про deeplink читайте в [Запуск сценарію через deeplink](/uk/integrations/explanation/deeplink-launch.md).

## Повернення chat_id та channel

Після першого повідомлення від користувача (наприклад, натискання кнопки "Почати" в Telegram), бот повинен повернути назад в застосунок (сайт, CRM, тощо) пару параметрів:

- `chat_id` — унікальний в межах месенджера ID чату (зазвичай букво-символьна строка)
- `channel` — назва каналу (telegram, viber, facebook тощо)

В ConnectiveOne для цього існує спеціальний action `send_me`.


## Конфігурація action send_me

В налаштуваннях цієї дії прописується:

- `url` — адреса на яку відправити запит
- `method` — метод відправлення запиту (GET, POST)
- `data` — додаткові параметри для відправки, можуть містити плейсхолдери, наприклад `{{messenger_input_param}}`
- `headers` — заголовки запиту

## Автоматичні параметри

Action `send_me` автоматично додає до даних запиту:

- `chat_id` — ідентифікатор чату користувача
- `channel` — канал комунікації (telegram, viber, facebook тощо)

Ці параметри не потрібно вказувати в конфігурації — вони додаються автоматично.

## Приклад конфігурації

```json
{
  "url": "https://your-crm.com/api/webhook/chat-registered",
  "method": "POST",
  "data": {
    "customer_id": "{{messenger_input_param}}",
    "user_name": "{{user_name}}"
  },
  "headers": {
    "Authorization": "Bearer YOUR_TOKEN",
    "Content-Type": "application/json"
  }
}
```

**Результат запиту:**

```json
{
  "customer_id": "12345",
  "user_name": "Іван",
  "chat_id": "398866372",
  "channel": "telegram"
}
```

## Можливі варіанти розгалуження подіями

- `"ok"` — запит успішно відправлено
- `"not_ok"` — помилка при відправці запиту

## Обробка помилок

Якщо запит завершився помилкою, action повертає `"not_ok"`. В сценарії можна обробити цю подію для:

- Повторної спроби
- Відправки повідомлення користувачу
- Логування помилки

## Відправка нотифікацій після підписки

Після того, як ви отримали `chat_id` та `channel`, ви можете відправляти нотифікації користувачу через API `call_node`.

> 📖 **Документація:** Детальніше читайте в [Запуск сценарію через API call_node](/uk/integrations/how-to/launch-scenario-via-call-node.md).

## Обмеження

- URL повинен бути доступним з сервера ConnectiveOne
- Підтримуються тільки HTTP та HTTPS протоколи
- Timeout запиту залежить від налаштувань системи

## Важливі примітки

> ⚠️ **Примітка:** При використанні deeplink'а Facebook, Viber передається команда `start`. Враховуйте це, якщо ви використовуєте розгалуження сценарію з допомогою action'а `get_command`.

Якщо вам не потрібно використовувати в боті ID користувача в зовнішній системі (наприклад ідентифікувати), ви можете не передавати ніяких параметрів, а просто відправляти користувача в бот робити перші кроки та зберігати chat_id + канал в CRM/застосунку.

## Пов'язані статті

- [Запуск сценарію через deeplink](/uk/integrations/explanation/deeplink-launch.md)
- [Запуск сценарію через API call_node](/uk/integrations/how-to/launch-scenario-via-call-node.md)
- [Що таке інтеграції](/uk/integrations/explanation/what-are-integrations.md)
