# Integración con APIs de terceros

Puedes crear bots que interactúen con otros servicios a través de API. Por ejemplo, los bots pueden hacer solicitudes para comprobar la disponibilidad de una fecha específica o para encontrar un producto en una tienda en línea.

## Cómo interactuar con API de terceros usando Dadata como ejemplo

Tomemos como ejemplo una API de sugerencias de direcciones: <https://dadata.ru/api/suggest/address/> <mark style="color:rojo;">**el enlace será diferente**</mark>

{% hint style="info" %}
Lee atentamente la documentación de las API de terceros.
{% endhint %}

{% hint style="warning" %}
¡Ten en cuenta! Las API de terceros requieren las direcciones IP desde las que se enviarán las solicitudes: 158.160.49.208 – sitio web.
{% endhint %}

En el campo "Request URL", introduce `https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address`.

En la **"Request header"** campo, introduce el encabezado en formato JSON: `{"Content-Type": "application/json", "Accept": "application/json", "Authorization": "Token " + token}`.

En la **"JSON parameters"** campo, introduce la propia solicitud: `{"query": "#{CurrencyType}"}`.

Para obtener el resultado de la solicitud, completa el **"Saved values"** campo.

Un ejemplo de la solicitud se muestra en la ilustración de abajo.

![](/files/fb3b6f8d912f85d4a60d46fd9421a414c12204e4)

### Cómo guardar valores de variables

Puede que no quede completamente claro la primera vez; realmente necesitas probarlo tú mismo.

Primero, introduce #{custom\_answer} en el campo "Answer". (La variable #{custom\_answer} contiene la respuesta recibida del servidor especificado en el campo "Response URL".)

Ejecuta el bloque de solicitud para enviar la solicitud y obtener la respuesta. La respuesta recibida debe analizarse, y debes configurar qué variables extraer de ella. Para ello, usa el campo "Saved Values".

Repasemos el ejemplo descrito arriba.

La mejor manera de entender cómo acceder a datos en JSON es con un ejemplo. Como resultado de nuestra solicitud, la respuesta recibida en #{custom\_answer} se ve así:

`{\r"suggestions": [\r{\r"value": "US Dollar",\r"unrestricted_value": "US Dollar",\r"data": {\r"code": "840",\r"strcode": "USD",\r"name": "US Dollar",\r"country": "United States"\r}\r}\r]\r}`

En el campo "Saved values", introduce VALUE -> VARIABLE:

`suggestions|0|value->CurrencyType;` \
`suggestions|0|data|code->CurrencyDigCode;` \
`suggestions|0|data|strcode->CurrencyStrCode;` \
`suggestions|0|data|country->CurrencyCountry`

**suggestions -** clave para el array \[{"value": "US Dollar", "unrestricted\_value": "US Dollar", "data": {"code": "840", "strcode": "USD", "name": "US Dollar", "country": "United States"}}]

**suggestions|0** - clave para el primer elemento del array {"value": "US Dollar", "unrestricted\_value": "US Dollar", "data": {"code": "840", "strcode": "USD", "name": "US Dollar", "country": "United States"}}

**suggestions|0|value** - clave para el valor "US Dollar"

La clave más larga en este JSON:

**suggestions|0|data|strcode** - clave para el valor "USD"

{% hint style="success" %}
Las claves se separan con una barra vertical (|). Si un elemento JSON es un array, accedes a sus elementos por índice, comenzando desde 0, y esto también se escribe usando una barra vertical.
{% endhint %}

{% hint style="info" %}
Debes repetir toda la anidación. Para mayor comodidad, puedes visualizar el JSON usando una aplicación visor de JSON.
{% endhint %}

El nivel de anidación se separa con una barra vertical. Es decir, debes enumerar todas las claves para llegar al valor, separándolas con una barra vertical.

{% hint style="info" %}
Si el JSON contiene un array, usa el índice del elemento en lugar de una clave, comenzando desde cero.
{% endhint %}

Separa las expresiones para obtener nuestras variables con un punto y coma ;.

Cada expresión consta de la ruta a los datos en la respuesta y del nombre de la variable donde guardarla, separados por ->.

La consulta de búsqueda representa la ruta en el JSON hacia el valor requerido.

### Desarrollo de API para bots

El bot admite solicitudes GET y POST, que son los principales tipos utilizados en la mayoría de las API públicas.

