Lección #109: ¿Cómo utilizar Solicitud Externa / Contenido Dinámico?

Por: GPTBOTLABS

julio 4, 2024

External Request te permite integrar tu bot con cualquier sistema que tenga una API. Puedes usar External Requests para obtener datos de cualquier otro sistema y mostrarlos al usuario dentro de tu Chatbot.

¿Cómo utilizar la solicitud externa?

En el generador de flujo, agregue Acciones ➡ Solicitud de API externa.

¿Cómo guardar datos en un campo personalizado?

Puede utilizar el mapeo de respuestas para guardar datos de la API en un campo personalizado si la API devuelve datos en formato JSON. Muchas veces, es posible que desee obtener datos de una API y mostrarlos al usuario.

Por ejemplo, utilizaremos una API de cambio de divisas para mostrar cómo se pueden guardar los datos devueltos por una API en un campo personalizado. A continuación, se muestra la respuesta de la API.

{
    "success": true,
    "timestamp": 1519296206,
    "base": "EUR",
    "date": "2021-03-17",
    "rates": {
        "AUD": 1.566015,
        "CAD": 1.560132,
        "CHF": 1.154727,
        "CNY": 7.827874,
        "GBP": 0.882047,
        "JPY": 132.360679,
        "USD": 1.23396
    }
}

Si queremos mostrar el valor en USD, deberá utilizar rates.USD . Le recomendamos que pruebe su solicitud, copie la respuesta y utilice este servicio para obtener el JSONPath correcto. También puede utilizar este servicio para verificar si su JSONPath es correcto. No es necesario iniciar su JSONPath con x.

Hay dos formas de mostrar los datos devueltos desde una API al usuario dentro de su bot. Puede guardar los datos en un campo personalizado mediante el mapeo de respuesta y usar el campo personalizado en su flujo para mostrar los datos al usuario. Además, su API podría devolver mensajes listos para mostrarse al usuario final dentro de su bot ( Contenido dinámico ). Los contenidos dinámicos se explican a continuación en este artículo.

¿Cómo obtener el código de estado HTTP o el cuerpo completo de la respuesta?

En la asignación de respuesta, utilice http_status_code para obtener el código de respuesta y http_response_body para obtener el cuerpo completo de la respuesta. Una vez que guarde el código de estado HTTP en un campo personalizado, puede utilizar condiciones para realizar cualquier lógica que desee. Para descargar un archivo, utilice http_download_EXTENSION. Por ejemplo, para descargar audio, puede utilizar http_download_mp3 .

Contenido dinámico

Los contenidos dinámicos te permiten generar contenido desde tu servidor y mostrarlo al usuario dentro de tu Chatbot. El contenido dinámico es compatible con todos los canales. Utilizas un único formato que funciona en todos los canales. Nuestra plataforma convierte automáticamente tu mensaje en tiempo real y lo entrega al usuario.

No puede utilizar la función de contenido dinámico si no es el propietario de la API de la que obtiene los datos. En este caso, puede guardar los datos de la API en un campo personalizado mediante el mapeo de respuestas y mostrar los datos mediante el campo personalizado en el generador de flujos.

El formato de respuesta se muestra a continuación.

{
    "messages": [],
    "actions": []
}

Mensajes : contiene los mensajes que se envían a los contactos. Puedes enviar cualquier mensaje compatible con Messenger Bots. Este artículo muestra algunos ejemplos de formato, pero puedes leer la documentación de Facebook si necesitas más funciones.

GPTBOTLABS envía un encabezado ‘ X-USER-ID ‘ en cada solicitud.

quick_replies siempre es opcional.

Enviar un mensaje de texto.

{
    "messages": [
        {           
            "message": {
                "text": "Hello world",
                "quick_replies":[]
            }
            
        }
    ]
}

Enviar más de un mensaje

{
    "messages": [
        {
            "message": {
                "text": "Hello world"
            }
        },
        {
            "message": {
                "text": "This is the second Message",
                "quick_replies":[]
            }
        }
    ]
}

Envío de un mensaje de texto con botones.
El mensaje de texto puede contener hasta 3 botones. El título de cada botón puede contener hasta 20 caracteres. Para enviar un flujo cuando un usuario hace clic en un botón, utilice un ID de flujo como carga útil del botón.

