# Учетные данные Facebook для запуска рекламы

## Обзор

Для запуска рекламных кампаний в Facebook через Marketing API (ранее Ads API) требуются специальные учетные данные, которые отличаются от простого Access Token для публикации постов.

---

## Необходимые учетные данные

### 1. **Access Token (обязательно)**

Access Token с расширенными разрешениями для управления рекламой.

**Требуемые разрешения (Permissions):**

- `ads_management` - Управление рекламными кампаниями
- `ads_read` - Чтение данных о рекламе
- `business_management` - Управление бизнес-аккаунтом
- `pages_read_engagement` - Чтение данных страниц (опционально)

**Типы токенов:**

- **User Access Token** - краткосрочный (1-2 часа)
- **Long-Lived User Access Token** - долгосрочный (60 дней)
- **Page Access Token** - для управления страницами
- **System User Access Token** - для серверных приложений (рекомендуется для продакшена)

---

### 2. **Ad Account ID (обязательно)**

ID рекламного аккаунта Facebook, в котором будут создаваться кампании.

**Формат:** `act_XXXXXXXXX` (например: `act_123456789`)

**Где найти:**

1. Перейдите в [Facebook Ads Manager](https://business.facebook.com/adsmanager)
2. В настройках аккаунта найдите "Account ID"
3. Или используйте API: `GET /me/adaccounts`

---

### 3. **App ID и App Secret (обязательно для серверных приложений)**

Учетные данные Facebook приложения.

**Где найти:**

1. Перейдите на [Facebook Developers](https://developers.facebook.com/)
2. Выберите ваше приложение
3. В разделе "Settings" → "Basic" найдите:
   - **App ID**
   - **App Secret** (нажмите "Show" для отображения)

**Важно:** App Secret должен храниться в безопасности и никогда не передаваться на клиент.

---

### 4. **Page ID (опционально, но рекомендуется)**

ID страницы Facebook, связанной с рекламным аккаунтом.

**Где найти:**

1. Перейдите на вашу страницу Facebook
2. В настройках страницы найдите "Page ID"
3. Или используйте API: `GET /me/accounts`

---

## Пошаговая инструкция получения учетных данных

### Шаг 1: Создание Facebook приложения

1. Перейдите на [Facebook Developers](https://developers.facebook.com/)
2. Нажмите "My Apps" → "Create App"
3. Выберите тип приложения: **"Business"** или **"Other"**
4. Заполните название и контактный email
5. Нажмите "Create App"

### Шаг 2: Добавление продукта "Marketing API"

1. В панели управления приложением найдите раздел "Add Products"
2. Найдите "Marketing API" и нажмите "Set Up"
3. Следуйте инструкциям для настройки

### Шаг 3: Получение App ID и App Secret

1. В левом меню выберите "Settings" → "Basic"
2. Скопируйте **App ID**
3. Нажмите "Show" рядом с **App Secret** и скопируйте его
4. **Сохраните эти данные в безопасном месте**

### Шаг 4: Настройка разрешений (Permissions)

1. В левом меню выберите "Settings" → "Advanced"
2. Добавьте в "Valid OAuth Redirect URIs" ваш callback URL
3. В разделе "Permissions and Features" запросите:
   - `ads_management`
   - `ads_read`
   - `business_management`
   - `pages_read_engagement`

### Шаг 5: Получение Access Token

#### Вариант A: User Access Token (для тестирования)

1. Перейдите в [Graph API Explorer](https://developers.facebook.com/tools/explorer/)
2. Выберите ваше приложение
3. Нажмите "Generate Access Token"
4. Выберите необходимые разрешения
5. Скопируйте полученный токен

#### Вариант B: Long-Lived Token (для разработки)

```bash
# Обмен краткосрочного токена на долгосрочный
curl -X GET "https://graph.facebook.com/v18.0/oauth/access_token?grant_type=fb_exchange_token&client_id={app-id}&client_secret={app-secret}&fb_exchange_token={short-lived-token}"
```

#### Вариант C: System User Token (для продакшена - рекомендуется)

1. В панели управления приложением перейдите в "Business Settings"
2. Создайте System User
3. Назначьте ему доступ к рекламному аккаунту
4. Сгенерируйте токен для System User

### Шаг 6: Получение Ad Account ID

**Через Ads Manager:**

1. Перейдите в [Facebook Ads Manager](https://business.facebook.com/adsmanager)
2. В настройках аккаунта найдите "Account ID"

**Через API:**

```bash
curl -X GET "https://graph.facebook.com/v18.0/me/adaccounts?access_token={access-token}"
```

Ответ будет содержать массив с `id` в формате `act_XXXXXXXXX`.

---

## Структура учетных данных для вашего API

Для интеграции с вашей системой, учетные данные Facebook для рекламы должны быть сохранены в следующем формате:

### Формат JSON для сохранения credentials

```json
{
  "platform": "facebook_ads",
  "credentials": {
    "accessToken": "EAABwzLix...",
    "adAccountId": "act_123456789",
    "appId": "1234567890123456",
    "appSecret": "your-app-secret-here",
    "pageId": "1234567890123456",
    "tokenType": "LONG_LIVED",
    "expiresAt": "2024-12-31T23:59:59Z"
  }
}
```

### Пример сохранения через API

```javascript
const facebookAdsCredentials = {
  platform: 'facebook_ads',
  credentials: JSON.stringify({
    accessToken: 'EAABwzLix...',
    adAccountId: 'act_123456789',
    appId: '1234567890123456',
    appSecret: 'your-app-secret-here',
    pageId: '1234567890123456',
    tokenType: 'LONG_LIVED',
    expiresAt: '2024-12-31T23:59:59Z',
  }),
};

// Сохранение через ваш API
const response = await fetch('/api/social-media/credentials', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${jwtToken}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(facebookAdsCredentials),
});
```

---

## Требования и ограничения

### Ограничения Facebook Marketing API

1. **Rate Limits:**

   - 200 вызовов в час на пользователя
   - 4800 вызовов в час на приложение

2. **Минимальные требования:**

   - Рекламный аккаунт должен быть активен
   - У пользователя должны быть права администратора на аккаунте
   - Приложение должно пройти ревью Facebook (для продакшена)

3. **Версия API:**
   - Текущая версия: v18.0
   - Facebook регулярно обновляет API, следите за изменениями

### Безопасность

1. **Никогда не храните App Secret в открытом виде**
2. **Используйте шифрование для хранения credentials** (ваша система уже использует шифрование)
3. **Регулярно обновляйте токены** (Long-Lived токены истекают через 60 дней)
4. **Используйте System User Token для продакшена** вместо User Token

---

## Проверка учетных данных

### Проверка Access Token

```bash
curl -X GET "https://graph.facebook.com/v18.0/me?access_token={access-token}"
```

Если токен валиден, вы получите информацию о пользователе.

### Проверка доступа к Ad Account

```bash
curl -X GET "https://graph.facebook.com/v18.0/{ad-account-id}?access_token={access-token}&fields=id,name,account_id"
```

Если доступ есть, вы получите информацию об аккаунте.

### Проверка разрешений

```bash
curl -X GET "https://graph.facebook.com/v18.0/me/permissions?access_token={access-token}"
```

Проверьте, что в ответе есть:

- `ads_management` со статусом `granted`
- `ads_read` со статусом `granted`
- `business_management` со статусом `granted`

---

## Примеры использования для создания рекламной кампании

### Создание кампании

```bash
curl -X POST "https://graph.facebook.com/v18.0/{ad-account-id}/campaigns" \
  -d "name=Test Campaign" \
  -d "objective=OUTCOME_TRAFFIC" \
  -d "status=PAUSED" \
  -d "access_token={access-token}"
```

### Создание Ad Set

```bash
curl -X POST "https://graph.facebook.com/v18.0/{ad-account-id}/adsets" \
  -d "name=Test Ad Set" \
  -d "campaign_id={campaign-id}" \
  -d "billing_event=IMPRESSIONS" \
  -d "optimization_goal=REACH" \
  -d "bid_amount=100" \
  -d "daily_budget=1000" \
  -d "targeting={'geo_locations':{'countries':['KZ']}}" \
  -d "access_token={access-token}"
```

---

## Обновление токенов

Access Token имеет срок действия. Для автоматического обновления:

1. **Отслеживайте срок действия токена** (`expiresAt`)
2. **Используйте refresh token** (если доступен)
3. **Или запросите новый токен** перед истечением старого

### Обмен краткосрочного токена на долгосрочный

```javascript
async function exchangeToken(shortLivedToken, appId, appSecret) {
  const response = await fetch(
    `https://graph.facebook.com/v18.0/oauth/access_token?grant_type=fb_exchange_token&client_id=${appId}&client_secret=${appSecret}&fb_exchange_token=${shortLivedToken}`
  );

  const data = await response.json();
  return {
    accessToken: data.access_token,
    expiresIn: data.expires_in, // в секундах
    expiresAt: new Date(Date.now() + data.expires_in * 1000).toISOString(),
  };
}
```

---

## Рекомендации

1. **Для разработки:** Используйте Long-Lived User Access Token
2. **Для продакшена:** Используйте System User Access Token
3. **Храните credentials в зашифрованном виде** (ваша система уже это делает)
4. **Реализуйте автоматическое обновление токенов**
5. **Логируйте все операции с рекламой** для отладки
6. **Обрабатывайте ошибки API** (rate limits, invalid tokens, etc.)

---

## Полезные ссылки

- [Facebook Marketing API Documentation](https://developers.facebook.com/docs/marketing-apis)
- [Facebook Graph API Explorer](https://developers.facebook.com/tools/explorer/)
- [Facebook Business Settings](https://business.facebook.com/settings)
- [Facebook Ads Manager](https://business.facebook.com/adsmanager)
- [Access Token Debugger](https://developers.facebook.com/tools/debug/accesstoken/)

---

## Поддержка

При возникновении проблем с получением или использованием учетных данных:

1. Проверьте документацию Facebook Marketing API
2. Используйте [Access Token Debugger](https://developers.facebook.com/tools/debug/accesstoken/) для проверки токена
3. Убедитесь, что все разрешения запрошены и одобрены
4. Проверьте, что рекламный аккаунт активен и имеет необходимые права
