# Integración con APIs de terceros

Puedes crear bots que interactúen con otros recursos mediante API. Por ejemplo, los bots pueden responder a solicitudes con la capacidad de comprobar si es posible crear una cita para una fecha determinada, o encontrar un producto en una tienda en línea.

## Cómo manejar una API de terceros usando como ejemplo DaData

Tomemos consejos de API de [https://dadata.ru/api/suggest/address ](https://dadata.ru/api/suggest/address)como ejemplo

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

Abre tu proyecto en Salebot y abre la configuración avanzada en la configuración de un bloque; allí debes cambiar el tipo de solicitud a POST-json.

En el campo “**Solicitud URL**” introduce la siguiente URL: h<ttps://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address>

En el campo “**Encabezado de la solicitud**” escribe el encabezado en formato JSON:

{ "Content-Type": "application/json", "Accept": "application/json", "Authorization": "Token " + token }

En el campo “**Parámetros JSON**” coloca en la propia solicitud - { "query": "#{CurrencyType}" }

Para obtener los resultados también necesitarás completar la pestaña “**Valores almacenados**”.

A continuación se muestra un ejemplo de la solicitud:

![](https://lh3.googleusercontent.com/QV4ldVY9n1AFFCr2jn1NQU_hZe7Iug-Xh5d4KLWtAZNQEyQ9WPLu1mV7mPcFjfjAKaPGO2Wi148J4AAF3kmU0wmhLYwBy6LgDXbFRgteh0Nrtu29LhqSgTg6d14Ts8pvanwWUJQAVTUThYp6Lg)

### Cómo guardar valores de variables

No todos lo entienden al instante, hasta que lo intentas tú mismo.

Para empezar, escribe #{custom\_answer} en el campo de respuesta. (La variable #{custom\_answer} contiene la respuesta obtenida del servidor que se mencionó en el campo “URL para una respuesta del servidor”)

Lanza el bloque con la solicitud para enviar la solicitud y obtener una respuesta. Debes analizar la respuesta y configurar el acceso a las variables en ella. Para ello, necesitas trabajar con la pestaña “Valores almacenados”.

Veamos un ejemplo para entender mejor el proceso.

Como resultado de nuestra solicitud #{custom\_answer} llegó una respuesta con el formato:

`{"suggestions": [{"value": "Libra esterlina", "unrestricted_value": "Libra esterlina", "data": {"code": "826", "strcode": "GBP", "name": "Libra esterlina", "country": "Reino Unido"}}]}`

Ahora escribamos en el campo “Valores almacenados” nuestro VALOR->VARIABLE

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

**suggestions** - la clave del array \[{"value": "Libra esterlina", "unrestricted\_value": "Libra esterlina", "data": {"code": "826", "strcode": "GBP", "name": "Libra esterlina", "country": "Reino Unido"}}]

**suggestions|0** - la clave del primer elemento del array {"value": "Libra esterlina", "unrestricted\_value": "Libra esterlina", "data": {"code": "826", "strcode": "GBP", "name": "Libra esterlina", "country": "Reino Unido"}}

**suggestions|0|value** - la clave del valor “Libra esterlina”

La clave más larga en este JSON:

**suggestions|0|data|strcode** - la clave del valor “GBP”

{% hint style="success" %}
Las claves se separan con la línea vertical (|). Si hay un array en JSON, entonces el acceso a su elemento se numera, empezando con el número 0, y también se escribe con la línea vertical.
{% endhint %}

{% hint style="info" %}
Es necesario repetir toda la anidación. Para mayor comodidad puedes visualizar JSON en una aplicación JSON-viewer.
{% endhint %}

Los niveles de anidación se separan con líneas verticales. Así que necesitas enumerar todas las claves separadas por la línea para llegar al valor.

{% hint style="info" %}
Si hay un array en JSON, entonces en lugar de la clave necesitas indicar el número del elemento empezando desde 0.
{% endhint %}

Separa las frases de obtención de variables con el símbolo de punto y coma (;). Las frases constan del enlace a los datos en la respuesta y del nombre de la variable en la que guardarlos, que se separan con los símbolos -> (guion + signo mayor que).

La consulta de búsqueda es, en cierto modo, una ruta en JSON hacia el valor necesario.

### Desarrollar API para bots

Para desarrollar una API, necesitarás un hosting en el que se base. Si no tienes uno o no eres un experto en programación, entonces puedes ponerte en contacto con nosotros y desarrollaremos la API para tu bot y la alojaremos en la nuestra. El hosting en sí es gratuito, solo pagarás por el desarrollo.

#### Pero por ahora, un poco de teoría.

El bot admite las **GET** y **POST** solicitudes, estos son los principales tipos que se utilizan en la mayoría de las APIs públicas.

**GET** es una solicitud que ocurre al hacer clic en el enlace o al abrir el enlace en el navegador. Los parámetros en una solicitud de este tipo se transfieren a las solicitudes URL.

La sintaxis de los parámetros transferidos: después de la URL hay un signo de interrogación (?) y luego cada parámetro se separa con el símbolo ampersand (&). Un parámetro consta del nombre y su valor después del signo igual (=). Un ejemplo de una URL con un parámetro:

![](https://lh6.googleusercontent.com/c4xJMMuFKVsFJW_3nDTzUmhvejIUtIKsg-kEA8_PT05vlmmAfDgritAtxwh_5sq3-YwOuy8dw4LVYbesWa4Yy-QjUx3gIbF-54_omadX1SFFaa8K6HirvD-qycd4D6tjSBpkRLAB)

Aquí puedes ver que se comparte un parámetro llamado “search\_query” y que su valor es “queen live aid”. El ‘+’ aquí representa el espacio entre las palabras; cuando trabajes con el software de edición puedes simplemente dejar los espacios: el bot lo cambiará por sí mismo.

**POST** es un tipo de solicitud que se envía al completar un formulario en un sitio web, la mayoría de las veces. La solicitud transfiere los parámetros en el cuerpo; por supuesto, pueden compartirse de la misma manera que GET, pero rara vez se hace así. El parámetro en el cuerpo puede estar en formato JSON o como clave-valor. Como clave-valor, los parámetros se comparten en formularios; el formato JSON es el que se usa con más frecuencia para API.

**Encabezado de la solicitud.** Cada solicitud puede tener un encabezado/título añadido. En él se escriben con mayor frecuencia el formato de los datos compartidos y las claves de acceso. Normalmente dejamos esta pestaña vacía, pero en ocasiones raras es necesario introducir el Token de la API o el tipo de solicitud “Content-type”: “application/json”.

**JSON** - (Notación de Objetos de JavaScript) es un formato abierto de archivo y un formato de intercambio de datos que utiliza texto legible por humanos para almacenar y transmitir objetos de datos que consisten en pares atributo-valor y matrices. Para trabajar con la API en bots tienes que conocer este formato; todo se basa en él.

Antes de continuar, lee los siguientes artículos:

[https://www.json.org/json-en.html ](<https://www.json.org/json-en.html >)\
<https://developer.mozilla.org/en-US/docs/learn/javascript/objects/json>

Y también intenta crear tu propio archivo JSON en este sitio:

<https://jsoneditoronline.org>

#### Práctica

Los bloques y las condiciones pueden responder a solicitudes. Las solicitudes de condición se crean para entender en el sitio si el diálogo puede seguir un determinado camino o no. La solicitud en este caso ocurre cada vez que se comprueba la condición del camino. Las solicitudes de los bloques, por el contrario, solo se ejecutan cuando ocurre el paso al bloque.

Antes de crear una solicitud necesitas elegir su tipo:

![](https://lh5.googleusercontent.com/jDLVxBLwNSrmSb9t6LTuwuuifA3X-U9PNhLi7YvCrLj36uyDjiP-FymTpUXg1fhSewb63UslJbHhndLsefusieLdYSe4oNWMBGWuceHWWNg5VrRddIHXbGVwqhDMFFUR5Xk4YZLYXfM2hcNP9w)

POST-data y POST-json se diferencian por el método de transferencia de parámetros mencionado anteriormente (formato JSON o como clave-valor). Si eliges JSON, entonces los parámetros solo pueden transferirse en la solicitud. Se abre un campo adicional para el post: parámetros POST-JSON. **¡Importante!** Los parámetros deben escribirse únicamente en formato JSON; el bot solo funciona así.

La respuesta del servidor puede analizarse y guardarse en las variables.

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

Las variables guardadas se escriben en el último envío no completado; si el envío se transfiere a través de un bloque rojo, las variables se anulan. Así que si necesitas guardar los datos, debes transferir las variables a través del bloque amarillo.

Por cierto, puedes ver lo que el bot ha escrito en las variables en la sección Leads:

![](https://lh3.googleusercontent.com/e6mzwKUgxl22YqWNmN3HI0afQKM8gcU2OR_E_7Q3NSEzx0n45QLGXI4_UsaWaK52z7-QnULWmfSqCeZhfStALhung9LpFoK2i9EGhNccUcgo-E-7ONrkb7Aj2GEzd0DMDTxLsviV)

### Transferencia de datos no como una línea

Por defecto, el valor de la variable viene en formato #{} pero luego viene como una línea. Para que la variable se transfiera como un número, necesitas desactivar la comprobación del formato de los parámetros post-json.

![](https://lh4.googleusercontent.com/KDDSAYd7NeXu0c7jL45ktnPPeWy7G_YJS-xrf1jvAXf1aKYKGh781E1oGmnS8fw0PbpynqG0lXyqZwK_RfuCC3ezal4-Iu0lo7y5zsNQUT6i21J4C2hb9xw6DF30wReKLorcLliS)

Entonces puedes simplemente indicar el nombre de la variable, como {"key": #{variable\_name}}, variable\_name es la variable, así que sin usar corchetes.

{% hint style="warning" %}
Después de configurar los parámetros, se recomienda volver a activar la comprobación.
{% 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/integrations/api/request.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.
