Cree un webhook para Chatbot usando Python

Creará un chatbot muy simple que le pedirá al usuario que elija un animal, y luego el chatbot le pedirá un libro web, que luego proporcionará una API para recuperar un «hecho divertido» sobre el animal a través del cat-facts API. La web actualizará la variable de memoria que realiza un seguimiento de cuántas veces el usuario ha solicitado un dato curioso.

El objetivo del tutorial es mostrarle cómo la web lee los datos de la aplicación del chatbot y mostrarle el formato de los datos que deben devolverse al chatbot.

Como beneficio adicional, mostraremos cómo implementar un script de Python en SAP BTP. Agradecimientos especiales a Yohei Fukuhara de su blog Cree una API REST simple de Flask utilizando Foundry Cloud.

IMPORTANTE: El enfoque de este tutorial es la respuesta que una aplicación (API) debe devolver para trabajar con SAP Conversational AI. Los requisitos para Python en SAP BTP cambian de vez en cuando, p. Ej. cuota, tiempo de ejecución, por lo que se recomienda que consulte la documentación sobre cómo implementar scripts de Python: Desarrollo de Python en un entorno Cloud Foundry


Paso 1: crea un chatbot simple

Crea un bot que le pida al usuario que seleccione un animal para obtener un dato divertido.

  1. Crea un nuevo bot y llámalo webhookdemo. Utilice los siguientes valores:

    Nombre del campoValor
    1. ¿Qué quieres que haga tu chatbot?Tomando acciones
    2. Habilidades predefinidasDadá
    3. Crea tu bot
    • Nombre: webhookdemo
    • Suelte: Bot para probar la creación de libros web
    • Idioma: inglés
    4. Política de datosImpersonal y No vulnerable
    5. Visibilidad del botPúblico

    Hacer clic Crear un bot.

  2. Sa Tren pestaña, crea un secreto llamado asky agregue la expresión Estoy interesado en.

    Dado que solo define un secreto, este secreto siempre se activará cuando el usuario escriba un mensaje.

  3. Sa Tren pestaña, cree una entidad restringida llamada animal y agregue 4 valores válidos: gato, caballo, Caracol, perro.

  4. Sa Construcción pestaña, crea una habilidad llamada respondery ábralo.

    Sobre Disparadores, establezca la condición en: If @ask is-present.

    Sobre Requisitos, especificar #animal as animal.

    Expanda el requisito y haga clic en Nuevas respuestas: si falta #animal, agregue el siguiente mensaje de texto y luego haga clic en Salvar y atrás:

    Type an animal and I will get you a fun fact about it.
    
    But I am only familiar with certain animals.
    

Hecho

Inicie sesión para responder la pregunta

Paso 2: prueba el bot sin libro web

  1. Primero, abra el Examen pestaña y prueba el bot. No importa el tipo que escribas ask.

    Ingresar dog y reconocerá el animal entidad también.

    Animal

  2. Ahora abierto Chatea con tu bot.

    Si ingresa algo que no se adapte a los animales, se muestra un mensaje corto y le pide que ingrese un animal.

    Entra uno de los animales. Ahora se cumple el requisito, pero no especificó una respuesta, por lo que es predeterminado No responde lanzado.

    Prueba de habilidad

Hecho

Inicie sesión para responder la pregunta

