# API de Facebook

### Qué es un menú persistente

Un menú persistente te permite crear y enviar un menú de las funciones principales de tu negocio, como el horario comercial, las ubicaciones de las tiendas y los productos. Siempre estará visible durante la conversación de una persona con tu empresa en Messenger.

<figure><img src="/files/9e0163ed2dba836833838b63a1194392d5958d50" alt="" width="230"><figcaption></figcaption></figure>

#### Botones compatibles:

El menú persistente consiste en un conjunto de botones. Los siguientes tipos de botones son compatibles en el menú persistente:

● Botones URL (web\_url)\
● Botones de devolución de llamada (postback)

### Cómo agregar un menú persistente para una página específica

**respuesta = fb\_set\_persistent\_menu("group\_id", buttons)**, donde:\
**group\_id** - ID del bot de Facebook, (se puede encontrar en el **"Canal"** menú de MaviBot)\
**buttons** - un diccionario que contiene botones

**Ejemplo de cómo estructurar el diccionario de botones**:\
buttons = {"default": \[\["postback", "Botón 1", "callback\_text 1"], \["postback", "Botón 2", "callback\_text 2"], \["web\_url", "Enlace del sitio", "<https://mavibot.ai/"]]}>

**predeterminado** - una clave obligatoria que define el array de botones que se mostrarán en el menú por defecto, independientemente de la localización del usuario.\
El valor debe ser un array de botones. Cada botón se describe como un array separado en el siguiente formato:\
\["button\_type", "Texto visible del botón", "Texto de callback enviado al bot"]

**Tipos de botones y su descripción:**\
\&#xNAN;*- botón de callback:*\
\["postback", "Texto visible del botón", "Texto de callback enviado al bot"]\
\&#xNAN;*- botón URL:*\
\["web\_url", "Texto visible del enlace", "<https://example.com>"]

### Cómo configurar el menú según la localización del usuario

Puedes configurar botones para diferentes regiones añadiendo claves adicionales al diccionario de botones correspondientes a locales específicos.

Por ejemplo, para añadir botones para la configuración regional en inglés:

buttons = {"default": \[\["postback", "Botón 1", "callback\_text 1"], \["postback", "Botón 2", "callback\_text 2"], \["web\_url", "Enlace del sitio", "<https://mavibot.ai/>"]], **"en\_EN"**: \[\["postback", "Botón", "callback\_text 1"], \["postback", "Botón 2", "callback\_text 2"], \["web\_url", "Enlace", "<https://mavibot.ai/"]]}>

{% hint style="info" %}
Nota: En este caso, la clave representa la configuración regional para la cual se mostrarán los botones.
{% endhint %}

**Locales compatibles**:\
af\_ZA, ar\_AR, as\_IN, az\_AZ, be\_BY, bg\_BG, bn\_IN, br\_FR, bs\_BA, ca\_ES, cb\_IQ, co\_FR, cs\_CZ, cx\_PH, cy\_GB, da\_DK, de\_DE, el\_GR, en\_GB, en\_UD, en\_US, es\_ES, es\_LA, et\_EE, eu\_ES, fa\_IR, ff\_NG, fi\_FI, fo\_FO, fr\_CA, fr\_FR, fy\_NL, ga\_IE, gl\_ES, gn\_PY, gu\_IN, ha\_NG, he\_IL, hi\_IN, hr\_HR, hu\_HU, hy\_AM, id\_ID, is\_IS, it\_IT, ja\_JP, ja\_KS, jv\_ID, ka\_GE, kk\_KZ, km\_KH, kn\_IN, ko\_KR, ku\_TR, lt\_LT, lv\_LV, mg\_MG, mk\_MK, ml\_IN, mn\_MN, mr\_IN, ms\_MY, mt\_MT, my\_MM, nb\_NO, ne\_NP, nl\_BE, nl\_NL, nn\_NO, or\_IN, pa\_IN, pl\_PL, ps\_AF, pt\_BR, pt\_PT, qz\_MM, ro\_RO, ru\_RU, rw\_RW, sc\_IT, si\_LK, sk\_SK, sl\_SI, so\_SO, sq\_AL, sr\_RS, sv\_SE, sw\_KE, sz\_PL, ta\_IN, te\_IN, tg\_TJ, th\_TH, tl\_PH, tr\_TR, tz\_MA, uk\_UA, ur\_PK, uz\_UZ, vi\_VN, zh\_CN, zh\_HK, zh\_TW

### Cómo agregar un menú persistente para un usuario específico

