# Шаблон виклику через HTTP

## 1. Отримання авторизації (токен OAuth2)

Перш ніж викликати будь-які функціональні API, необхідно обміняти свої облікові дані на **токен доступу JWT**.

* **Кінцева точка:** `POST https://api.morelogin.com/oauth2/token`
* **Офіційна документація:** [Шлях авторизації](https://guide.morelogin.com/api-reference/open-api/open-api/authorization/paths/~1oauth2~1token/post)


### Запит (cURL)

```bash
curl -i -X POST \
  https://api.morelogin.com/oauth2/token \
  -H 'Content-Type: application/json' \
  -d '{
    "client_id": 1672940217990530,
    "client_secret": "your_client_secret",
    "grant_type": "client_credentials"
  }'
```

### Приклад відповіді

```json
{
    "code": 0,
    "data": {
        "access_token": "eyJhbGciOiJIUzI1NiIsIn...",
        "token_type": "Bearer",
        "expires_in": 3600
    }
}
```

## 2. Виконання шаблону хмарного телефону

Використовуйте access_token, отриманий на кроці 1, для запуску певного шаблону RPA.

* **Кінцева точка:** `POST https://api.morelogin.com/cloudphone/rpa/onceTask/save`
* **Офіційна документація:** [Шлях виконання розкладу](https://guide.morelogin.com/api-reference/open-api/open-api/cloud-phoneschedules-management/paths/~1cloudphone~1rpa~1oncetask~1save/post)


### Запит (cURL)

```bash
curl -i -X POST \
  https://api.morelogin.com/cloudphone/rpa/onceTask/save \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "cloudPhoneId": 16783319661123,
    "scheduleName": "test_automation",
    "templateId": 1678347487160256,
    "templateParameter": "{\"Video Caption\": \"Hello World\", \"AI Label\": true}",
    "description": "schedule description"
  }'
```

## 3. Розподіл параметрів

### Як отримати ідентифікатори?

* **Авторизація:** Отримано через кінцеву точку `/oauth2/token`.
* **cloudPhoneId:** Знаходиться на інформаційній панелі MoreLogin Cloud Phone (числовий ідентифікатор).
* **templateId:** Знаходиться на ринку шаблонів автоматизації або у списку особистих шаблонів.


### Розуміння templateParameter

Це рядковий об'єкт JSON. Ви повинні визначити ключі на основі вимог шаблону, а потім екранувати їх як рядок.

**Приклад визначення шаблону:**

```json
{
    "Video Caption": "string",
    "AI Label": "boolean",
    "Product Id": "number",
    "Get Leads": "boolean",
    "Comment": "string"
}
```

**Як відобразити це у вашому запиті:**

Щоб передати значення для вищезазначеного визначення, значення вашого templateParameter має виглядати так:

```json
{
    "templateParameter": "{\"Video Caption\": \"My Title\", \"AI Label\": true, \"Product Id\": 12345}"
}
```

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

| Стан | Можлива причина |
|  --- | --- |
| 401 Неавторизовано | Термін дії токена минув або недійсні облікові дані клієнта. |
| 400 Неправильний запит | Недійсний cloudPhoneId або неправильно сформований JSON у templateParameter. |
| 404 Не знайдено | TemplateId не існує. |


## Швидкий старт Python

```python
import requests
import json

def run_morelogin_task():
    # 1. Auth
    auth_res = requests.post(
        "https://api.morelogin.com/oauth2/token",
        json={
            "client_id": 1672940217990530,
            "client_secret": "your_secret",
            "grant_type": "client_credentials"
        }
    )
    token = auth_res.json()['data']['access_token']

    # 2. Execute
    task_payload = {
        "cloudPhoneId": 16783319661123,
        "templateId": 1678347487160256,
        "templateParameter": json.dumps({
            "Video Caption": "My Post",
            "AI Label": True
        })
    }
    
    headers = {"Authorization": f"Bearer {token}"}
    response = requests.post(
        "https://api.morelogin.com/cloudphone/rpa/onceTask/save",
        json=task_payload,
        headers=headers
    )
    return response.json()

print(run_morelogin_task())
```