Creación de un bot con integración del servicio meteorológico
Last updated
Last updated
La Plataforma ofrece capacidades de integración con varios sistemas externos, como CRM u otros servicios con APIs abiertas. Mientras que el artículo Creación de un bot de encuesta sencillo nos enseñó a crear bots sencillos de pulsar botones, este artículo profundiza en la integración de un bot con un servicio meteorológico. Del mismo modo, el bot puede integrarse con sistemas CRM.
El primer paso es crear una Solicitud Externa - esta es una funcionalidad que permite al Agente acceder a sistemas externos vía API. Utilizando External Requests, enviaremos datos al servicio meteorológico y recibiremos la información necesaria para el Script.
Para crear su primera Solicitud Externa, vaya a la pestaña Recursos haciendo clic en Recursos en el panel superior.
Vaya a la sección de Solicitudes externas. Más información sobre la pestaña: Pestaña de Solicitudes Externas.
Cree una nueva Solicitud Externa pulsando el botón Crear nueva.
Nombre la solicitud "weather", mantenga el método de solicitud como GET e introduzca {{ url }} en el campo Endpoint. Este formato se utiliza para especificar Variables de Contexto de Usuario en este campo. Para obtener más información sobre las variables de contexto, consulte: Variables de Contexto. Para más detalles sobre las Variables de Contexto de Usuario consulte: Variables de contexto de usuario. Más adelante crearemos esta Variable de Contexto en nuestro Script de Agente.
En la Plataforma, existe un Límite en el tamaño del cuerpo recibido en respuesta a una Solicitud Externa . Si el cuerpo excede los límites, entonces la variable raw_response, que contiene la respuesta del sistema externo a la Solicitud Externa, no registra la respuesta, sino el texto de error. Para obtener el texto de la respuesta, es necesario configurar su análisis sintáctico escribiéndolo en las Variables de Contexto de Usuario en la pestaña Respuesta. Para ello, vaya a la pestaña Respuesta, designada para analizar la respuesta a una solicitud, e introduzca "result" en el campo Variable y {{ body }} en el campo Valor. De esta forma, todo el cuerpo de la respuesta se almacenará en la variable result y estará disponible para su uso en el Script del Agente. Para más información sobre la pestaña Respuesta: Pestaña de Solicitudes Externas
Guarde la solicitud pulsando el botón CREAR.
Cree otra solicitud externa haciendo clic en el botón Crear nuevo. Nómbrela "weather 2", mantenga el método de solicitud como GET e introduzca {{ url2 }} en el campo Endpoint. Más tarde crearemos esta Variable de Contexto en nuestro Script de Agente.
Vaya a la pestaña Respuesta e introduzca "result2" en el campo Variable y {{ body }} en el campo Valor para guardar todo el cuerpo de la respuesta en la variable result2 y utilizarlo en el Script del Agente.
12. Guarde la solicitud pulsando el botón CREAR.
Creación de un guión de agente
Las Solicitudes Externas están listas, ahora necesita crear el Agente y su Script.
Vaya a la pestaña Cuadro de mandos haciendo clic en el botón Cuadro de mandos del panel superior
Cree un nuevo Agente, como se describe en el artículo Creación de un Bot de Encuesta Simple.
Ve a BotBuilder y crea una Ranura de Texto con el texto "¡Hola! Soy un bot meteorólogo, puedo decirte el tiempo que hace en cualquier ciudad. ¿Quieres probar?".
A continuación, añada los botones "Sí" y "No".
Después del botón "No", añada una ranura de texto con el texto "Puede volver en cualquier momento" y una ranura de espera de reacción.
Después de la subslot de reserva, añada una ranura de texto con el texto "Por favor, seleccione uno de los botones" y una ranura de salto con la transición de vuelta al menú de botones.
Después del botón "Sí", añada una ranura de texto con el texto "A continuación, escriba el nombre de la ciudad" y una ranura de espera de reacción.
A continuación, añada una Ranura de Memoria. Esta Ranura le permite escribir datos en Variables de Contexto de Usuario. Más información sobre la Ranura de Memoria: Crear y Guardar Variables de Contexto | Ranura de Memoria
En esta Memory Slot se compilará el Endpoint para la primera de nuestras External Requests. El formato de URL para la primera solicitud es: http://api.openweathermap.org/geo/1.0/direct?q={nombre de la ciudad}&appid={clave de API}. Tenemos que componer una URL sustituyendo el nombre de la ciudad introducido por el Usuario Bot y su clave personal de API.
a. Nombra el Slot "componer url para solicitud".
b.Introduzca el valor url en el campo Clave, y el valor 'http://api.openweathermap.org/geo/1.0/direct?q={{ client_message }}&appid=API key' en el campo Valor, donde API key es la clave del paso anterior, y {{ client_message }} es la Variable de Contexto client_message, que contiene el mensaje del Usuario Bot. En la ranura de memoria, la variable de contexto destinada a la sustitución debe especificarse en un formato concreto: debe ir entre comillas dobles. Todo el valor del campo debe ir entre comillas para que se escriba en la variable como una cadena. De esta forma, la URL de la primera petición será compilada y almacenada en la Variable de Contexto url, que previamente especificamos en la Petición Externa como Endpoint.
c. Guarda la ranura.
11. Después de la Ranura de Memoria, añada una Ranura de Solicitud Externa - se utilizará para integrarse con el servicio meteorológico. Introduzca el nombre "recibiendo coordenadas" en el campo Nombre. En el campo Solicitud, seleccione Solicitud Externa llamada "meteorología".
12. Si el usuario especifica un nombre de ciudad inexistente, recibiremos una respuesta vacía del servicio meteorológico, es decir, la variable de contexto raw_response tendrá el valor []. Usaremos esto en el Script para pedir al Usuario Bot que introduzca un nombre diferente. Para hacer esto, agregue una Ranura de Regla de Transición después de la Ranura de Solicitud Externa - permite la ramificación del Script del Agente dependiendo de las condiciones especificadas. Leer más: Transiciones a partes aleatorias del script | Ranura de salto. Nombre la Ranura "city check".
13. Al crear una regla de transición, se generan automáticamente dos subslots de condición. Si una condición en una Sub-ranura es verdadera, el Agente procederá a la Rama de Script que sigue a esta Sub-ranura de condición.
14. Necesitamos comprobar si el valor de la Variable Contextual raw_response es []. Abra la Subslot "main" e introduzca {{ raw_response == '[]' }} en el campo Condición. A continuación, borre el campo Nombre para que la expresión del campo Condición se muestre en el Árbol de Script en la Subranura condición.
Después de esta Subslot, añada una Text Slot con el texto "I don't know such a city. Please enter a different name." y el Jump Slot con una transición al Wait For Reaction Slot, donde el Agente espera a que el Usuario Bot introduzca el nombre de la ciudad.
16.Si la ciudad se encuentra en el servicio meteorológico, se recibirá una respuesta en el siguiente formato:
Después de la subranura FALLBACK_CONDITION, añada una ranura de memoria para extraer las coordenadas de la ciudad de la respuesta recibida del servicio.
a. Nombre la ranura "guardar coordenadas".
b. Introduzca el valor lat en el campo Clave y el valor {{ resultado[0].lat }} en el campo Valor.
c. Añada otro par Clave-Valor haciendo clic en Añadir nuevo campo.
d. Introduzca el valor lon en el campo Clave y el valor {{ resultado[0].lon }} en el campo Valor.
e. Así se accede al primer elemento de la matriz de resultados y a las variables lat y lon que contiene: los valores de latitud y longitud. Más información sobre la sintaxis Plataforma: Sintaxis.
En el mismo Slot podemos recoger el Endpoint para la segunda External Request. El formato de URL para la segunda solicitud es: https://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={clave API}. Tenemos que componer una URL sustituyendo las coordenadas de la ciudad introducidas por el Usuario Bot y nuestra clave API personal.
a. Añada otro par Clave-Valor. Introduzca el valor url2 en el campo Clave y el valor 'https://api.openweathermap.org/data/2.5/weather?lat={{ lat }}&lon={{ lon }}&appid=API key' en el campo Valor , donde API key es el valor clave del paso 8 y {{ lat }} y {{ lon }} son variables de coordenadas. Esto compondrá la URL para la segunda petición y la almacenará en la Variable de Contexto url2, que especificamos previamente en la Petición Externa como el Endpoint.
b. Guarda la ranura.
A continuación, cree una ranura de solicitud externa denominada "recibir el tiempo" y seleccione en ella la solicitud externa "tiempo 2".
20. En respuesta a la solicitud, esperamos recibir una respuesta en el siguiente formato (la respuesta tiene un formato de datos Diccionario):
El Agente mostrará los datos de temperatura al Usuario Bot. Para ello, añada una ranura de memoria después de la ranura de solicitud externa.
a. Asigne a la ranura el nombre "guardar datos meteorológicos".
b. En primer lugar, vamos a guardar el valor del elemento "main", que contiene los datos de temperatura, en una variable. La respuesta del servicio está contenida en la variable result2, que tiene el formato de un diccionario. Se accede a un elemento del diccionario mediante corchetes que indican el nombre del elemento. Introduzca el valor "var1" en el campo Clave, y el valor {{ result2['main'] }} en el campo Valor.
c. A continuación, guarde los valores de la temperatura real y sentida del aire. Para ello, añada otros dos pares Clave - Valor. En los campos Clave, introduzca los valores var2 y var3, y en los campos Valor - {{ var1['temp'] }} y {{ var1['feels_like'] }}.
d. Como el servicio devuelve los datos de temperatura en grados Kelvin, vamos a convertirlos a grados Celsius. La temperatura en grados Celsius se calcula mediante la fórmula {temperatura en grados Kelvin}-273,15. Añade otros dos pares Clave - Valor: en los campos Clave, escribe "temperatura" y "se siente_como", y en los campos Valor, introduce {{ var2 - 273.15 }} y {{ var3 - 273.15 }}, respectivamente. Más información sobre las operaciones matemáticas en la sintaxis: Operaciones matemáticas.
Después de la ranura de memoria, añada una ranura de texto con el texto "La temperatura en {{ client_message }} es {{ temperature }} ºC en este momento. Se siente como {{ feels_like }} ºC. ¿Le gustaría probar con otra ciudad?" y una Ranura de Salto con а transición al menú de botones.
23. Esto concluye la creación del Script del Agente. Ahora debería tener el siguiente Script:
Después de crear el Script del Agente, necesita entrenar al Agente y probar su Script.
Para entrenar al Agente, haga clic en el botón ENTRENAR situado en la esquina superior derecha de BotBuilder. Se iniciará el proceso de Validación de Script. Si el Script cumple los requisitos, el Agente será entrenado. En caso contrario, la Validación del Script fallará y aparecerá un texto de error en la esquina inferior derecha. Leer más: Requisitos para entrenar con éxito a un Agente
Si se detectan errores en el Script, identifique las áreas problemáticas utilizando las directrices descritas en el artículo Requisitos para una formación satisfactoria del Agente y corrija los errores. Después de esto, vuelva a entrenar al Agente.
Una vez finalizado el AgentTraining, abra el Debug Widget pulsando el botón Debug.
4.En el Widget de Depuración que se abre, envíe un mensaje al Agente para iniciar el Script.
Comunicarse con el Agente, recorriendo todos los pasos del Script, mientras se comprueba que no hay errores en los textos y que la lógica del Script es correcta.
Si encuentra errores, corríjalos, recordando volver a entrenar al Agente después de cada cambio para que surta efecto. Si todo es correcto, enhorabuena, ¡su Agente está listo!
Regístrese en el servicio meteorológico en .Este servicio le permite realizar hasta 1.000 llamadas API al día de forma gratuita.
Las solicitudes que necesitamos se encuentran en — esta solicitud permite recuperar las coordenadas de la ciudad, y —esta solicitud facilita la recuperación meteorológica basada en las coordenadas de ubicación.
Regístrese en la Plataforma o acceda a una cuenta existente utilizando el enlace . Se le redirigirá a la página Carpetas de empresa. Más información sobre el registro y la autorización: Registro y autorización.
Encuentre su clave API en y copie el valor del campo Clave.