**GET** es una solicitud que ocurre cuando haces clic en un enlace o abres una URL en un navegador. Los parámetros en esta solicitud se pasan en la URL.

Sintaxis para pasar parámetros: después de la URL, coloca un signo de interrogación ?, luego separa cada parámetro con un ampersand &. Cada parámetro consiste en un nombre seguido de = y su valor.

Ejemplo de una URL con un parámetro:

![Fig. 3](/files/0a92e54e2f37b7f3db4ed3f09c9b6d5e4cfc8f51)

Aquí, se pasa un único parámetro q con el valor "good music". %20 representa un espacio.

Al trabajar con el generador, puedes usar simplemente un espacio: el bot lo reemplazará automáticamente.

**POST** es una solicitud que normalmente se envía al enviar un formulario en un sitio web. Los parámetros se envían en el cuerpo de la solicitud. Aunque también pueden enviarse en la URL como en las solicitudes GET, esto es poco común. Los parámetros en el cuerpo pueden estar en formato JSON o como pares clave-valor. Los formularios suelen enviar pares clave-valor, mientras que las API suelen usar JSON.

**Encabezado de la solicitud** - puedes añadir un encabezado a cada solicitud. Lo más habitual es que especifique el formato de los datos y las claves de acceso. Normalmente, este campo se deja vacío, pero en casos poco frecuentes, necesitas incluir un token de API o un tipo de solicitud, por ejemplo, "Content-Type": "application/json".

**JSON** (Notación de Objetos de JavaScript, normalmente pronunciado /ˈdʒeɪsən/ JAY-sən) es un formato de intercambio de datos basado en texto y en JavaScript. Como muchos otros formatos de texto, JSON es fácil de leer para las personas. Para trabajar con API en el bot, necesitas entender este formato, ya que subyace a todas las interacciones.

Antes de continuar, lee los siguientes artículos:

<https://www.json.org/json-ru.html>\
<https://developer.mozilla.org/ru/docs/Learn/JavaScript/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B/JSON>

Además, intenta crear tu propio archivo JSON en este sitio web:

<https://jsoneditoronline.org/>

**Práctica**&#x20;

Las solicitudes pueden ejecutarse mediante bloques y condiciones. Las solicitudes condicionales están diseñadas para comprobar si un diálogo puede seguir una determinada rama en el sitio. En este caso, la solicitud se envía cada vez que se evalúa la condición de la rama. Las solicitudes en bloques, por otro lado, se ejecutan solo cuando el diálogo entra en ese estado.

Antes de crear una solicitud, debes elegir su tipo:

![](/files/117112fdde5db686ed4629243e5ce4294f08c777)

POST-data y POST-JSON difieren en cómo se envían los parámetros, como se mencionó antes (ya sea en formato JSON o como pares clave-valor). Si eliges JSON, los parámetros solo pueden enviarse en el cuerpo de la solicitud. Aparecerá un campo adicional para los parámetros JSON de POST.

**¡Importante!** Los parámetros deben escribirse solo en formato JSON, ya que el bot trabaja exclusivamente con él. Ya has practicado escribir JSON.

La respuesta del servidor puede analizarse y guardarse en variables.&#x20;

{% hint style="info" %}
Solo puedes analizar una respuesta si está en formato JSON.
{% endhint %}

Las variables guardadas se registran en el último formulario sin completar. Si el formulario se envía a través de un bloque rojo, las variables se descartan. Por lo tanto, si necesitas guardar estos datos, pasa las variables al sistema CRM mediante un bloque amarillo.

También puedes ver lo que el bot ha registrado en las variables en la sección "Leads".

![Fig. 8](/files/d3d3503dd33f7b06335d69fc4dcf9ac6ebcd70fb)

### Pasar variables no como una cadena

De forma predeterminada, los valores de las variables deben ser cadenas en el formato "#{}", pero en este caso, la variable se envía como una cadena. Para pasar una variable como número, debes desactivar la verificación del formato de parámetros en la configuración del proyecto:

<figure><img src="/files/68de18262e74ae72e93118e81534c5487a88baa5" alt=""><figcaption></figcaption></figure>

Entonces puedes usar simplemente el nombre de la variable, por ejemplo: `{"key": #{variable_name}}`, donde variable\_name es la propia variable, sin comillas alrededor.

{% hint style="warning" %}
Se recomienda volver a activar la verificación del formato después de configurar los parámetros.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mavibot.ai/doc/es/trabajar-con-la-api/integracion-con-apis-de-terceros.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
