# Як налаштувати webhook панелі оператора

Webhook панелі оператора дозволяє отримувати події з операторської панелі (створення чату, підключення оператора, закриття чату) на ваш зовнішній сервіс. Це корисно для синхронізації статусів діалогів з CRM системою або логування подій.


## Коли використовувати webhook панелі оператора?

Webhook панелі оператора підходить для таких кейсів:

- Потрібно відстежувати події в операторській панелі (створення чату, підключення оператора)
- Потрібно синхронізувати статуси діалогів з вашою CRM системою
- Потрібно логувати події операторської панелі в зовнішню систему
- Потрібно інтегрувати з системою аналітики

## Налаштування

### Крок 1: Вкажіть webhook URL в action

У action `operator_panel__connect_to_operator_with_msg` вкажіть параметр `event_webhook_url`.

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

```json
{
  "auto_connect_operator": true,
  "subject_alias": "support",
  "event_webhook_url": "https://your-service.com/webhook/operator-events"
}
```

### Крок 2: Налаштуйте обробку на вашому сервісі

Ваш сервіс повинен:

1. Приймати POST запити на вказаний URL
2. Перевіряти автентичність запиту (якщо необхідно)
3. Обробляти різні типи подій
4. Повертати статус код 200 для успішної обробки

**Приклад обробки (Node.js):**

```javascript
app.post('/webhook/operator-events', (req, res) => {
  const event = req.body;
  
  switch (event.event_name) {
    case 'chat_created':
      // Обробка створення чату
      console.log('Chat created:', event.chat_id);
      break;
    case 'operator_connected':
      // Обробка підключення оператора
      console.log('Operator connected:', event.operator.id);
      break;
    case 'chat_closed':
      // Обробка закриття чату
      console.log('Chat closed:', event.chat_id);
      break;
  }
  
  res.status(200).json({ status: 'ok' });
});
```

## Типи подій

На вказану URL адресу будуть пересилатися наступні події:

- `chat_created` — чат створено
- `auto_connected` — авто-під'єднання оператора
- `operator_connected` — оператор під'єднався
- `operator_disconnected` — оператор від'єднався
- `chat_closed_by_operator` — чат закрито оператором
- `chat_closed` — чат закрито
- `chat_closed_by_timeout` — чат закрито за таймаутом
- `connection_timeout` — таймаут з'єднання
- `delegate_chat_on_skill_group` — передача діалогу до іншої скіл-групи
- `chat_transferred_to_operator` — передача діалогу іншому оператору

## Формат подій

Формат подій такий самий як у Custom Channel. Всі події містять поля `text` та `event_name`.

### Приклад події `chat_created`

```json
{
  "reply_markup": {
    "remove_keyboard": false
  },
  "chat_id": "34122",
  "text": "Chat created",
  "event_name": "chat_created",
  "client": {
    "id": 572338,
    "first_name": "Test",
    "last_name": "Surname",
    "username": "testuername",
    "language_code": "uk",
    "phone": "+380505776464",
    "channel": "telegram"
  },
  "id": "83317aa1-8ea4-4c05-afed-d7437ff88fbf",
  "from": "bot",
  "bot_id": 4,
  "type": "text"
}
```

### Приклад події `operator_connected`

```json
{
  "reply_markup": {
    "remove_keyboard": true
  },
  "chat_id": "34122",
  "text": "Operator connected",
  "event_name": "operator_connected",
  "client": {
    "id": 572338,
    "first_name": "Test",
    "last_name": "Surname",
    "username": "testuername",
    "language_code": "uk",
    "phone": "+380505776464",
    "channel": "telegram"
  },
  "operator": {
    "id": 25,
    "first_name": "Root",
    "last_name": "Admin",
    "avatar_img": "https://example.com/avatar.png",
    "role": "admin",
    "kw_user.email": "operator@example.com"
  },
  "id": "baebdeec-e7b7-4188-bd1d-409f4133507f",
  "from": "bot",
  "bot_id": 4,
  "type": "text"
}
```

## Відмінності від Custom Channel

**Webhook панелі оператора:**
- Налаштовується безпосередньо в action `operator_panel__connect_to_operator_with_msg`
- Відправляє тільки події з операторської панелі
- Не потребує окремого налаштування каналу

**Custom Channel:**
- Потребує налаштування каналу в налаштуваннях бота
- Відправляє всі повідомлення та події
- Більш гнучкий для повноцінної інтеграції

## Обмеження

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

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

- [Інтеграція через Custom Channel](/uk/integrations/how-to/custom-channel/integrate-via-custom-channel.md)
- [Що таке інтеграції](/uk/integrations/explanation/what-are-integrations.md)
- [Підключення чату з оператором](/uk/operatorline/explanation/connect-chat-to-operator.md) — налаштування підключення до оператора
