# Главная

Документация для разработчиков

Интеграция с WatBot позволяет отправлять сообщения вашим клиентам, не заботясь, с какого мессенджера обратился клиент, а так же многое другое. В этом документе собраны описания основных сценариев с примерами кода.


# Основы

Для доступа к API необходимо подключить соответствующий тарифный план.&#x20;

В каждом запросе API необходимо отправлять токен в GET-параметре `api_token`.Токен вы можете получить в разделе <https://watbot.ru/account/api>.

```http
https://watbot.ru/api/v1/method?api_token=Ваш API token
```

Так же необходимо передавать следующий заголовок:

```
Accept:application/json
```

## Лимиты

К API сервиса WatBot разрешено делать не более 2 запросов в секунду (120 запросов в минуту). Иначе API будет возвращать ошибку `429 Too Many Requests` Так же на некоторые методы могут накладываться свои ограничения.

{% hint style="danger" %}
Запрещено хранить токен в открытом виде, например в клиентских приложениях, где любой желающий может посмотреть этот токен.
{% endhint %}

## ID бота

В некоторых методах API необходимо отправлять ID бота, на рисунке изображено где его найти.

![ID бота = 1](https://4152861189-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LfZGuokAo0CKridiMMF%2F-LrIqO5gLjfRqnE8ENuO%2F-LrIqtqFVp0_Z3Ogjf9C%2Fimage.png?alt=media\&token=601d9244-ce2f-4eaf-95b3-23b47cf016e3)


# Аккаунт

## Информация о своем аккаунте

<mark style="color:blue;">`GET`</mark> `https://watbot.ru/api/v1/getMe`

Это простой метод позволяет тестировать ваш токен.

{% tabs %}
{% tab title="200 Запрос успешно обработан." %}

```javascript
{
  "data": {
    "id": 1,
    "name": "Дмитрий",
    "phone": null,
    "email": "dmitriy@example.com",
    "created_at": "2019-01-08T16:56:07+00:00"
  }
}
```

{% endtab %}
{% endtabs %}


# Сообщения

## Отправить сообщение

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/sendMessage`

Этот метод позволяет отправить сообщение по ID контакта.

#### Query Parameters

| Name        | Type    | Description      |
| ----------- | ------- | ---------------- |
| file        | string  | URL на файл.     |
| image       | string  | URL на картинку. |
| contact\_id | integer | ID контакта.     |
| text        | string  | Сообщение.       |

{% tabs %}
{% tab title="200 Сообщение успешно отправлено." %}

```javascript
{
    "success": true
}
```

{% endtab %}

{% tab title="403 Доступ запрещен." %}

```javascript
{
    "message": "Forbidden"
}
```

{% endtab %}

{% tab title="422 Переданные данные некорректны." %}

```javascript
{
  "message": "The given data was invalid.",
  "errors": {
    "contact_id": [
      "Поле contact id обязательно для заполнения, когда messenger \/ bot id \/ contact external id не указано."
    ],
    "text": [
      "Поле text обязательно для заполнения, когда ни одно из image \/ file не указано."
    ],
    "image": [
      "Поле image обязательно для заполнения, когда ни одно из text \/ file не указано."
    ],
    "file": [
      "Поле file обязательно для заполнения, когда ни одно из text \/ image не указано."
    ],
    "messenger": [
      "Поле messenger обязательно для заполнения, когда contact id не указано."
    ],
    "bot_id": [
      "Поле bot id обязательно для заполнения, когда contact id не указано."
    ],
    "contact_external_id": [
      "Поле contact external id обязательно для заполнения, когда contact id не указано."
    ]
  }
}
```

{% endtab %}

{% tab title="429 Превышен лимит отправки сообщений." %}

```javascript
{
    "error": "Достигнут лимит отправки сообщений для whatsapp"
}
```

{% endtab %}

{% tab title="501 Отправка для мессенджера еще контакта не реализована. " %}

```
{
    "error": "На данный момент не реализована отправка сообщений в мессенджер контакта"
}
```

{% endtab %}
{% endtabs %}

## Отправить сообщение по внешнему ID

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/sendMessage`

Этот метод позволяет отправить сообщение по номеру телефона или по внешнему ID контакта в мессенджере или социальной сети.

#### Query Parameters

| Name                  | Type    | Description                                           |
| --------------------- | ------- | ----------------------------------------------------- |
| file                  | string  | URL на файл.                                          |
| image                 | string  | URL на картинку.                                      |
| bot\_id               | integer | ID бота контакта                                      |
| contact\_external\_id | string  | Номер телефона или внешний id контакта в мессенджере. |
| messenger             | string  | ID мессенджера.                                       |
| text                  | string  | Сообщение.                                            |

{% tabs %}
{% tab title="200 Сообщение успешно отправлено." %}

```javascript
{
    "success": true
}
```

{% endtab %}

{% tab title="403 Доступ запрещен." %}

```javascript
{
    "message": "Forbidden"
}
```

{% endtab %}

{% tab title="422 Переданные данные некорректны." %}

```javascript
{
  "message": "The given data was invalid.",
  "errors": {
    "contact_id": [
      "Поле contact id обязательно для заполнения, когда messenger \/ bot id \/ contact external id не указано."
    ],
    "text": [
      "Поле text обязательно для заполнения, когда ни одно из image \/ file не указано."
    ],
    "image": [
      "Поле image обязательно для заполнения, когда ни одно из text \/ file не указано."
    ],
    "file": [
      "Поле file обязательно для заполнения, когда ни одно из text \/ image не указано."
    ],
    "messenger": [
      "Поле messenger обязательно для заполнения, когда contact id не указано."
    ],
    "bot_id": [
      "Поле bot id обязательно для заполнения, когда contact id не указано."
    ],
    "contact_external_id": [
      "Поле contact external id обязательно для заполнения, когда contact id не указано."
    ]
  }
}
```

{% endtab %}

{% tab title="429 Превышен лимит отправки сообщений." %}

```javascript
{
    "error": "Достигнут лимит отправки сообщений для whatsapp"
}
```

{% endtab %}
{% endtabs %}

&#x20;Поле `messenger` может принимать следующие значения:

* `whatsapp`
* `telegram`
* `viber`
* `vk`
* `max`

В поле `contact_external_id` можно передавать номер телефона не только для мессенджера WhatsApp но и для других, если к контакту привязан номер. Привязка номера может произойти при первом платеже вашего клиента или с помощью специального блока — "Запрос номера телефона".&#x20;

{% hint style="warning" %}
Ваш `contact_external_id`должен быть в контактах у бота, для этого напишите боту с нужного мессенджера. Отправка на произвольный номер возможна  только через мессенджер WhatsApp через метод `sendMessageToWhatsApp` (см. ниже).
{% endhint %}

### Лимиты

Для отправки сообщений установлены следующие ограничения:

| Мессенджер | Количество сообщений за 10 сек. |
| ---------- | ------------------------------- |
| WhatsApp   | 1                               |
| Telegram   | 10                              |
| Viber      | 10                              |
| Max        | 10                              |

## Отправить сообщение в WhatsApp

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/sendMessageToWhatsApp`

Этот метод позволяет отправить сообщение на WhatsApp по номеру  телефона.

#### Request Body

| Name    | Type    | Description                                                                       |
| ------- | ------- | --------------------------------------------------------------------------------- |
| bot\_id | integer | ID бота контакта.                                                                 |
| phone   | string  | Номер телефона                                                                    |
| text    | string  | Сообщение                                                                         |
| name    | string  | Имя контакта, необходимо отправлять когда вы пишите данному контакту в первый раз |

{% tabs %}
{% tab title="200 " %}

```javascript
{
    "data": {
          "id": 1,
          "phone": "79991234567",
          "name": "Иван Иванов",
          "messenger": "whatsapp",
          "created_at": "2019-05-10T10:38:28+00:00"
    }
}
```

{% endtab %}
{% endtabs %}

Ограничение: не больше 1-го сообщения в секунду.


# Рассылка

Все отправленные сообщения добавляются в очередь и отправляются согласно лимитам в мессенджерах.

## Отправить текстовое сообщение

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/sendMessageToQueue`

#### Request Body

| Name                | Type    | Description                                                                                 |
| ------------------- | ------- | ------------------------------------------------------------------------------------------- |
| message\_id         | string  | Уникальный id сообщения                                                                     |
| text                | string  | Текст сообщения                                                                             |
| contact\_id         | integer | ID контакта Watbot. Обязательный параметр когда `bitrix_contact_id` и `phone` не переданы.  |
| bitrix\_contact\_id | integer | ID контакта Битрикса. Обязательный параметр когда `contact_id` и `phone` не переданы.       |
| phone               | string  | Номер телефона. Обязательный параметр когда `bitrix_contact_id` и `contact_id` не переданы. |

{% tabs %}
{% tab title="201 Сообщение успешно добавлено в очередь на отправку" %}

```
```

{% endtab %}
{% endtabs %}


# Контакты

## Получить список контактов

<mark style="color:blue;">`GET`</mark> `https://watbot.ru/api/v1/getContacts`

Этот метод позволяет получить список контактов указанного бота.

#### Path Parameters

| Name       | Type    | Description                                                    |
| ---------- | ------- | -------------------------------------------------------------- |
| date\_from | integer | Фильтр по дате создания контакта в формате Unix Time           |
| date\_to   | integer | Фильтр по дате создания контакта в формате Unix Time           |
| count      | integer | Количество контактов для получения. Максимальное значение: 500 |
| bot\_id    | integer | ID бота.                                                       |
| page       | integer | Порядковый номер страницы                                      |

{% tabs %}
{% tab title="200 Запрос успешно обработан." %}

```javascript
{
  "data": [
    {
      "id": 1,
      "bot_id": 1,
      "phone": "79991234567",
      "email": "info@example.com",
      "name": "Иван Иванов",
      "messenger": "whatsapp",
      "address": "г. Москва, ул. Пушкина, д. 5",
      "utm": {
        "utm_source": "landing",
        "utm_medium": "...",
        "utm_campaign": "...",
        "utm_term": "...",
        "utm_content": "..."
      },
      "created_at": "2019-05-10T10:38:28+00:00"
    },
    {
      "id": 2,
      "bot_id": 1,
      "phone": "792712312321",
      "email": null,
      "name": "Петр Петров",
      "messenger": "telegram",
      "telegram_id": "123456",
      "telegram_username": "superman",
      "address": null,
      "utm": null,
      "created_at": "2019-04-02T12:16:16+00:00"
    },
    {
      "id": 3,
      "bot_id": 2,
      "phone": null,
      "email": null,
      "name": "Василий Васильев",
      "messenger": "viber",
      "viber_id": "1123456789dD20=",
      "address": null,
      "utm": null,
      "created_at": "2019-05-11T15:31:34+00:00"
    },
  ],
  "links": {
    "first": "http:\/\/watbot.ru\/api\/v1\/getContacts?page=1",
    "last": "http:\/\/watbot.ru\/api\/v1\/getContacts?page=1",
    "prev": null,
    "next": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "path": "http:\/\/watbot.ru\/api\/v1\/getContacts",
    "per_page": 500,
    "to": 3,
    "total": 3
  }
}
```

{% endtab %}
{% endtabs %}

## Создать или обновить контакт

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/createOrUpdateContact`

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

#### Request Body

| Name                                        | Type    | Description                                                                                                 |
| ------------------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------- |
| bot\_id<mark style="color:red;">\*</mark>   | integer | ID бота.                                                                                                    |
| messenger<mark style="color:red;">\*</mark> | string  | Тип мессенджера. Возможные значения: `whatsapp`, `telegram`, `viber`, `vk`                                  |
| name<mark style="color:red;">\*</mark>      | string  | Имя контакта                                                                                                |
| email                                       | string  | Email контакта                                                                                              |
| address                                     | string  | Адрес контакта                                                                                              |
| phone                                       | string  | Номер телефона контакта в международном формате (+79991234567). Обязателен когда `messenger == "whatsapp"`. |
| telegram\_id                                | int     | ID пользователя в Телеграм.  Обязателен когда `messenger == "telegram"`                                     |
| telegram\_username                          | string  | Username пользователя Телеграм                                                                              |
| viber\_id                                   | string  | ID пользователя в Viber.  Обязателен когда `messenger == "viber"`                                           |
| vk\_id                                      | int     | ID пользователя в ВКонтакте.  Обязателен когда `messenger == "vk"`                                          |
| tags                                        | array   | Массив тегов контакта. Пример: \["Тег 1", "Тег 2"]                                                          |

{% tabs %}
{% tab title="200 Запрос успешно обработан." %}

```javascript
{
  "data": {
      "id"                => 1,
      "bot_id"            => 1,
      'phone"             => "79991234567",
      'email"             => "mail@example.com",
      'name"              => "Ivan Ivanov",
      'address"           => "Moscow",
      'messenger"         => "whatsapp",
      'utm"               => [],
      'avatar:            => null,
      'telegram_id"       => null,
      'telegram_username" => null,
      'vk_user_id"        => null,
      'viber_id"          => null,
      'created_at"        => "2019-05-10T10:38:28+00:00"
      'unsubscribed_at"   => null,
      'tags'              => ["Тег 1", "Тег 2"],
      'variables'         => [],
  }
}
```

{% endtab %}
{% endtabs %}

## Установить статус для контакта в Ysell

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/setYsellStatus`

Этот метод позволяет установить статус Ysell для указанного контакта.

#### Request Body

| Name                                          | Type    | Description                   |
| --------------------------------------------- | ------- | ----------------------------- |
| contact\_id<mark style="color:red;">\*</mark> | integer | ID контакта.                  |
| status<mark style="color:red;">\*</mark>      | string  | Статус. Не более 64 символов. |

{% tabs %}
{% tab title="204: No Content Статус обновлен" %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}


# Реферальная система

С помощью представленных методов вы можете получить информацию о рефералах, реферерах вашего контакта.

{% hint style="info" %}
**Реферер** – пользователь стоящий выше, тот кто пригласил в реферальную программу.

**Реферал** – пользователь стоящий ниже, тот кого пригласили в реферальную программу.
{% endhint %}

## Получить рефереры контакта

<mark style="color:blue;">`GET`</mark> `https://watbot.ru/api/v1/getReferrers`

Этот метод позволяет получить список или дерево рефереров контакта.

#### Path Parameters

| Name        | Type    | Description                                                                                                                               |
| ----------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| contact\_id | integer | ID контакта.                                                                                                                              |
| depth       | integer | Глубина дерева, мин. 1, макс. 10.                                                                                                         |
| is\_flat    | boolean | По умолчанию вы получаете информацию в виде дерева, если укажите значение этого поля в `1`, то информация придет в виде списка рефереров. |

{% tabs %}
{% tab title="200 Запрос успешно обработан. Результат в виде дерева, включая текущий контакт." %}

```
{
  "data": {
    "id": 3,
    "name": "Иван Иванов",
    "messenger": "telegram",
    "created_at": "2019-05-10T10:38:28+00:00",
    "referrer": {
      "id": 2,
      "name": "Петр Петров",
      "messenger": "telegram",
      "created_at": "2019-05-10T10:38:25+00:00",
      "referrer": {
        "id": 1,
        "name": "Василий Васильев",
        "messenger": "telegram",
        "created_at": "2019-05-10T10:11:42+00:00"
      }
    }
  }
}
```

{% endtab %}
{% endtabs %}

## Получить рефералы контакта

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/getReferrals`

Этот метод позволяет получить список рефералов контакта.

#### Path Parameters

| Name        | Type    | Description                                                                                                                                                                                                                           |
| ----------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| filters     | object  | <p>Поля для фильтрации данных. Например фильтр по тегу: <br><code>{"tag\_name": "Горячий"}</code><br><code>{"tag\_name": \["Горячий", "Холодный"]}</code><br><code>{"tag\_id": 1}</code><br><code>{"tag\_id": \[1, 2]}</code><br></p> |
| page        | integer | Номер страницы результатов.                                                                                                                                                                                                           |
| contact\_id | integer | ID контакта.                                                                                                                                                                                                                          |

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}
{% endtabs %}

## Получить количество рефералов всей сети контакта&#x20;

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/getCountReferrals`

Этот метод позволяет получить количество рефералов всей сети контакта.

#### Path Parameters

| Name        | Type    | Description                                                                                                                                                                                                                           |
| ----------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| filters     | object  | <p>Поля для фильтрации данных. Например фильтр по тегу: <br><code>{"tag\_name": "Горячий"}</code><br><code>{"tag\_name": \["Горячий", "Холодный"]}</code><br><code>{"tag\_id": 1}</code><br><code>{"tag\_id": \[1, 2]}</code><br></p> |
| contact\_id | integer | ID контакта.                                                                                                                                                                                                                          |

{% tabs %}
{% tab title="200 " %}

```
{
  "data": {
    "count": 1
  }
}
```

{% endtab %}
{% endtabs %}


# Работа со счетом

С помощью представленных методов вы можете создавать счета для ваших контактов в рамках ISO 4217, а так же проводить операции по ним - начисление/списание.

{% hint style="danger" %}
**Внимание!**

Данное API вы используете на свой страх и риск, мы не несем ответственности за сохранность данных созданных вами счетов через представленное API, но приложим все усилия для их сохранности и безопасности. Вы не должны использовать методы API представленные на этой странице, если их использование нарушает законодательство Российской Федерации, Европейского союза и США.
{% endhint %}

## Получить список счетов

<mark style="color:blue;">`GET`</mark> `https://watbot.ru/api/v1/getContactAccounts`

Этот метод позволяет получить список счетов указанного контакта.

(Отправка в запросе данных контакта должна быть ОТКЛЮЧЕНА)

**Query Parameters**

| Name        | Type    | Description  |
| ----------- | ------- | ------------ |
| contact\_id | integer | ID контакта. |

{% tabs %}
{% tab title="200 Запрос успешно обработан. Результат в виде дерева, включая текущий контакт." %}

```
{
  "data": [
    {
      "id": 1,
      "currency": "USD",
      "amount": 17500,
      "amount_note": "175 USD",
      "created_at": "2019-11-29T13:33:35+00:00",
      "updated_at": "2019-11-30T07:08:57+00:00"
    }
  ]
}
```

{% endtab %}
{% endtabs %}

## Создать счет

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/addContactAccount`

Этот метод позволяет создать счет для указанного контакта.

(Отправка в запросе данных контакта должна быть ОТКЛЮЧЕНА)

**Query Parameters**

| Name          | Type    | Description                                    |
| ------------- | ------- | ---------------------------------------------- |
| contact\_id\* | integer | <p>ID контакта.<br></p>                        |
| currency\*    | string  | Трехзначный код валюты в ISO 4217. Пример: USD |

{% tabs %}
{% tab title="201 Счет успешно создан" %}

```
{
  "data": {
    "id": 6,
    "currency": "USD",
    "amount": 0,
    "amount_note": "0 USD",
    "created_at": "2019-11-30T14:56:24+00:00",
    "updated_at": "2019-11-30T14:56:24+00:00"
  }
}
```

{% endtab %}

{% tab title="422 Аккаунт уже существует" %}

```
{
  "errors": {
    "currency": [
      "Account with the currency already exists"
    ]
  }
}
```

{% endtab %}

{% tab title="422 Неподдерживаемый формат" %}

```
{
  "message": "The given data was invalid.",
  "errors": {
    "currency": [
      "The currency format is invalid.",
      "The selected currency is invalid."
    ]
  }
}
```

{% endtab %}
{% endtabs %}

## Удалить счет

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/deleteContactAccount`

Этот метод позволяет удалить счет контакта.

(Отправка в запросе данных контакта должна быть ОТКЛЮЧЕНА)

**Request Body**

| Name        | Type    | Description |
| ----------- | ------- | ----------- |
| contact\_id | integer | ID счета.   |

{% tabs %}
{% tab title="204 Счет успешно удален" %}

{% endtab %}

{% tab title="422 Счет не может быть удален, так как имеет положительный баланс ." %}

```
{
  "errors": {
    "account_id": [
      "You can not delete the account with a balance of 175 RUB"
    ]
  }
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
Счет может быть удален только если имеет нулевой баланс.
{% endhint %}

## Зачислить сумму на счет

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/addFundsToContactAccount`

Этот метод позволяет зачислить средства на счет контакта.&#x20;

(Отправка в запросе данных контакта должна быть ОТКЛЮЧЕНА)

**Request Body**

| Name          | Type    | Description                                                       |
| ------------- | ------- | ----------------------------------------------------------------- |
| account\_id\* | integer | ID счета                                                          |
| amount\*      | integer | Сумма в минимальной денежной единице. Например для $10 - это 1000 |
| description\* | string  | Описание транзакции                                               |

{% tabs %}
{% tab title="200 Счет успешно пополнен" %}

```
{
  "data": {
    "id": 1,
    "currency": "USD",
    "amount": 117500,
    "amount_note": "1175 USD",
    "created_at": "2019-11-29T13:33:35+00:00",
    "updated_at": "2019-11-30T07:08:57+00:00"
  }
}
```

{% endtab %}
{% endtabs %}

## Списать сумму со счета

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/withdrawFundsFromContactAccount`

Этот метод позволяет списать средства со счета контакта.&#x20;

(Отправка в запросе данных контакта должна быть ОТКЛЮЧЕНА)

**Request Body**

| Name          | Type    | Description                                                       |
| ------------- | ------- | ----------------------------------------------------------------- |
| account\_id\* | integer | ID счета                                                          |
| amount\*      | integer | Сумма в минимальной денежной единице. Например для $10 - это 1000 |
| description\* | String  | Описание транзакции                                               |


# Теги

## Получить список тегов бота

<mark style="color:blue;">`GET`</mark> `https://watbot.ru/api/v1/getBotTags`

Этот метод позволяет получить список всех тегов для определенного бота.

#### Path Parameters

| Name                                      | Type    | Description |
| ----------------------------------------- | ------- | ----------- |
| bot\_id<mark style="color:red;">\*</mark> | integer | ID бота.    |

{% tabs %}
{% tab title="200 Запрос успешно обработан." %}

```
"data": [
  "Одежда",
  "Акция",
  "Горячий"
}
```

{% endtab %}
{% endtabs %}

## Получить список тегов контакта

<mark style="color:blue;">`GET`</mark> `https://watbot.ru/api/v1/getContactTags`

Этот метод позволяет получить список тегов контакта.

#### Path Parameters

| Name                                          | Type    | Description  |
| --------------------------------------------- | ------- | ------------ |
| contact\_id<mark style="color:red;">\*</mark> | integer | ID контакта. |

{% tabs %}
{% tab title="200 Запрос успешно обработан." %}

```
{
  "data": [
    "Горячий", 
    "Реклама"
  ]
}
```

{% endtab %}
{% endtabs %}

## Привязать тег к контакту

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/attachTagToContact`

Этот метод позволяет привязать тег к контакту по id или имени тега.

#### Request Body

| Name                                          | Type    | Description |
| --------------------------------------------- | ------- | ----------- |
| contact\_id<mark style="color:red;">\*</mark> | integer | ID контакта |
| name<mark style="color:red;">\*</mark>        | string  | Имя тега    |

{% tabs %}
{% tab title="204 Запрос успешно обработан." %}

{% endtab %}
{% endtabs %}

## Отвязать тег от контакта.

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/detachTagFromContact`

Этот метод позволяет отвязать тег от контакта по id или имени тега.

#### Request Body

| Name                                          | Type    | Description  |
| --------------------------------------------- | ------- | ------------ |
| contact\_id<mark style="color:red;">\*</mark> | integer | ID контакта. |
| name<mark style="color:red;">\*</mark>        | string  | Имя тега.    |

{% tabs %}
{% tab title="204 Запрос успешно обработан." %}

{% endtab %}
{% endtabs %}


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

## Получить список переменных

<mark style="color:blue;">`GET`</mark> `https://watbot.ru/api/v1/getContactVariables`

Этот метод позволяет получить список пользовательских переменных для определенного контакта.

#### Path Parameters

| Name                                          | Type    | Description  |
| --------------------------------------------- | ------- | ------------ |
| contact\_id<mark style="color:red;">\*</mark> | integer | ID контакта. |

{% tabs %}
{% tab title="200 Запрос успешно обработан." %}

```javascript
{
  "data": [
    {
      "id": 16497876867449,
      "name": "Имя переменной",
      "value": "Значение переменной",
      "deletable": false,
      "variable": {
        "id": 16497876867449,
        "name": "Имя переменной"
      }
    },
    {
      "id": 16497893703850,
      "name": "Город",
      "value": "Москва",
      "deletable": false,
      "variable": {
        "id": 16497893703850,
        "name": "Город"
      }
    }
  ]
}
```

{% endtab %}

{% tab title="422 Переданные данные некорректны." %}

```javascript
{
  "message": "The given data was invalid.",
  "errors": {
    "contact_id": [
      "Поле contact id обязательно для заполнения."
    ]
  }
}
```

{% endtab %}
{% endtabs %}

## Создать/обновить переменную

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/setContactVariable`

Этот метод позволяет создать или обновить пользовательскую переменную. Если такой переменной не существует в боте, то она создастся и привяжется к пользователю.

#### Query Parameters

| Name                                          | Type    | Description                                                                                                                                                                                      |
| --------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| contact\_id<mark style="color:red;">\*</mark> | integer | ID контакта.                                                                                                                                                                                     |
| name<mark style="color:red;">\*</mark>        | string  | Имя переменной.                                                                                                                                                                                  |
| value<mark style="color:red;">\*</mark>       | string  | Значение переменной.                                                                                                                                                                             |
| deletable                                     | integer | <p>Возможные значения:</p><p><code>0</code> - переменная не должна удалиться после заявки</p><p><code>1</code> - переменная должна удалиться после заявки</p><p>По умолчанию: <code>0</code></p> |

{% tabs %}
{% tab title="200 Переменная успешно создана/отредактирована." %}

```javascript
{
  "data": {
    "id": 16498385181301,
    "name": "Имя переменной",
    "value": "Значение переменной",
    "deletable": false,
    "variable": {
      "id": 16498385181301,
      "name": "Имя переменной"
    }
  }
}
```

{% endtab %}

{% tab title="403 Доступ запрещен." %}

```javascript
{
    "message": "Forbidden"
}
```

{% endtab %}

{% tab title="422 Переданы некорректные данные." %}

```javascript
{
  "message": "The given data was invalid.",
  "errors": {
    "contact_id": [
      "Поле contact id обязательно для заполнения."
    ],
    "name": [
      "Поле Имя обязательно для заполнения."
    ],
    "value": [
      "Поле value обязательно для заполнения."
    ]
  }
}
```

{% endtab %}
{% endtabs %}

## &#x20;Удалить переменную

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/deleteContactVariable`

Этот метод позволяет удалить пользовательскую переменную по ее имени или ID.

#### Query Parameters

| Name                                          | Type    | Description                                         |
| --------------------------------------------- | ------- | --------------------------------------------------- |
| id                                            | integer | ID переменной. Обязательно когда `name` не передан. |
| contact\_id<mark style="color:red;">\*</mark> | integer | ID контакта                                         |
| name                                          | string  | Имя переменной. Обязательно когда `id` не передан.  |

{% tabs %}
{% tab title="204 Переменная успешно удалена." %}

{% endtab %}

{% tab title="403 Доступ запрещен." %}

```javascript
{
    "message": "Forbidden" 
}
```

{% endtab %}

{% tab title="422 Переданы некорректные данные." %}

```
{
  "message": "The given data was invalid.",
  "errors": {
    "id": [
      "Поле id обязательно для заполнения, когда Имя не указано."
    ],
    "contact_id": [
      "Поле contact id обязательно для заполнения, когда id не указано."
    ],
    "name": [
      "Поле Имя обязательно для заполнения, когда id не указано."
    ]
  }
}
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
Объект `data.variable` устарел и теперь передается в ответе только для совместимости старого API. Окончательно перестанет поддерживаться после 01.03.2023&#x20;
{% endhint %}


# Списки

Данное API позволяет создавать произвольные списки и проводить различные операции над ними, которые возможно привязывать к пользователю или к боту.

{% content-ref url="/pages/-Lvek17dV0aZUjxZnDTx" %}
[Схема списка](/rabota-s-api/spiski/spiski)
{% endcontent-ref %}

{% content-ref url="/pages/-Lvezm0UNxt53ERHJ\_FM" %}
[Элементы списка](/rabota-s-api/spiski/elementy-spiska)
{% endcontent-ref %}


# Схема списка

## Получить списки (схемы)

<mark style="color:blue;">`GET`</mark> `https://watbot.ru/api/v1/getListSchemas`

Этот метод позволяет получить списки (схемы).

{% tabs %}
{% tab title="200 Запрос успешно обработан." %}

```
{
  "data": [
    {
      "id": "5dee4800c2cc5a38ec797235",
      "fields": {
        "name": {
          "name": "Название",
          "type": "string",
          "is_required": true,
          "is_hidden": false,
          "is_encryptable": false
        },
        "quantity": {
          "name": "Количество",
          "type": "number",
          "is_required": false,
          "is_hidden": false,
          "is_encryptable": false
        },
        "is_vip": {
          "name": "VIP",
          "type": "bool",
          "is_required": true,
          "is_hidden": false,
          "is_encryptable": false
        },
        "contact": {
          "name": "Контакт",
          "type": "contact",
          "is_required": true,
          "is_hidden": false,
          "is_encryptable": false
        },
        "key": {
          "name": "Ключ",
          "type": "string",
          "is_required": true,
          "is_hidden": true,
          "is_encryptable": true
        }
      },
      "name": "Заказы",
      "is_menu": false,
      "created_at": "2019-12-09T13:11:28+00:00",
      "updated_at": "2019-12-09T13:11:28+00:00"
    }
  ],
  "links": {
    "first": "https:\/\/watbot.ru\/api\/v1\/getListSchemas?page=1",
    "last": "https:\/\/watbot.ru\/api\/v1\/getListSchemas?page=1",
    "prev": null,
    "next": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "path": "https:\/\/watbot.ru\/api\/v1\/getListSchemas",
    "per_page": 50,
    "to": 1,
    "total": 1
  }
}
```

{% endtab %}
{% endtabs %}

## Получить список (схему)

<mark style="color:blue;">`GET`</mark> `https://watbot.ru/api/v1/getListSchema`

Этот метод позволяет получить схему.

{% tabs %}
{% tab title="200  Запрос успешно обработан." %}

```
{
  "data": {
    "id": "5dee4800c2cc5a38ec797235",
    "fields": {
      "name": {
        "name": "Название",
        "type": "string",
        "is_required": true,
        "is_hidden": false,
        "is_encryptable": false
      },
      "quantity": {
        "name": "Количество",
        "type": "number",
        "is_required": false,
        "is_hidden": false,
        "is_encryptable": false
      },
      "is_vip": {
        "name": "VIP",
        "type": "bool",
        "is_required": true,
        "is_hidden": false,
        "is_encryptable": false
      },
      "contact": {
        "name": "Контакт",
        "type": "contact",
        "is_required": true,
        "is_hidden": false,
        "is_encryptable": false
      },
      "key": {
        "name": "Ключ",
        "type": "string",
        "is_required": true,
        "is_hidden": true,
        "is_encryptable": true
      }
    },
    "name": "Заказы",
    "is_menu": false,
    "created_at": "2019-12-09T13:11:28+00:00",
    "updated_at": "2019-12-09T13:11:28+00:00"
  }
}в
```

{% endtab %}
{% endtabs %}

## Создать список (схему)

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/createListSchema`

Этот метод позволяет создать список.

#### Request Body

| Name     | Type    | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| -------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| is\_menu | boolean | Отображать ссылку на список в меню в интерейсе Watbot.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| name     | string  | Название списка.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| bot\_id  | integer | ID бота, если вы хотите привязать списк к боту.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| fields   | object  | <p><strong>name</strong> <code>string</code> - название поля<br><strong>slug</strong> <code>string</code> - уникальная строка поля<br><strong>type</strong> <code>string</code> - тип поля (string, number, boolean, contact, bot) - см. ниже.<br><strong>is\_required</strong> <code>boolean</code> - обязательность заполнения поля<br><strong>is\_hidden</strong> <code>boolean</code> - скрыть поле из интерфейса?<br><strong>is\_encryptable</strong> <code>boolean</code> - шифровать поле для хранения в БД? По таким поля нельзя делать фильтрацию и сортировку.</p> |

{% tabs %}
{% tab title="200 Запрос успешно обработан." %}

```
{
  "data": {
    "id": "5dee51518a7ab32ecf060265",
    "fields": {
      "name": {
        "name": "Название",
        "type": "string",
        "is_required": true,
        "is_hidden": false,
        "is_encryptable": false
      },
      "quantity": {
        "name": "Количество",
        "type": "number",
        "is_required": false,
        "is_hidden": false,
        "is_encryptable": false
      },
      "is_vip": {
        "name": "VIP",
        "type": "bool",
        "is_required": true,
        "is_hidden": false,
        "is_encryptable": false
      },
      "contact": {
        "name": "Контакт",
        "type": "contact",
        "is_required": true,
        "is_hidden": false,
        "is_encryptable": false
      },
      "key": {
        "name": "Ключ",
        "type": "string",
        "is_required": true,
        "is_hidden": true,
        "is_encryptable": true
      }
    },
    "name": "Заказы",
    "is_menu": true,
    "created_at": "2019-12-09T13:51:13+00:00",
    "updated_at": "2019-12-09T13:51:13+00:00"
  }
}
```

{% endtab %}

{% tab title="422 Переданы некорректные данные." %}

```
{
  "message": "The given data was invalid.",
  "errors": {
    "name": [
      "Поле Имя обязательно для заполнения."
    ],
    "fields": [
      "Поле fields обязательно для заполнения."
    ]
  }
}
```

{% endtab %}
{% endtabs %}

### Типы поля `fields["type"]`

| Тип       | Значение       |
| --------- | -------------- |
| `string`  | строка/текст   |
| `number`  | число          |
| `boolean` | логический тип |
| `contact` | id контакта    |
| `bot`     | id бота        |

## Добавить новое поле в список (схему)

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/addListSchemaField`

Этот метод позволяет добавить новое поле в список.&#x20;

#### Request Body

| Name       | Type   | Description                                                                                           |
| ---------- | ------ | ----------------------------------------------------------------------------------------------------- |
| field      | object | Смотрите метод **createListSchema** поле **fields**. Укажите только те поля, которые хотите обновить. |
| schema\_id | string | ID списка.                                                                                            |

{% tabs %}
{% tab title="201 Запрос успешно обработан." %}

```
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
Если в списке есть уже элементы, то созданное поле заполнится для них значением `null`
{% endhint %}

## Удалить поле списка (схемы)

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/deleteListSchemaField`

Этот метод позволяет удалить поле списка.&#x20;

#### Request Body

| Name       | Type   | Description |
| ---------- | ------ | ----------- |
| slug       | string | Slug поля.  |
| schema\_id | string | ID списка.  |

{% tabs %}
{% tab title="204 Запрос успешно обработан." %}

```
```

{% endtab %}
{% endtabs %}

## Удалить список (схему)

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/deleteListSchema`

Этот метод позволяет удалить список.

#### Request Body

| Name       | Type   | Description |
| ---------- | ------ | ----------- |
| schema\_id | string | ID списка.  |

{% tabs %}
{% tab title="204 Запрос успешно обработан." %}

```
```

{% endtab %}
{% endtabs %}


# Элементы списка

## Получить элементы списка

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/getListItems`

Этот метод позволяет получить элементы списка.

#### Request Body

| Name         | Type    | Description                                                                                  |
| ------------ | ------- | -------------------------------------------------------------------------------------------- |
| schema\_id\* | string  | ID списка.                                                                                   |
| bot\_id      | integer | ID бота (если есть такое поле)                                                               |
| contact\_id  | integer | ID контакта (если есть такое поле)                                                           |
| order\_by    | string  | Поле по которому необходимо сделать сортировку. Например: `created_at` или `created_at,desc` |
| filters      | object  | Поля для фильтрации данных. Например: `{"name": "Дмитрий"}` или `{"age": ">=,18"}`           |
| page         | object  | Выбор страницы                                                                               |
| limit        | integer | Количество элементов на странице. Минимум: 1, максимум: 1000                                 |

{% tabs %}
{% tab title="200 Запрос успешно обработан." %}

```
{
  "data": [
    {
      "id": "5dee39b68a7ab32ecf060264",
      "contact_id": 1,
      "created_at": "2019-12-09T12:10:30+00:00",
      "updated_at": "2019-12-09T12:10:30+00:00",
      "first_name": "Иван",
      "last_name": "Иванов"
    },
    {
      "id": "5dee39bb6637df57be7bc683",
      "contact_id": 1,
      "created_at": "2019-12-09T12:10:35+00:00",
      "updated_at": "2019-12-09T12:10:35+00:00",
      "first_name": "Петр",
      "last_name": "Петров"
    },
    {
      "id": "5dee39bdc2cc5a38ec797234",
      "contact_id": 1,
      "created_at": "2019-12-09T12:10:37+00:00",
      "updated_at": "2019-12-09T12:10:37+00:00",
      "first_name": "Василий",
      "last_name": "Васильев"
    }
  ],
  "links": {
    "first": "https:\/\/watbot.ru\/api\/v1\/getListItems?page=1",
    "last": "https:\/\/watbot.ru\/api\/v1\/getListItems?page=1",
    "prev": null,
    "next": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "path": "https:\/\/watbot.ru\/api\/v1\/getListItems",
    "per_page": 50,
    "to": 3,
    "total": 3
  }
}
```

{% endtab %}
{% endtabs %}

## Добавить элемент в список

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/addListItem`

Этот метод позволяет добавить элемент в список.

#### Request Body

<table><thead><tr><th width="253">Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>schema_id*</td><td>string</td><td>ID списка.</td></tr><tr><td>data</td><td>object</td><td>Поля элемента. <br>Пример <code>{"slug поля": "значение"}</code></td></tr></tbody></table>

{% tabs %}
{% tab title="201 Запрос успешно обработан." %}

```
{
  "data": {
    "id": "5dee62e46637df57be7bc686",
    "contact_id": 443,
    "created_at": "2019-12-09T15:06:12+00:00",
    "updated_at": "2019-12-09T15:06:12+00:00",
    "name": "Товар",
    "quantity": null,
    "is_vip": true,
    "key": "secret"
  }
}
```

{% endtab %}
{% endtabs %}

## Обновить элемент в списке

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/updateListItem`

Этот метод позволяет обновить элемент в списке.

#### Request Body

| Name         | Type   | Description                                                             |
| ------------ | ------ | ----------------------------------------------------------------------- |
| schema\_id\* | string | ID списка.                                                              |
| item\_id     | string | ID элемента в списке.                                                   |
| data         | object | <p>Поля элемента. <br>Пример <code>{"slug поля": "значение"}</code></p> |

{% tabs %}
{% tab title="200 Запрос успешно обработан." %}

```
{
  "data": {
    "id": "5dee62e46637df57be7bc686",
    "contact_id": 1,
    "created_at": "2019-12-09T15:06:12+00:00",
    "updated_at": "2019-12-09T15:09:47+00:00",
    "name": "Товар",
    "quantity": null,
    "is_vip": false,
    "key": "secret"
  }
}
```

{% endtab %}
{% endtabs %}

## Удалить элемент списка

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/deleteListItem`

Этот метод позволяет удалить элемент в списке.

#### Request Body

| Name     | Type   | Description           |
| -------- | ------ | --------------------- |
| item\_id | String | ID элемента в списке. |

{% tabs %}
{% tab title="204 Запрос успешно обработан." %}

```
```

{% endtab %}
{% endtabs %}


# Ссылки на медиафайлы

## Получить прямую ссылку на медиафайл

<mark style="color:green;">`POST`</mark> `https://watbot.ru/api/v1/decodeShortLink`

Этот метод позволяет получить прямую ссылку на фото/видео/аудио, отправленное пользователем в бот, чтобы в дальнейшем можно было переслать данный медиафайл.

**Request Body**

| Name  | Type   | Description                                                            |
| ----- | ------ | ---------------------------------------------------------------------- |
| url\* | string | Короткая ссылка на медиафайл, хранящаяся в пользовательской переменной |

{% tabs %}
{% tab title="200 Запрос успешно обработан." %}

```
{
  "data": {
    "url": "https://storage.watbot.ru/bots/46405/blocks/1471350/3e64a9a8-d7d8-4b9f-8d9d-9a580695a4e4.jpeg?expires_at=1720383587&s=xhogr3O7C5M7V3KmpE5nIL5wqmMBnSDpXw64HgsXEsD7sk5OCl4DWbwZ4dlQ95Ab&sign=cfd42ee3299811ff1a7e3367743d54640aa16490930f9795011c2cceae1f6d04"
  }
}
```

{% endtab %}

{% tab title="422: Unprocessable Entity" %}

```
{
  "message": "The given data was invalid.",
  "errors": {
    "url": [
      "Поле url имеет ошибочный формат URL."
    ]
  }
}
```

{% endtab %}
{% endtabs %}


# Примеры API запросов&#x20;

{% hint style="info" %}
В каждом запросе применяется обязательное значение **api\_token**
{% endhint %}

{% content-ref url="/pages/-Lf\_67vO3P0ws36zwHSn" %}
[Аккаунт](/rabota-s-api/akkaunt)
{% endcontent-ref %}

#### Метод <mark style="color:purple;">getMе</mark>

> [https://watbot.ru/api/v1/<mark style="color:purple;">getMe</mark>](https://watbot.ru/api/v1/getMe)?api\_token=Ваштокенwatbot

#### Как выполнить <mark style="color:purple;">getMе</mark> запрос в <mark style="color:red;">http</mark> блоке ?

<figure><img src="https://4152861189-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LfZGuokAo0CKridiMMF%2Fuploads%2FWUH9buWugPbzm8rydjI7%2Fgetmy.png?alt=media&amp;token=2d977e3d-8482-440e-b838-fc6d1c72ac8f" alt=""><figcaption></figcaption></figure>

#### **Ответ при успешном выполнении метода** <mark style="color:purple;">getMе</mark>

```json
{
  "data": {
    "id": 1,
    "name": "Дмитрий",
    "phone": null,
    "email": "dmitriy@example.com",
    "created_at": "2019-01-08T16:56:07+00:00"
  }
}
```

#### Метод <mark style="color:purple;">getContacts</mark>

[https://watbot.ru/api/v1/<mark style="color:purple;">getContacts</mark>](https://watbot.ru/api/v1/getContacts)?api\_token=Ваштокенwatbot

#### Как выполнить <mark style="color:purple;">getContacts</mark> запрос в <mark style="color:red;">http</mark> блоке ?

<figure><img src="https://4152861189-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LfZGuokAo0CKridiMMF%2Fuploads%2FHR9jylQGGSNyRJowG6Uq%2Fgetcont.png?alt=media&amp;token=bf77f633-f0b8-42eb-8541-f9db05267b2a" alt=""><figcaption></figcaption></figure>

#### **Ответ при успешном выполнении метода** <mark style="color:purple;">getContacts</mark>

```json
{
  "data": [
    {
      "id": 1,
      "bot_id": 1,
      "phone": "79991234567",
      "email": "info@example.com",
      "name": "Иван Иванов",
      "messenger": "whatsapp",
      "address": "г. Москва, ул. Пушкина, д. 5",
      "utm": {
        "utm_source": "landing",
        "utm_medium": "...",
        "utm_campaign": "...",
        "utm_term": "...",
        "utm_content": "..."
      },
      "created_at": "2019-05-10T10:38:28+00:00"
    },
    {
      "id": 2,
      "bot_id": 1,
      "phone": "792712312321",
      "email": null,
      "name": "Петр Петров",
      "messenger": "telegram",
      "telegram_id": "123456",
      "telegram_username": "superman",
      "address": null,
      "utm": null,
      "created_at": "2019-04-02T12:16:16+00:00"
    },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "path": "http:\/\/watbot.ru\/api\/v1\/getContacts",
    "per_page": 500,
    "to": 3,
    "total": 3
  }
}
```

#### Метод [<mark style="color:purple;">getR</mark>](https://watbot.ru/api/v1/getReferrers)<mark style="color:purple;">eferrers</mark>

[https://watbot.ru/api/v1/](https://watbot.ru/api/v1/getContacts)<mark style="color:purple;">getReferrers?</mark>api\_token=Ваштокенwatbot

#### Как выполнить <mark style="color:purple;">getReferrers</mark> запрос в <mark style="color:red;">http</mark> блоке ?

<figure><img src="https://4152861189-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LfZGuokAo0CKridiMMF%2Fuploads%2Fd7zCqnlMZfZx4m0ERuck%2Freff.png?alt=media&amp;token=14593f1f-b19b-451a-b7f5-15d82da5e72f" alt=""><figcaption></figcaption></figure>

#### **Ответ при успешном выполнении метода** <mark style="color:purple;">getReferrers</mark>

<pre class="language-json"><code class="lang-json"><strong>{
</strong>"data":{
"id":1501394,
"bot_id":35396,
"phone":null,
"email":null,
"name":"\u0418\u0433\u043e\u0440\u044c ",
"address":null,
"messenger":"telegram",
"utm":[],
"avatar":"https:\/\/eva.botsister.ru\/0a1f4d26-1e2b-4d91-a16f-801e1b4550df\/1501394.png",
"telegram_id":"1486741815",
"telegram_username":"watbot",
"vk_user_id":null,
"created_at":"2020-01-01T19:48:27+00:00",
"unsubscribed_at":null,
"tags":[],
"variables":[{
"id":17043975323132,
"name":"name",
"type":0,
"value":"\u0418\u0433\u043e\u0440\u044c",
"payload":null,
"deletable":false,
"schema_id":null}]
}
}
</code></pre>

#### Метод [<mark style="color:purple;">decodeShortLink</mark>](#metod-decodeshortlink)

[https://watbot.ru/api/v1/<mark style="color:purple;">decodeShortLink</mark>](#metod-decodeshortlink)<mark style="color:purple;">?url={{$закодированная ссылка на изображения,вида</mark> [<mark style="color:purple;">https://watbot.ru/w/Cra</mark>](https://watbot.ru/w/Cra)<mark style="color:purple;">}}</mark>\&api\_token=Ваштокенwatbot

#### Как выполнить <mark style="color:purple;">decodeShortLink</mark> запрос в <mark style="color:red;">http</mark> блоке ?

<figure><img src="https://4152861189-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LfZGuokAo0CKridiMMF%2Fuploads%2FS2FviPMcDJWogOnW7sZm%2Fdecode.png?alt=media&amp;token=612cb767-8764-4797-bfa1-c79cabb45eb5" alt=""><figcaption></figcaption></figure>

**Ответ при успешном выполнении метода&#x20;**<mark style="color:purple;">**decodeShortLink**</mark>

```json
{
"data":{
"url":"https:\/\/eva.botsister.ru\/53360f7b-7c9e-4b40-8888-edb92998b424\/file-1.jpg?expires_at=1704802035&s=0H75UwNj4lZPjtXd&sign=5c6b338989165e17b423e84d6418f2f43ed93b76cff45c4246be350660f9d6f1"
}
}
```


# Примеры реализации API интеграций

**Передаем обязательные поля** (см.раздел Основы)&#x20;

{% content-ref url="/pages/9d6BlKAg21GpCJBOrzyz" %}
[Основы](/js-api/osnovy)
{% endcontent-ref %}

**Token** - Токен для взаимодействия с API (Получить можно в разделе <https://watbot.ru/account/api>)

**Дополнительные данные**&#x20;

*bot\_id* - внутренний ID бота&#x20;

*contact\_id* - ID контакта в списке "Контакты"

*tag* - значение тега

value - значение переменной

<mark style="color:red;">\*</mark>name - имя переменной

message\_id - ID сообщения внутри платформы watbot

text - текст сообщения

phone - номер телефона

depth - глубина дерева от 1 до 10

<mark style="color:red;">\*</mark>**применяется для переменных пользователя**

## Получение данных списка контактов

{% hint style="info" %}
**Применяется GET-запрос**
{% endhint %}

```php
<? 
//PHP CODE
//author: Administratio constructore chatbots Watbot.ru
function removegetContacts($token) {
  global $token; // доступ к глобальной переменной $token
  $apiUrl = 'https://watbot.ru/api/v1/getContacts?api_token=' . $token . '';
    // Создаем новый cURL ресурс
    $ch = curl_init();
    // Устанавливаем настройки cURL
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // Выполняем запрос
    $response = curl_exec($ch);
    // Закрываем cURL ресурс
    curl_close($ch);
    // Обрабатываем ответ
    if ($response === false) {
        // В случае ошибки
        echo 'Ошибка при получении контактов.';
    } else {
        // В случае успеха
        // Преобразуем полученные данные из JSON в ассоциативный массив
        $contacts = json_decode($response, true);
        
        // Выводим данные в формате JSON
        echo json_encode($contacts);
    }
}
// Вызываем функцию removeTagFromContact
removegetContacts($token);
?> 
```

## Добавление тега для контакта

{% hint style="warning" %}
**Применяется POST-запрос**
{% endhint %}

```php
<? 
//PHP CODE
//author: Administratio constructore chatbots Watbot.ru
function removeTagtoContact($token, $contact_id, $tag) {
  global $token; //доступ к глобальной переменной
  $apiUrl = 'https://watbot.ru/api/v1/attachTagToContact?api_token=' . $token . '&contact_id=' . $contact_id . '&name=' .$tag.'';
    // Создаем новый cURL ресурс
   $ch = curl_init();
    // Устанавливаем настройки cURL
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // Выполняем запрос
  $response = curl_exec($ch);
    // Закрываем cURL ресурс
    curl_close($ch);
    // Обрабатываем ответ
    if ($response === false) {
        // В случае ошибки
        echo 'Ошибка при добавлении тега контакта.';
    } else {
        // В случае успеха
        // Преобразуем полученные данные из JSON в ассоциативный массив
       $contacts = json_decode($response, true);
        
        // Выводим данные в формате JSON
        echo json_encode($contacts);
    }
}
// Вызываем функцию removeTagFromContact
removeTagtoContact($token, $contact_id, $tag);
?>

```

## Удаление тега для контакта

{% hint style="warning" %}
**Применяется POST-запрос**
{% endhint %}

```php
<?
//PHP CODE
//author: Administratio constructore chatbots Watbot.ru
function removeTagFromContact($token, $contact_id, $tag) {
  global $token; // доступ к глобальной переменной
  $apiUrl = 'https://watbot.ru/api/v1/detachTagFromContact?api_token=' . $token . '&contact_id=' . $contact_id . '&name=' .$tag.'';
    // Создаем новый cURL ресурс
    $ch = curl_init();
    // Устанавливаем настройки cURL
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // Выполняем запрос
    $response = curl_exec($ch);
    // Закрываем cURL ресурс
    curl_close($ch);
    // Обрабатываем ответ
    if ($response === false) {
        // В случае ошибки
        echo 'Ошибка при удалении тега контакта.';
    } else {
        // В случае успеха
        // Преобразуем полученные данные из JSON в ассоциативный массив
        $contacts = json_decode($response, true);
        
        // Выводим данные в формате JSON
        echo json_encode($contacts);
    }
}
// Вызываем функцию removeTagFromContact
removeTagFromContact($token, $contact_id, $tag);
?>
```

## Получение списка тегов контакта

{% hint style="info" %}
**Применяется GET-запрос**
{% endhint %}

```php
<?
//PHP CODE
//author: Administratio constructore chatbots Watbot.ru
function getContactTags($token, $contact_id) {
  global $token; //доступ к глобальной переменной
  $apiUrl = 'https://watbot.ru/api/v1/getContactTags?contact_id=' . $contact_id . '&api_token=' . $token . '';
    // Создаем новый cURL ресурс
   $ch = curl_init();
    // Устанавливаем настройки cURL
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // Выполняем запрос
  $response = curl_exec($ch);
    // Закрываем cURL ресурс
    curl_close($ch);
    // Обрабатываем ответ
    if ($response === false) {
        // В случае ошибки
        echo 'Ошибка при получении тегов контакта.';
    } else {
        // В случае успеха
        // Преобразуем полученные данные из JSON в ассоциативный массив
       $contact = json_decode($response, true);
        
        // Выводим данные в формате JSON
        echo json_encode($contact);
    }
}
// Вызываем функцию getContactTags
getContactTags($token, $contact_id);
?>
```

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

{% hint style="info" %}
**Применяется GET-запрос**
{% endhint %}

```php
<?
//PHP CODE
//author: Administratio constructore chatbots Watbot.ru
function getContactVariables($contact_id) {
global $token; //доступ к глобальной переменной
  $apiUrl = "https://watbot.ru/api/v1/getContactVariables?api_token=" . $token . "&contact_id=" . $contact_id;
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $apiUrl);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $response = curl_exec($ch);
  curl_close($ch);
  if ($response === false) {
      echo 'Ошибка при получении списка переменных пользователя.';
  } else {
      $variables = json_decode($response, true);
  }
}
//Вызываем функцию getContactVariables
getContactVariables($contact_id);
?>
```

## Создание или обновление переменной&#x20;

{% hint style="info" %}
**Применяется POST-запрос**
{% endhint %}

```php
<?
//PHP CODE
//author: Administratio constructore chatbots Watbot.ru
function setContactVariable($contact_id, $name, $value) {
global $token; //доступ к глобальной переменной
  $apiUrl = "https://watbot.ru/api/v1/setContactVariable?api_token=" . $token . "&contact_id=" . $contact_id."&name=".$name."&value=".$value;
  $data = array(
    "contact_id" => $contact_id,
    "name" => $name,
    "value" => $value);
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $apiUrl);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  $response = curl_exec($ch);
  curl_close($ch);
  if ($response === false) {
      echo 'Ошибка при обновлении или создании переменной пользователя.';
  } else {
      $result = json_decode($response, true);
  }
}
//Вызываем функцию setContactVariables 
setContactVariable($contact_id, $name, $value);
?>
```

## Удаление переменной&#x20;

{% hint style="warning" %}
**Применяется POST-запрос**
{% endhint %}

```php
<?
//PHP CODE
//author: Administratio constructore chatbots Watbot.ru
function deleteContactVariable($contact_id, $name) {
global $token; //доступ к глобальной переменной
  $apiUrl = "https://watbot.ru/api/v1/deleteContactVariable?api_token=" . $token . "&contact_id=" . $contact_id . "&name=" . $name;
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $apiUrl);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
  $response = curl_exec($ch);
  curl_close($ch);
  if ($response === false) {
      echo 'Ошибка при удалении переменной пользователя.';
  } else {
      $result = json_decode($response, true);
  }
}
//Вызываем функцию deleteContactVariables
deleteContactVariable($contact_id, $name);
?>
```

## Отправка текстовой рассылки

{% hint style="warning" %}
**Применяется POST-запрос**
{% endhint %}

```php
<?
//PHP CODE
//author: Administratio constructore chatbots Watbot.ru
function sendMessageToQueue($token, $message_id, $text, $contact_id = null, $phone = null) {
    if ($contact_id !== null || $phone !== null) {
        $apiUrl = 'https://watbot.ru/api/v1/sendMessageToQueue?api_token=' . $token . '&message_id=' . $message_id . '&text=' . $text;
        if ($contact_id !== null) {
            $apiUrl .= '&contact_id=' . $contact_id;
        }
        if ($phone !== null) {
            $apiUrl .= '&phone=' . $phone;
        }
        // Создаем новый cURL ресурс
        $ch = curl_init();
        // Устанавливаем настройки cURL
        curl_setopt($ch, CURLOPT_URL, $apiUrl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        // Выполняем запрос
        $response = curl_exec($ch);
        // Закрываем cURL ресурс
        curl_close($ch);
        // Обрабатываем ответ
        if ($response === false) {
            // В случае ошибки
            echo 'Error Fatal Request';
    } else {
        echo 'Необходимо указать значение для $contact_id или $phone';
    }
}
}
// Вызываем функцию sendMessageToQueue и отправляем запрос
sendMessageToQueue($token, $message_id, $text, $contact_id, $phone);
?>
```

## Получение реферов контакта

{% hint style="info" %}
**Применяется GET-запрос**
{% endhint %}

```php
<?
//PHP CODE
//author: Administratio constructore chatbots Watbot.ru
function getReferrers($token, $contact_id, $page == null, $depth == null) {
///depth параметр не обязателен, глубина просмотра дерева от 1 до 10, стандартное состояние 1 
///page параметр не обязателен, но нужен, для палигации страниц, страница может содержать до 500 контактов, данный параметр нужен в случае если вывод контактов будет > 500, на 2 странице начинается 501 контакт, дефалтное состояние page = 1
  global $token; //доступ к глобальной переменной
  if($page == null){
  $apiUrl = 'https://watbot.ru/api/v1/getReferrers?contact_id=' . $contact_id . '&api_token=' . $token . '';
  }else{
    $apiUrl = 'https://watbot.ru/api/v1/getReferrers?contact_id=' . $contact_id . '&api_token=' . $token . '&page='.$page.'';
  }
    // Создаем новый cURL ресурс
   $ch = curl_init();
    // Устанавливаем настройки cURL
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // Выполняем запрос
  $response = curl_exec($ch);
    // Закрываем cURL ресурс
    curl_close($ch);
    // Обрабатываем ответ
    if ($response === false) {
        // В случае ошибки
        echo 'Error Fatal Request.';
    } else {
        // В случае успеха
        // Преобразуем полученные данные из JSON в ассоциативный массив
       $referrers = json_decode($response, true);
        
        // Выводим данные в формате JSON
        echo json_encode($referrers);
    }
}
// Вызываем функцию getReferrers
getReferrers($token, $contact_id);
?>
```

## Получить рефералы контакта&#x20;

{% hint style="warning" %}
**Применяется POST-запрос**
{% endhint %}

```php
<?
//PHP CODE
//author: Administratio constructore chatbots Watbot.ru
function getReferrals($token, $contact_id, $page == null) {
///page параметр не обязателен, но нужен, для палигации страниц, страница может содержать до 500 контактов, данный параметр нужен в случае если вывод контактов будет > 500, на 2 странице начинается 501 контакт, дефалтное состояние page = 1
  global $token; //доступ к глобальной переменной
   if($page == null){
  $apiUrl = 'https://watbot.ru/api/v1/getReferrals?contact_id=' . $contact_id . '&api_token=' . $token . '';
  }else{
    $apiUrl = 'https://watbot.ru/api/v1/getReferrals?contact_id=' . $contact_id . '&api_token=' . $token . '&page='.$page.'';
  }
    // Создаем новый cURL ресурс
   $ch = curl_init();
    // Устанавливаем настройки cURL
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // Выполняем запрос
  $response = curl_exec($ch);
    // Закрываем cURL ресурс
    curl_close($ch);
    // Обрабатываем ответ
    if ($response === false) {
        // В случае ошибки
        echo 'Error Fatal Request.';
    } else {
        // В случае успеха
        // Преобразуем полученные данные из JSON в ассоциативный массив
       $referrals = json_decode($response, true);
        
        // Выводим данные в формате JSON
        echo json_encode($referrals);
    }
}
// Вызываем функцию getReferrals
getReferrals($token, $contact_id);
?>
```

{% hint style="success" %}
**Раздел будет дополняться**
{% endhint %}


# Основы

Основы для работы с JavaScript на платформе Watbot

{% content-ref url="/pages/xWZZexTorFpgw8gRM3Hi" %}
[Переменные](/js-api/peremennye)
{% endcontent-ref %}

{% content-ref url="/pages/WTp0TtF61ojZDz8yxlr2" %}
[Функции](/js-api/funkcii)
{% endcontent-ref %}

{% content-ref url="/pages/JHU9xVkvbWqkYSnbxHwF" %}
[Блок "HTTP-запрос"](/js-api/blok-http-zapros)
{% endcontent-ref %}

### Ограничения

* Количество символов вашего кода не должно превышать 16384.
* Код должен выполняться не более 5 секунд, иначе система прервет его выполнение, а пользователь получит в чат сообщение об ошибке.
* Watbot JavaScript нацелен на ES5. Функции ES6 (например, типизированные массивы) не поддерживаются.
* Механизм регулярных выражений не полностью соответствует спецификации ES5.
* "use strict" обрабатывается, но игнорируется.

### Несовместимость регулярных выражений

Регулярные выражения Watbot JavaScript соответствует стандарту [re2/regexp](https://github.com/google/re2/wiki/Syntax) и не полностью соответствуют спецификации ES5, поэтому следующий синтаксис работать не будет:

```
(?=)  // Lookahead (positive), в настоящее время ошибка синтаксического анализа
(?!)  // Lookahead (backhead), в настоящее время ошибка синтаксического анализа
\1    // Backreference (\1, \2, \3, ...), в настоящее время ошибка синтаксического анализа
```


# Переменные

Встроенные переменные

Для удобства все константы пользователя (контакта) можно использовать в вашем коде как обычные JavaScript переменные.

### Список переменных

* `id` - ID контакта
* `bot_id` - ID бота
* `name` - Полное имя контакта
* `first_name` - Имя контакта
* `last_name` - Фамилия контакта
* `phone` - Телефон контакта
* `email` - Электронная почта контакта
* `address` - Адрес контакта
* `created_at` - Дата создания контакта в формате [`Y-m-d H:i:s`](https://www.php.net/manual/en/datetime.format.php#refsect1-datetime.format-parameters)
* `username` - Username контакта
* `telegram_id` - ID контакта в Телеграм&#x20;
* `max_id` - ID контакта в Max
* `start_message` - Стартовое сообщение пользователя перед началом использования чат-бота

### Пример

Допустим текущего пользователя зовут Дмитрий, тогда в переменную `test` запишется строка `Привет Дмитрий!`

```javascript
var test = "Привет " + first_name + "!";
```


# Функции

Список доступных встроенных функций

{% hint style="warning" %}
Все изменения данных контакта, вносимых встроенными функциями, по факту происходят только после успешного выполнения всего вашего скрипта JavaScript!&#x20;
{% endhint %}

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

{% content-ref url="/pages/KoLYIwHkenEiLMI954Mb" %}
[getContactVariable()](/js-api/funkcii/getcontactvariable)
{% endcontent-ref %}

{% content-ref url="/pages/BIGJQkKhPDA3Y4LOEwsS" %}
[setContactVariable()](/js-api/funkcii/setcontactvariable)
{% endcontent-ref %}

{% content-ref url="/pages/UVPWm2HI7clfFmBlKOjz" %}
[deleteContactVariable()](/js-api/funkcii/deletecontactvariable)
{% endcontent-ref %}

### Теги

{% content-ref url="/pages/NAny5gbW4mA61P7E4JN7" %}
[hasContactTag()](/js-api/funkcii/hascontacttag)
{% endcontent-ref %}

{% content-ref url="/pages/BJTyoWvCwCnXFAJxbZ8z" %}
[setContactTag()](/js-api/funkcii/setcontacttag)
{% endcontent-ref %}

{% content-ref url="/pages/TQC1dbwoIqe3OsZawAzV" %}
[deleteContactTag()](/js-api/funkcii/deletecontacttag)
{% endcontent-ref %}

### Глобальные переменные

{% content-ref url="/pages/CdqtvTEIbX7ikQPUbYaB" %}
[getGlobalVariable()](/js-api/funkcii/getglobalvariable)
{% endcontent-ref %}

{% content-ref url="/pages/Vafk3j1FYsqV3MvehJid" %}
[setGlobalVariable()](/js-api/funkcii/setglobalvariable)
{% endcontent-ref %}

{% content-ref url="/pages/1tkP05gCpGv2fVhGYO4s" %}
[deleteGlobalVariable()](/js-api/funkcii/deleteglobalvariable)
{% endcontent-ref %}

### Общие функции

{% content-ref url="/pages/t46vfmLOcKkz59VKdkqf" %}
[sendMessage()](/js-api/funkcii/sendmessage)
{% endcontent-ref %}

{% content-ref url="/pages/7CLjz1mzrY7v2awJzhhO" %}
[goToBlock()](/js-api/funkcii/gotoblock)
{% endcontent-ref %}

{% content-ref url="/pages/8N0wldZ7vY1vMm3Ya71z" %}
[disableContinue()](/js-api/funkcii/disablecontinue)
{% endcontent-ref %}


# getContactVariable()

Функция **getContactVariable()** возвращает значение пользовательской переменной.

### Синтаксис

```javascript
getContactVariable(name)
```

* `name` - (строка) имя пользовательской переменной

### Возвращаемые значения

* Строка
* Число
* Логический

{% hint style="info" %}
&#x20;Если пользовательская переменная не установлена, то функция вернет `undefined`
{% endhint %}

### Пример

В этом примере возвращается значение пользовательской переменной, а затем это значение записывается в переменную JavaScript `city`.

```javascript
var city = getContactVariable("Город");
```


# setContactVariable()

Функция **setContactVariable()** записывает значение в пользовательскую переменную.

### Синтаксис

```javascript
setContactVariable(name, value)
```

* `name` - (строка) имя пользовательской переменной
* `value` - (строка, число, логический) значение пользовательской переменной

### Возвращаемые значения

Эта функция ничего не возвращает.

### Пример

В этом примере значение "Москва" записывается в пользовательскую переменную "Город".

```javascript
setContactVariable("Город", "Москва");
```

{% hint style="info" %}
Если переменная не существует, то система создаст ее.
{% endhint %}


# deleteContactVariable()

Функция **deleteContactVariable()** удаляет пользовательскую переменную.

### Синтаксис

```javascript
deleteContactVariable(name)
```

* `name` - (строка) имя пользовательской переменной

### Возвращаемые значения

Эта функция ничего не возвращает.

### Пример

В этом примере происходит удаление пользовательской переменной, если она существует.

```javascript
deleteContactVariable("Город");
```


# getGlobalVariable()

Функция **getGlobalVariable()** возвращает значение глобальной переменной.

### Синтаксис

```javascript
getContactVariable(name)
```

* `name` - (строка) имя глобальной переменной

### Возвращаемые значения

* Строка

{% hint style="info" %}
&#x20;Если глобальная переменная не установлена, то функция вернет `undefined`
{% endhint %}

### Пример

В этом примере возвращается значение глобальной переменной, а затем это значение записывается в переменную JavaScript `city`.

```javascript
var city = getGlobalVariable("Город");
```


# setGlobalVariable()

Функция **setGlobalVariable()** записывает значение в глобальную переменную.

### Синтаксис

```javascript
setGlobalVariable(name, value)
```

* `name` - (строка) имя глобальной переменной
* `value` - (строка) значение глобальной переменной

### Возвращаемые значения

Эта функция ничего не возвращает.

### Пример

В этом примере значение "Москва" записывается в глобальную переменную "Город".

```javascript
setGlobalVariable("Город", "Москва");
```

{% hint style="info" %}
Если переменная не существует, то система создаст ее.
{% endhint %}


# deleteGlobalVariable()

Функция **deleteGlobalVariable()** удаляет глобальную переменную.

### Синтаксис

```javascript
deleteGlobalVariable(name)
```

* `name` - (строка) имя глобальной переменной

### Возвращаемые значения

Эта функция ничего не возвращает.

### Пример

В этом примере происходит удаление глобальной переменной, если она существует.

```javascript
deleteGlobalVariable("Город");
```


# getContactTags()

Функция **getContactTags()** возвращает список всех тегов пользователя (контакта).

### Синтаксис

```javascript
getContactTags()
```

### Возвращаемые значения

* Array


# hasContactTag()

Функция **hasContactTag()** проверяет существование тега у пользователя (контакта).

### Синтаксис

```javascript
hasContactTag(name)
```

* `name` - (строка) имя тега

### Возвращаемые значения

* Логический

### Пример

В этом примере проверяется существование тега "Админ" у пользователя.

```javascript
var exists = hasContactTag("Админ");
if (exists) {
    // Ваш код здесь
}
```


# setContactTag()

Функция **setContactTag()** назначает тег пользователю (контакту).

### Синтаксис

```javascript
setContactTag(name)
```

* `name` - (строка) имя тега

### Возвращаемые значения

Эта функция ничего не возвращает.

### Пример

В этом примере назначается тег "Админ" пользователю.

```javascript
setContactTag("Админ");
```


# deleteContactTag()

Функция **deleteContactTag()** удаляет тег у пользователя (контакта).

### Синтаксис

```javascript
deleteContactTag(name)
```

* `name` - (строка) имя тега

### Возвращаемые значения

Эта функция ничего не возвращает.

### Пример

В этом примере происходит удаление тега "Админ" у пользователя.

```javascript
deleteContactTag("Админ");
```


# sendMessage()

Функция **sendMessage()** отправляет текстовое сообщение пользователю (контакту).

### Синтаксис

```javascript
sendMessage(message)
```

* `message` - (строка) текст сообщения.

### Возвращаемые значения

Эта функция ничего не возвращает.

### Пример

В этом примере пользователю отправляется сообщение с текстом "Привет!"

```javascript
sendMessage("Привет!");
```

{% hint style="warning" %}
В одном скрипте может быть вызвано не более 10 таких функций, иначе пользователь получит сообщение об ошибке.
{% endhint %}


# goToBlock()

Функция **goToBlock()** отправляет блок сценария пользователю (контакту).

### Синтаксис

```javascript
goToBlock(id)
```

* `id` - (число) id блока.&#x20;

{% hint style="info" %}
id блока можно найти в настройках блока в самом низу.\
![](https://4152861189-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LfZGuokAo0CKridiMMF%2Fuploads%2FKonhqxKE2xYbqfW8RT0j%2Fimage.png?alt=media\&token=183b466a-0726-4cc5-abea-aba2170900b7)
{% endhint %}

### Возвращаемые значения

Эта функция ничего не возвращает.

### Пример

В этом примере пользователю отправляется блок сценария с id "123"

```javascript
goToBlock(123);
```

{% hint style="warning" %}
В одном скрипте такую функцию можно вызвать только 1 раз.
{% endhint %}


# disableContinue()

Функция **disableContinue()** отключает связь "Продолжить" у блока сценария в котором вызвана эта функция.

### Синтаксис

```javascript
disableContinue()
```

### Возвращаемые значения

Эта функция ничего не возвращает.

### Пример

В этом примере переход по связи "Продолжить" будет заблокирован.

```javascript
disableContinue();
```


# setContactById()

Функция **setContactById()** устанавливает текущий контакт для которого выполняется JavaScript-код.&#x20;

{% hint style="warning" %}
Эта функция предназначена для блока "**Входящий Webhook**" и будет работать только в нем.&#x20;

Контакт должен существовать в боте на платформе.
{% endhint %}

### Синтаксис

```javascript
setContactById(id)
```

* `id` - (число) внутренний id контакта в платформе.&#x20;

### Возвращаемые значения

* Логический

### Пример

В этом примере устанавливается контакт с id "123".

```javascript
var success = setContactById(123);
if (success) {
    // Контакт успешно установлен
}
```

{% hint style="warning" %}
В одном скрипте такую функцию можно вызвать только 1 раз.
{% endhint %}


# setContactByTelegramId()

Функция **setContactByTelegramId()** устанавливает текущий контакт для которого выполняется JavaScript-код.&#x20;

{% hint style="warning" %}
Эта функция предназначена для блока "**Входящий Webhook**" и будет работать только в нем.

Контакт должен существовать в боте на платформе.
{% endhint %}

### Синтаксис

```javascript
setContactByTelegramId(id)
```

* `id` - (число) id пользователя Телеграм.

### Возвращаемые значения

* Логический

### Пример

В этом примере устанавливается контакт с id пользователя Телеграм "123".

```javascript
var success = setContactByTelegramId(123);
if (success) {
    // Контакт успешно установлен
}
```

{% hint style="warning" %}
В одном скрипте такую функцию можно вызвать только 1 раз.
{% endhint %}


# setContactByViberId()

Функция **setContactByViberId()** устанавливает текущий контакт для которого выполняется JavaScript-код.&#x20;

{% hint style="warning" %}
Эта функция предназначена для блока "**Входящий Webhook**" и будет работать только в нем.

Контакт должен существовать в боте на платформе.
{% endhint %}

### Синтаксис

```javascript
setContactByViberId(id)
```

* `id` - (строка) id пользователя Viber.&#x20;

### Возвращаемые значения

* Логический

### Пример

В этом примере устанавливается контакт с id пользователя Viber "ABCD".

```javascript
var success = setContactByViberId("ABCD");
if (success) {
    // Контакт успешно установлен
}
```

{% hint style="warning" %}
В одном скрипте такую функцию можно вызвать только 1 раз.
{% endhint %}


# setContactByVkId()

Функция **setContactByVkId()** устанавливает текущий контакт для которого выполняется JavaScript-код.&#x20;

{% hint style="warning" %}
Эта функция предназначена для блока "**Входящий Webhook**" и будет работать только в нем.

Контакт должен существовать в боте на платформе.
{% endhint %}

### Синтаксис

```javascript
setContactByVkId(id)
```

* `id` - (число) id пользователя ВКонтакте.&#x20;

### Возвращаемые значения

* Логический

### Пример

В этом примере устанавливается контакт с id пользователя ВКонтакте "123".

```javascript
var success = setContactByVkId(123);
if (success) {
    // Контакт успешно установлен
}
```

{% hint style="warning" %}
В одном скрипте такую функцию можно вызвать только 1 раз.
{% endhint %}


# setContactByMaxId()

Функция **setContactByMaxId()** устанавливает текущий контакт для которого выполняется JavaScript-код.&#x20;

{% hint style="warning" %}
Эта функция предназначена для блока "**Входящий Webhook**" и будет работать только в нем.

Контакт должен существовать в боте на платформе.
{% endhint %}

### Синтаксис

```javascript
setContactByMaxId(id)
```

* `id` - (число) id пользователя в мессенджере Max.&#x20;

### Возвращаемые значения

* Логический

### Пример

В этом примере устанавливается контакт с id пользователя Max "123".

```javascript
var success = setContactByMaxId(123);
if (success) {
    // Контакт успешно установлен
}
```

{% hint style="warning" %}
В одном скрипте такую функцию можно вызвать только 1 раз.
{% endhint %}


# setContactByWhatsAppPhone()

Функция **setContactByWhatsAppPhone()** устанавливает текущий контакт для которого выполняется JavaScript-код.&#x20;

{% hint style="warning" %}
Эта функция предназначена для блока "**Входящий Webhook**" и будет работать только в нем.
{% endhint %}

### Синтаксис

```javascript
setContactByWhatsAppPhone(phone, name)
```

* `phone` - (строка) телефон пользователя без знака "+".
* `name` - (строка) (не обязательно) имя пользователя. Если передать этот аргумент, то функция создаст новый контакт с указанными номером телефона и именем, если контакт не найден по  такому номеру телефона.&#x20;

### Возвращаемые значения

* Логический

### Пример

В этом примере устанавливается существующий контакт на платформе с номером телефона "71234567890".

```javascript
var success = setContactByWhatsAppPhone("71234567890");
if (success) {
    // Контакт успешно установлен
}
```

В этом примере устанавливается несуществующий контакт на платформе с номером телефона "71234567890".

```javascript
var success = setContactByWhatsAppPhone("71234567890", "Иван");
if (success) {
    // Контакт успешно создан и установлен
}
```

{% hint style="warning" %}
В одном скрипте такую функцию можно вызвать только 1 раз.
{% endhint %}


# Блок "Входящий Webhook"

Особенности работы с блоком "Входящий Webhook"

Блок "Входящий Webhook" создан для приема http-запросов со сторонних ресурсов и их обработки с помощью языка JavaScript.&#x20;

<figure><img src="https://4152861189-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LfZGuokAo0CKridiMMF%2Fuploads%2FMEtRVI0MsIorfSxXCZYI%2Fimage.png?alt=media&amp;token=59f5db8a-43db-4192-bfbf-aad447b95217" alt=""><figcaption></figcaption></figure>

### Объект request

Запрос от  вашего сервера записывается в JavaScript объект `request`.

```javascript
var headers = request.headers; // Объект заголовков
var query = request.query; // Объект переменных строки запроса
var rawBody = request.body; // Сырое тело запроса
var data = request.data; // Объект всех переменных запроса, включая строку запроса, форму, тело и т.д.
```

### Примеры кода

{% hint style="info" %}
Прежде чем писать код обработки запроса, вам нужно установить текущий контакт, иначе связь "Продолжить" не отработает.
{% endhint %}

{% code fullWidth="false" %}

```javascript
// Получить внутренний ID контакта платформы из строки запроса:
var contactId = request.query.contact_id;

// Установить контакт по его id
var success = setContactById(contactId);
// Контакт установлен?
if (success) {
  // todo
}
```

{% endcode %}

**Все функции установки контакта:**

{% content-ref url="/pages/Knzhw8gSdLBfAuW0tibn" %}
[setContactById()](/js-api/funkcii/setcontactbyid)
{% endcontent-ref %}

{% content-ref url="/pages/OvmJbFyPa6m1kqTvcb9l" %}
[setContactByTelegramId()](/js-api/funkcii/setcontactbytelegramid)
{% endcontent-ref %}

{% content-ref url="/pages/VWFtYyrX2OUcnsuYJ8Bl" %}
[setContactByViberId()](/js-api/funkcii/setcontactbyviberid)
{% endcontent-ref %}

{% content-ref url="/pages/xDKMS6L67OZjIFHvqTwo" %}
[setContactByVkId()](/js-api/funkcii/setcontactbyvkid)
{% endcontent-ref %}

{% content-ref url="/pages/FykIIcsSdkpHASjbX5Hu" %}
[setContactByMaxId()](/js-api/funkcii/setcontactbymaxid)
{% endcontent-ref %}

{% content-ref url="/pages/2FdHdsRjzuu72g0Gxzaq" %}
[setContactByWhatsAppPhone()](/js-api/funkcii/setcontactbywhatsappphone)
{% endcontent-ref %}


# Блок "HTTP-запрос"

Особенности работы с блоком "HTTP-запрос"

Блок "HTTP-запрос" имеет возможность обработать ответ от сервера с помощью JavaScript.&#x20;

<div align="center"><figure><img src="https://4152861189-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LfZGuokAo0CKridiMMF%2Fuploads%2FjLDHTlrR7rCWjcX20sOG%2Fimage.png?alt=media&amp;token=8c88ac5b-6341-4868-bb79-c70ef0f116f7" alt=""><figcaption></figcaption></figure></div>

### Объект response

Ответ от сервера записывается в JavaScript объект `response`.

```javascript
var statusCode = response.status; // Код ответа от сервера
var rawBody = response.body; // Сырое тело ответа от сервера
var jsonData = response.data; // Объект ответа от сервера, если тело ответа было в формате JSON  
```


# База знаний WATBOT

{% embed url="<https://help.watbot.ru>" %}


