# Elegir un contacto

Una solicitud al bloque [«Webhook entrante»](https://support.jetbot24.ru/es/chatbots/blocks/developer/incoming-webhook) no llega de una persona, sino de un servicio externo. Por eso el propio código indica a qué contacto pertenece la solicitud, con una de las funciones de abajo. Solo existen en este bloque; en los demás bloques el contacto ya se conoce.

Reglas comunes a todas las funciones:

- El contacto se busca solo entre los contactos de este bot. Los contactos eliminados no se encuentran.
- **Devuelven** `true` si se encuentra el contacto, y `false` si no.
- Solo se puede llamar a una función por solicitud, y una sola vez. Una segunda llamada, aunque sea a otra función, termina el código con un error, y el bloque responde con el código `422`.
- El código debe contener al menos una de estas funciones. Sin ella, el bloque no ejecuta el código y responde con `422`.
- Una vez encontrado el contacto, el código puede usar sus [variables integradas](https://support.jetbot24.ru/es/api/javascript/builtins#datos-del-contacto), sus variables y sus etiquetas. Antes de eso, las variables del contacto están vacías, y referirse a `id`, `name` y otros datos del contacto detiene el código con un error.
- Si no se encuentra el contacto o no se llamó a ninguna función, el código se ejecuta pero no guarda nada: no se escriben variables, etiquetas ni variables globales, no se envían mensajes, y ni el salto ni la conexión «Continuar» se activan. El bloque responde con `200` y el mensaje `Code executed without setting contact`.

## setContactById

```js
setContactById(id)
```

Encuentra al contacto por su ID en la plataforma.

| Parámetro | Tipo | Qué pasar |
|---|---|---|
| `id` | Un número o una cadena de dígitos | El ID del contacto. En un flujo puedes obtenerlo con la [plantilla](https://support.jetbot24.ru/es/chatbots/templates/data#datos-del-contacto) `{{ id }}` |

```js
if (setContactById(request.query.contact_id)) {
    setContactVariable('payment', 'received');
    sendMessage('Pago recibido, empezamos a preparar tu ramo.');
}
```

Para que el servicio externo conozca el ID, pásaselo de antemano: por ejemplo, en el enlace de pago o con un bloque «Solicitud HTTP».

## setContactByTelegramId

```js
setContactByTelegramId(id)
```

Encuentra al contacto por el ID de la persona en Telegram.

| Parámetro | Tipo | Qué pasar |
|---|---|---|
| `id` | Un número o una cadena de dígitos | El ID del usuario en Telegram, el mismo que en la variable `telegram_id` |

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

if (message && message.from && setContactByTelegramId(message.from.id)) {
    setContactTag('wrote_in_group');
}
```

## setContactByMaxId

```js
setContactByMaxId(id)
```

Encuentra al contacto por el ID de la persona en MAX.

| Parámetro | Tipo | Qué pasar |
|---|---|---|
| `id` | Un número o una cadena de dígitos | El ID del usuario en MAX, el mismo que en la variable `max_id` |

```js
if (setContactByMaxId(request.data.user_id)) {
    sendMessage('El repartidor va de camino.');
}
```

## setContactByVkId

```js
setContactByVkId(id)
```

Encuentra al contacto por el ID de la persona en VK.

| Parámetro | Tipo | Qué pasar |
|---|---|---|
| `id` | Un número o una cadena de dígitos | El ID del usuario en VK, un número sin `id` al principio |

```js
if (setContactByVkId(request.data.vk_user_id)) {
    setContactTag('left_review');
}
```

## setContactByViberId

```js
setContactByViberId(id)
```

Encuentra al contacto por el ID de la persona en Viber.

| Parámetro | Tipo | Qué pasar |
|---|---|---|
| `id` | Cadena | El ID del usuario en Viber, una cadena de letras, dígitos y símbolos; no lo conviertas en número |

```js
if (setContactByViberId(request.data.viber_id)) {
    sendMessage('Tu pedido se entregó para su reparto.');
}
```