Paso 3: crea un proyecto de Python

  1. En el explorador de archivos, cree una nueva carpeta para el proyecto y llámelo chatbot-webhook.

  2. Abra VS Code.

    Asegúrese de tener instalada la extensión de Microsoft para Python, así como Python y Flask y los paquetes de la aplicación.

  3. Vamos Archivo> Agregar carpeta al espacio de trabajoy seleccione la carpeta del proyecto.

    Archivo nuevo

  4. Dentro de la carpeta, cree los archivos del asistente para el proyecto.

    manifest.yml

    Debe cambiar el nombre de host a continuación por un nombre único. El resto del tutorial toma el nombre de host a continuación, pero en todas partes necesita cambiarlo (por ejemplo, URL a API).

    applications:
    - name: dbw-catfacts
      memory: 128M
      command: python chatbot-webhook-test.py
    

    Procfile

    web: python chatbot-webhook.py
    

    requirements.txt

    Este archivo contiene dependencias en nuestro proyecto: Frasco para crear puntos finales y aplicaciones para llamar a otras API desde nuestra aplicación.

    Flask
    requests
    

    runtime.txt

    Asegúrese de utilizar una versión que actualmente sea compatible con SAP BTP. En el momento de escribir este tutorial (diciembre de 2020), la versión siguiente funcionaba.

    python-3.8.5
    

    static (carpeta)

    Crea la carpeta static. Descarga SAP Chat AI icono y ponerlo en la carpeta.

Tu proyecto debería verse así:

Configuración del código VS

Hecho

Inicie sesión para responder la pregunta

Paso 4: escriba los puntos finales de Python

Ahora escribiremos la parte principal de la aplicación, que crea los puntos finales.

  1. En su proyecto, cree un nuevo archivo llamado chatbot-webhook.py.

  2. Agregue el siguiente código, que agrega dependencias y crea un punto final predeterminado, que devuelve una buena página HTML con una imagen interesante, para que pueda asegurarse de que la implementación sea exitosa.

    from flask import Flask, request, jsonify
    import os
    import json
    import datetime
    import requests
    
    app = Flask(__name__)
    cf_port = os.getenv("PORT")
    
    # Only get method by default
    @app.route('/')
    def hello():
        return '<h1>SAP Conversational AI</h1><body>The animal facts webhook for use in SAP Conversational AI chatbots.<br><img src="static/283370-pictogram-purple.svg" width=260px></body>'
    
    if __name__ == '__main__':
    	if cf_port is None:
    		app.run(host='0.0.0.0', port=5000, debug=True)
    	else:
    		app.run(host='0.0.0.0', port=int(cf_port), debug=True)
    
    

    Guarda el archivo.

    Si lo desea, puede probar esto en VS Code a través del .py archivo: haciendo clic derecho en el archivo y seleccionando Ejecute el archivo Python en la terminal o haga clic en la flecha verde Texto de enlace, por ejemplo, pantalla de destino en la esquina superior derecha. Encontrarás lo siguiente:

    Punto final predeterminado de prueba de código VS

    Luego, puede abrir un navegador en el punto final predeterminado.

    Punto final predeterminado de prueba de código VS

  3. Agregue el siguiente código al punto final principal inmediatamente después del predeterminado, y antes del if __name__ == '__main__': línea.

    Este punto final toma los datos del chatbot, hace la llamada a la API para obtener el dato divertido y luego envía el siguiente mensaje al chatbot.

    @app.route('/bot', methods=['POST'])
    def bot():
      # Get the request body, and determine the dog and memory
      try:
        bot_data = json.loads(request.get_data())
        animal = bot_data['conversation']['memory']['animal']['raw']
        memory = bot_data['conversation']['memory']
      except:
        animal = "dog"
        memory = json.loads("{}")
    
      # Get the fun fact
      url = "https://cat-fact.herokuapp.com/facts/random?animal_type=" + animal + "&amount=1"
      r = requests.get(url)
      fact_data = json.loads(r.content)
    
      # Increment the # of times this has been called
      if 'funfacts' in memory:
         memory['funfacts'] += 1
      else:
         memory['funfacts'] = 1
    
      # Return message to display (replies) and update memory
      return jsonify(
        status=200,
        replies=[
        {
          'type': 'text',
          'content': fact_data['text']
        }
        ],
        conversation={
          'memory': memory
        }
    
      )
    

    Guarda el archivo.

    Puede probar esto abriendo Postman y llamando al punto final localhost:5000/bot (con CORREO método y sin cuerpo).

    Punto final del bot de prueba de código VS

    Pruébelo nuevamente, pero esta vez ejecute el siguiente cuerpo (sin procesar), para simular como si el chatbot estuviera enviando la solicitud:

    {
      "conversation": {
        "memory": {
          "animal" : {"raw" : "snail"},
          "funfacts": 1
        }
      }
    }
    

    Ahora, la llamada a la API usa el animal del cuerpo (es decir, un caracol) y hace el funfacts variables en la memoria.

    Punto final del bot de prueba de código VS

