# Вибір контакту

Запит до блоку [«Вхідний Webhook»](https://support.watbot.org/uk/chatbots/blocks/developer/incoming-webhook) надходить не від людини, а від стороннього сервісу. Тому код сам зазначає, до якого контакту належить запит, — однією з функцій нижче. Вони є лише в цьому блоці; в інших блоках контакт уже відомий.

Спільні правила для всіх функцій:

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

## setContactById

```js
setContactById(id)
```

Знаходить контакт за його ID на платформі.

| Параметр | Тип | Що передати |
|---|---|---|
| `id` | Число або рядок із цифр | ID контакту. У сценарії його можна отримати [автопідстановкою](https://support.watbot.org/uk/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('Ваше замовлення передано в доставку.');
}
```