{
    "messages": [
        {
            "message": {
                "attachment": {
                    "payload": {
                        "buttons": [
                            {
                                "title": "Open Website",
                                "type": "web_url",
                                "url": "your_URL"
                            },
                            {
                                "title": "Send FLow",
                                "payload": "FLOW_OR_STEP_ID",
                                "type": "postback"
                            },
                            {
                                "title": "Call Number",
                                "type": "phone_number",
                                "payload": "<your_phone_number_with_county_code>"
                            }
                        ],
                        "template_type": "button",
                        "text": "Hello world"
                    },
                    "type": "template"
                },
                "quick_replies":[]
            }            
        }
    ]
}

Carga útil : puede utilizar cualquier ID de flujo o paso como carga útil. Por ejemplo, si desea redirigir a un flujo una vez que el usuario hace clic en el botón, puede utilizar la ID de flujo como carga útil. En este artículo, también mostramos cómo utilizar acciones como cargas útiles.

Enviar un mensaje con respuestas rápidas

Las respuestas rápidas se pueden añadir a cualquier tipo de mensaje (texto, archivo, galería, archivo, etc.). Facebook permite adjuntar un máximo de 11 respuestas rápidas a un mensaje. La carga útil de las respuestas rápidas es la misma que la de los botones.

{
   "messages": [
       {           
           "message": {
               "text": "Hello world",
               "quick_replies":[
                  {
                     "content_type": "text",
                     "title": "Quick Reply 1",
                     "payload": "FLOW_OR_STEP_ID"
                  },
                  {
                     "content_type": "text",
                     "title": "Any Text Here",
                     "payload": "FLOW_OR_STEP_ID"
                  }
               ]
           }
           
       }
   ]
}

Las cargas útiles en las respuestas rápidas y los botones tienen la misma estructura.

Envía una imagen, un vídeo, un audio o un archivo.
Puedes utilizar la misma estructura que se muestra a continuación para enviar una imagen, un vídeo, un audio o un archivo. Solo tienes que cambiar el tipo de medio a vídeo, audio o archivo. La “URL” será el enlace a tu imagen, audio, vídeo o archivo.

{
    "messages": [
        {
            "message": {
                "attachment": {
                    "type": "image",
                    "payload": {
                        "url": "<ASSET_URL>"
                    }
                },
                "quick_replies":[]
            }
        }
    ]
}

Enviar una sola tarjeta
El título y el subtítulo de la tarjeta pueden tener hasta 80 caracteres.

{
    "messages": [
        {
            "message": {
                "attachment": {
                    "payload": {
                        "elements": [
                            {
                                "title": "Card Title",
                                "subtitle": "Card Subtitle",
                                "image_url": "image_url"
                            }
                        ],
                        "template_type": "generic"
                    },
                    "type": "template"
                },
                "quick_replies":[]
            }
        }
    ]
}

Enviar una sola tarjeta con botones
Una tarjeta puede contener hasta 3 botones.

{
    "messages": [
        {
            "message": {
                "attachment": {
                    "payload": {
                        "elements": [
                            {
                                "title": "Card Title",
                                "subtitle": "Card Subtitle",
                                "image_url": "image_url",
                                "buttons": [
                                    {
                                        "title": "Button Label",
                                        "type": "web_url",
                                        "url": "your_URL"
                                    },
                                    {
                                        "title": "Button Label",
                                        "payload": "FLOW_OR_STEP_ID",
                                        "type": "postback"
                                    },
                                    {
                                        "title": "Button Label",
                                        "type": "phone_number",
                                        "payload": "+your_phone_number"
                                    }
                                ]
                            }
                        ],
                        "template_type": "generic"
                    },
                    "type": "template"
                },
                "quick_replies":[]
            }
        }
    ]
}

Enviar una galería
Básicamente, una galería es un conjunto de tarjetas. Una galería puede contener hasta 10 tarjetas. El código a continuación muestra una galería con 2 tarjetas. También puedes agregar un botón a cada tarjeta.

{
    "messages": [
        {
            "message": {
                "attachment": {
                    "payload": {
                        "elements": [
                            {
                                "title": "Card Title 1",
                                "subtitle": "Card Subtitle 1",
                                "image_url": "image_url 1",
                                "buttons": []
                            },
                            {
                                "title": "Card Title 2",
                                "subtitle": "Card Subtitle 2",
                                "image_url": "image_url 2",
                                "buttons": []
                            }
                        ],
                        "template_type": "generic"
                    },
                    "type": "template"
                },
                "quick_replies":[]
            }
        }
    ]
}