Para hacer esto, establece el tercer parámetro de la función fb\_set\_persistent\_menu en 1, así: respuesta = fb\_set\_persistent\_menu('group\_id', buttons, 1)

Este menú estará disponible para el usuario para el que se llamó la función.

{% hint style="info" %} <mark style="color:rojo;">**NOTA**</mark> . **La actualización** de un menú persistente **a nivel de usuario** surte efecto en tiempo real.\
Sin embargo, la actualización de un menú persistente a nivel de página puede tardar hasta 24 horas.

La configuración a nivel de usuario <mark style="color:rojo;">está limitada</mark> a una tasa de 10 llamadas por usuario cada 10 minutos.
{% endhint %}

### Cómo deshabilitar todas las comunicaciones excepto el menú persistente

Para hacer que el menú persistente sea la única forma en que un usuario pueda interactuar con tu bot de Messenger, debes deshabilitar el compositor.

#### ¿Por qué harías esto?

Es útil cuando tu bot está diseñado para un propósito específico o un conjunto predefinido de opciones.

#### ¿Cómo hacerlo?

Para deshabilitar el compositor, pasa 1 como cuarto parámetro en la función:

para deshabilitar el compositor a nivel de página (para todos los usuarios):\
**response = fb\_set\_persistent\_menu('group\_id', buttons, '', 1)**\
para deshabilitar el compositor para el usuario para quien se llama la función:\
**response = fb\_set\_persistent\_menu('group\_id', buttons, 1, 1)**\
donde:\
**group\_id** - ID del bot de Facebook, (se puede encontrar en el **"Canal"** menú de MaviBot)\
**buttons** - un diccionario que contiene botones

Si tiene éxito, la función devuelve:\
{"result":"success"}

De lo contrario, devuelve una descripción del error.\
'Error parse buttons data' - error en el diccionario de botones\
{"error":{"message":"(#100) param persistent\_menu\[0]\[call\_to\_actions] must be non-empty.","type":"OAuthException","code":100,"fbtrace\_id":"AJtVczu7TEJJxbMfnO"}}

#### EJEMPLOS:

**Agregar un menú para todos los usuarios:**

```
buttons = {"default": [["postback", "Botón 1", "callback_text 1"], ["postback", "Botón 2", "callback_text 2"], ["web_url", "Enlace del sitio", "https://mavibot.ai/"]], "en_EN": [["postback", "Botón", "callback_text 1"], ["postback", "Botón 2", "callback_text 2"], ["web_url", "Enlace", "https://mavibot.ai/"]]}
response = fb_set_persistent_menu('123456789', buttons)
```

**Agregar un menú para todos los usuarios y hacer que este menú sea el único método de comunicación para todos:**

```
buttons = {"default": [["postback", "Botón 1", "callback_text 1"], ["postback", "Botón 2", "callback_text 2"], ["web_url", "Enlace del sitio", "https://mavibot.ai/"]], "en_EN": [["postback", "Botón", "callback_text 1"], ["postback", "Botón 2", "callback_text 2"], ["web_url", "Enlace", "https://mavibot.ai/"]]}
response = fb_set_persistent_menu('123456789', buttons, '', 1)
```

**Agregar un menú para el usuario que ingresó al bloque que llama a la función:**

```
buttons = {"default": [["postback", "Botón 1", "callback_text 1"], ["postback", "Botón 2", "callback_text 2"], ["web_url", "Enlace al sitio", "https://mavibot.ai/"]]}
response = fb_set_persistent_menu('123456789', buttons, 1)
```

**Agregar un menú para el usuario que ingresó al bloque que llama a la función, y hacer que este menú sea el único método de comunicación para todos los usuarios:**

```
buttons = {"default": [["postback", "Botón 1", "callback_text 1"], ["postback", "Botón 2", "callback_text 2"], ["web_url", "Enlace al sitio", "https://mavibot.ai/"]]}
response = fb_set_persistent_menu('123456789', buttons, 1, 1)
```

### Eliminar el menú persistente a nivel de página (para todos los usuarios):

**response = fb\_delete\_persistent\_menu('group\_id')**

Si tiene éxito, la función devuelve:\
{"result":"success"}

De lo contrario, devuelve una descripción del error.\
'Bot not found'

### Eliminar el menú persistente a nivel de usuario:

**response = fb\_delete\_persistent\_menu('group\_id', 1)**

Si tiene éxito, la función devuelve:\
{"result":"success"}

De lo contrario, devuelve una descripción del error.

**"Bot no encontrado"**


---

# 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/chatbot/mensajeros/facebook-messenger/api.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.
