# Як налаштувати відправку Viber/SMS через Infobip

Infobip дозволяє відправляти текстові повідомлення через Viber та SMS. Це корисно для автоматизації комунікацій із клієнтами, наприклад, для підтвердження замовлень, сповіщень про акції, або іншої важливої інформації.

> 📖 **Документація:** Детальніше про Infobip API читайте на [офіційному сайті](https://www.infobip.com/docs/api).

## Передумови

- Активний обліковий запис Infobip
- API-ключ від Infobip
- Зареєстрований Sender Name для Viber (якщо використовуєте Viber)

## Отримання API ключа

1. Увійдіть у [панель управління Infobip](https://www.infobip.com/)
2. Перейдіть до розділу **API Keys**
3. Створіть новий API-ключ
4. Скопіюйте отриманий ключ

## Налаштування Sender Name для Viber

1. У панелі Infobip перейдіть до розділу **Viber Sender Names**
2. Зареєструйте унікальне ім'я відправника (зазвичай це назва вашої компанії)
3. Очікуйте на схвалення (може зайняти деякий час)

## Створення action для Infobip

Для відправки повідомлень через Infobip потрібно створити кастомний action через Action Jail.

### Приклад коду action

```javascript
const axios = require('axios');

// Константи для налаштування API
const API_KEY = 'YOUR_API_KEY'; // Ваш API-ключ Infobip
const SENDER_NAME = 'DemoCompany'; // Ім'я відправника для Viber
const BASE_URL = 'https://api.infobip.com'; // Базовий URL для Infobip
const API_PATH = '/viber/2/messages'; // Шлях для відправлення повідомлень

const action_infobip_send_message = async function() {
    const j = this.getCurrentStateJSON();
    if (!j || typeof j !== 'object') {
        console.error("Error: JSON data is invalid or not an object.");
        return "error";
    }

    const message = (j.message || '').trim();
    const to = (j.to || '').trim();

    if (!message || !to) {
        console.error("Error: 'message' or 'to' is missing in the JSON data.");
        return "error";
    }

    const options = {
        method: 'POST',
        url: `${BASE_URL}${API_PATH}`,
        headers: {
            'Authorization': `App ${API_KEY}`,
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        },
        data: {
            messages: [
                {
                    sender: SENDER_NAME,
                    destinations: [{ to }],
                    content: {
                        text: message,
                        type: "TEXT"
                    }
                }
            ]
        }
    };

    try {
        const response = await axios(options);
        console.log("Response from Infobip:", response.data);
        return "success";
    } catch (error) {
        console.error("Error sending message:", error.response?.data || error.message);
        return "error";
    }
};

module.exports = action_infobip_send_message;
```

## Використання в сценарії

### Підготовка даних

Перед викликом action встановіть змінні в state:

```json
{
  "message": "Ваше замовлення #123 відправлено!",
  "to": "380971234567"
}
```

**Параметри:**
- `message` — текст повідомлення, який потрібно надіслати
- `to` — номер телефону отримувача у міжнародному форматі (без знаку `+`)

### Обробка результату

**Успіх (`success`):**
- Якщо повідомлення успішно відправлено, action повертає `"success"`
- У сценарії можна додати наступні дії (логікування, оновлення статусу тощо)

**Помилка (`error`):**
- Якщо виникла помилка, action повертає `"error"`
- У сценарії слід передбачити обробку помилок (повідомлення адміністратора, повторна спроба тощо)

## Відправка SMS через Infobip

Для відправки SMS використовується інший endpoint:

```javascript
const smsOptions = {
    method: 'POST',
    url: `${BASE_URL}/sms/2/text/single`,
    headers: {
        'Authorization': `App ${API_KEY}`,
        'Content-Type': 'application/json'
    },
    data: {
        from: SENDER_NAME,
        to: to,
        text: message
    }
};
```

## Обмеження

- Viber повідомлення мають обмеження на довжину тексту
- Номер телефону повинен бути в міжнародному форматі
- Sender Name повинен бути зареєстрований в Infobip
- Rate limiting може застосовуватися залежно від тарифного плану Infobip

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

- [Infobip API Documentation](https://www.infobip.com/docs/api) — офіційна документація Infobip
- [Створити кастомний action](/uk/actionjail/how-to/admin-manage-actions.md) — створення кастомних actions через ActionJail