Enviar mensajes admitidos únicamente por WhatsApp

Hasta arriba

WhatsApp admite muchos tipos de mensajes que no son compatibles con los bots de Messenger, como mensajes de listas, contactos, ubicaciones o catálogos. GPTBOTLABS te permite enviar cualquier mensaje compatible con WhatsApp. Solo necesitas proporcionar la misma estructura de mensaje que se describe en la documentación de WhatsApp . GPTBOTLABS configurará automáticamente el parámetro » Para «.

{   
    "messages":[
        {
            "messaging_product":"whatsapp",
            "recipient_type": "individual",
            "to": null,
            "type": "interactive",
            "interactive": {
                "type": "button",
                "body": {
                    "text": "ANY TEXT"
                },
                "action": {
                "buttons": [
                    {
                        "type": "reply",
                        "reply": {
                            "id": "FLOW_OR_STEP_ID",
                            "title": "BUTTON_TITLE_1"
                        }
                    },
                    {
                        "type": "reply",
                        "reply": {
                            "id": "FLOW_OR_STEP_ID",
                            "title": "BUTTON_TITLE_2"
                        }
                    }
                ]
                }
            }
        }
    ]
}

Acciones : es opcional incluir este campo. Puede utilizar acciones para agregar o eliminar etiquetas, configurar o desconfigurar campos personalizados y enviar un flujo…

Añadir etiqueta

{
    "messages": [],
    "actions": [
        {
            "action": "add_tag",
            "tag_name": "..."
        }
    ]
}

Remover etiqueta

{
    "messages": [],
    "actions": [
        {
            "action": "remove_tag",
            "tag_name": "..."
        }
    ]
}

Establecer campo personalizado

Además de aceptar cualquier nombre de campo personalizado, esta acción también le permite cambiar campos del sistema como teléfono , correo electrónico, nombre completo, nombre, apellido.

{
    "messages": [],
    "actions": [
        {
            "action": "set_field_value",
            "field_name": "...",
            "value": ""
        }
    ]
}

Desactivar campo personalizado

{
    "messages": [],
    "actions": [
        {
            "action": "unset_field_value",
            "field_name": "..."
        }
    ]
}

Enviar flujo
Para obtener el ID del flujo, debe ir a la lista de flujos, hacer clic en los 3 puntos y hacer clic en Obtener enlace . El ID del flujo es el número incluido en el enlace. El ID del flujo siempre es numérico. Puede combinar una cantidad ilimitada de acciones.

{
    "messages": [],
    "actions": [
        {
            "action": "send_flow",
            "flow_id": "..."
        }
    ]
}

Transferir conversación a humano/bot

{
    "messages": [],
    "actions": [
        {
            "action": "transfer_conversation_to",
            "value": "human"
        }
    ]
}

Combinar múltiples acciones

Puede combinar varias acciones en una sola solicitud para poder ejecutar varias de ellas simultáneamente. Por ejemplo, puede que desee configurar un campo personalizado y enviar un flujo en una sola solicitud.

{
    "messages": [],
    "actions": [
        {
            "action": "set_field_value",
            "field_name": "...",
            "value": ""
        },
        {
            "action": "send_flow",
            "flow_id": "..."
        }
    ]
}

Utilice acciones como carga útil de botones y respuestas rápidas

A continuación se muestra el formato para utilizar una acción como carga útil en los botones. Pero como una carga útil es una cadena, debe convertir su objeto de acciones en una cadena JSON. Si está utilizando PHP, utilice json_encode para obtener una representación en cadena de su objeto.

{   
    "actions": [
        {
            "action": "send_flow",
            "flow_id": "..."
        }
    ]
}

A continuación, la acción anterior se utiliza como carga útil del botón.

{
    "messages": [
        {
            "message": {
                "attachment": {
                    "payload": {
                        "buttons": [
                            {
                                "title": "Click Here",
                                "payload": "{\"actions\":[{\"action\":\"send_flow\",\"flow_id\":\"FLOW_OR_STEP_ID\" } ]}",
                                "type": "postback"
                            }
                        ],
                        "template_type": "button",
                        "text": "Hello world"
                    },
                    "type": "template"
                },
                "quick_replies":[]
            }            
        }
    ]
}

MÁS LECCIONES