Hecho

Inicie sesión para responder la pregunta

Paso 5: enviar la secuencia de comandos de Python a SAP BTP

CLI utilizó Cloud Foundry para implementar el script en SAP BTP.

Necesitará su punto final de SAP BTP Cloud Foundry y el nombre de la organización, que verá cuando abra su subcuenta. Visión general página.

Información de la cuenta

  1. Abra un símbolo del sistema en la carpeta que contiene su proyecto de Python y configure la URL de la API de Foundry Cloud.

    cf api https://api.cf.eu10.hana.ondemand.com
    

    CLI

  2. Inicie sesión ingresando el siguiente comando e ingresando sus credenciales:

    cf login
    
  3. Elija su organización de CF

    Organización CLI

  4. Ahora presiona la aplicación y llámala catfacts:

    cf push catfacts
    

Esto debería llevar alrededor de un minuto y mucha salida en la pantalla de comandos. Cuando termine, ahora debería usar la aplicación. Vaya a su espacio Cloud Foundry, debajo Solicitud.

Texto de enlace, por ejemplo, pantalla de destino

Si hace clic en la aplicación, obtendrá el enlace del punto final.

Texto de enlace, por ejemplo, pantalla de destino

Y si hace clic en el enlace (y lo abre en el navegador), habrá terminado GET llamar al punto final predeterminado.

Fin de prueba

Hecho

Inicie sesión para responder la pregunta

Paso 6: apunte un chatbot a la web

Ahora que ha implementado su libro web, vamos a vincularlo al chatbot.

  1. Sa Construcción pestaña, abra la answer habilidad.

  2. Sa Comportamiento pestaña, haga clic en Agregar nuevo grupo de mensajesy luego haga clic en Conectar servicio externo> Llamar a Webhook.

    • Para la URL, ingrese el nombre de su punto final con /bot al final. Asegúrate de que el método CORREO.

      Por ejemplo, el mío es: https://catfacts-quiet-klipspringer-kx.cfapps.eu10.hana.ondemand.com/bot

    • Hacer clic Salvar.

  3. Hacer clic Actualizar chat> Editar memoria, y luego configure el Campo de memoria no admitido a animal.

    Agregar un webhook

  4. Hacer clic Agregar nuevo grupo de mensajes.

    Este grupo de mensajes está destinado a mostrar un mensaje cuando el usuario ha solicitado 3 o más hechos divertidos. Nuestro navegador web realiza un seguimiento del número de llamadas y luego pasa los resultados a través de la memoria.

Hecho

Inicie sesión para responder la pregunta

Paso 7: prueba el chatbot

Abra una conversación con el bot, ingresando Hola. El mensaje se muestra cuando falta un animal.

Ningún animal

Luego entra en un animal, y se estimula la red y se muestra un dato divertido.

Animal

Introduzca un animal 2 veces más: debe ser un gato, un perro, un caracol o un caballo. El mensaje adicional se muestra cuando el usuario solicita repetidamente datos divertidos.

Muchos animales

Haga clic en el amarillo I icono para ver el JSON de la conversación. Desplácese hacia abajo y verá que la web tiene un valor agregado para funfacts.

Memoria

Mostró la forma de restaurar la información en la memoria desde el libro web, por lo que realizó un seguimiento a través de variables de memoria personalizadas _memory.funfacts cuántas veces el usuario actual ha pedido un dato divertido.

Podrías usar la variable incorporada en su lugar _skill_occurences Mantenga un registro de la cantidad de veces que ha realizado el answer habilidad.

Para obtener información sobre las variables integradas, consulte Datos de tiempo de ejecución accesibles.

Hecho

Inicie sesión para responder la pregunta

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *