# Выбор контакта

Запрос в блок [«Входящий Webhook»](https://support.watbot.ru/chatbots/blocks/developer/incoming-webhook) приходит не от человека, а от стороннего сервиса. Поэтому код сам указывает, к какому контакту относится запрос, — одной из функций ниже. Они есть только в этом блоке; в остальных блоках контакт уже известен.

Общие правила для всех функций:

- Контакт ищется только среди контактов этого бота. Удалённые контакты не находятся.
- **Возвращает** `true`, если контакт найден, и `false`, если нет.
- За один запрос можно вызвать только одну функцию и только один раз. Второй вызов — даже другой функции — завершит код с ошибкой, и блок ответит кодом `422`.
- Хотя бы одна функция должна быть записана в коде. Без неё блок не запустит код и ответит `422`.
- После того как контакт найден, коду становятся доступны его [встроенные переменные](https://support.watbot.ru/api/javascript/builtins#данные-контакта), переменные и теги. До этого переменные контакта пусты, а обращение к `id`, `name` и другим данным контакта остановит код с ошибкой.
- Если контакт не найден или функция не вызывалась, код выполнится, но ничего не сохранит: переменные, теги и глобальные переменные не запишутся, сообщения не уйдут, переход и связь «Продолжить» не сработают. Блок ответит `200` с сообщением `Code executed without setting contact`.

## setContactById

```js
setContactById(id)
```

Находит контакта по его ID на платформе.

| Параметр | Тип | Что передать |
|---|---|---|
| `id` | Число или строка из цифр | ID контакта. В сценарии его можно получить [автоподстановкой](https://support.watbot.ru/chatbots/templates/data#данные-контакта) `{{ id }}` |

```js
if (setContactById(request.query.contact_id)) {
    setContactVariable('оплата', 'получена');
    sendMessage('Оплата получена, начинаем собирать ваш букет.');
}
```

Чтобы сторонний сервис знал ID, передайте его заранее — например, в ссылке на оплату или блоком «HTTP-запрос».

## setContactByTelegramId

```js
setContactByTelegramId(id)
```

Находит контакта по ID человека в Telegram.

| Параметр | Тип | Что передать |
|---|---|---|
| `id` | Число или строка из цифр | ID пользователя Telegram — то же, что в переменной `telegram_id` |

```js
var message = request.data.message;

if (message && message.from && setContactByTelegramId(message.from.id)) {
    setContactTag('писал_в_группе');
}
```

## setContactByMaxId

```js
setContactByMaxId(id)
```

Находит контакта по ID человека в MAX.

| Параметр | Тип | Что передать |
|---|---|---|
| `id` | Число или строка из цифр | ID пользователя MAX — то же, что в переменной `max_id` |

```js
if (setContactByMaxId(request.data.user_id)) {
    sendMessage('Курьер уже в пути.');
}
```

## setContactByVkId

```js
setContactByVkId(id)
```

Находит контакта по ID человека во ВКонтакте.

| Параметр | Тип | Что передать |
|---|---|---|
| `id` | Число или строка из цифр | ID пользователя ВКонтакте — число без `id` в начале |

```js
if (setContactByVkId(request.data.vk_user_id)) {
    setContactTag('оставил_отзыв');
}
```

## setContactByViberId

```js
setContactByViberId(id)
```

Находит контакта по ID человека в Viber.

| Параметр | Тип | Что передать |
|---|---|---|
| `id` | Строка | ID пользователя Viber — строка из букв, цифр и знаков, её нельзя превращать в число |

```js
if (setContactByViberId(request.data.viber_id)) {
    sendMessage('Ваш заказ передан в доставку.');
}
```
