UNIDAD ACADÉMICA DE INFORMÁTICA, CIENCIAS DE LA COMPUTACIÓN E
INNOVACIÓN TECNOLÓGICA
CARRERA DE INGENIERÍA DEL SOFTWARE
ASIGNATURA
SISTEMAS DINAMICOS
TRABAJO
MANUAL DE DESARROLLO DE CHATBOT EN WHATSAPP CON LENGUAJE DE
PROGRAMACION PYTON
PROFESOR:
ING.PABLO BUESTAN
INTEGRANTES:
NELSON WACHAPA
JULIO – 2023
1. OBJETIVO
El objetivo de este trabajo es crear un chatbot inteligente con WhatsApp
(WhatsApp cloud API) con lenguaje de programación Python.
2. DEFINICIONES
Es una plataforma de mensajería de un restaurante que nos ayuda a
conocer los precios, horarios de labor, ubicación, y sobre todo nos detalla
toda la información que nos puede brindar mediante una pregunta de
mensajes en WhatsApp.
3. DESARROLLO DEL MANUAL
Dentro del desarrollo de chatbot elaboraremos 3 fases que son.
Paso 1:
3.1 Creamos una aplicación en Facebook
Ingresamos en la pagina web https://developers.facebook.com/, y
realizamos lo siguiente.
Creamos nuestra aplicación, como es la primera vez que estoy
desarrollando, lo primero es registrarse como desarrollador
Entonces en este paso estamos creando nuestra app
En este paso ponemos el nombre como se va llamar nuestra app
en Facebook
3.2 Configuramos el API de WhatsApp
Este procesos empezamos a configurar API de WhatsApp
Luego damos clic en empezar a utilizar PI
Luego administramos número de teléfono para recibir un mensaje en
WhatsApp
Hay tenemos el código de confirmación
Una vez que ya tenemos vinculado nuestro número de teléfono ya
podemos enviar mensaje, entonces damos clic en el botón enviar
Listo ya recibimos un mensaje
Luego de haber realizado este paso ya tenemos los mensajes de llegado
falta el mensaje de regresos por lo tanto nos vamos en configuración
con la opción de crear URL de llamada esto quiere decir esto es crear un
dominio con un programa para recibir los mensajes de llamada de
WhatsApp.
3.3 Creamos nuestro host.
En este proceso nos vamos registrar en alwaysdata
En este paso nos vamos en la opción sites por defecto ya está creado un
sitio ya creado en php un sitio y lo borramos y creamos nuestro propio
sitio web.
Creamos nuestro propio sitio dando clic en install an aplication en
Python y utilizamos flask que es un frameword para programar vía web
Creamos un dominio y aceptamos
Aquí ya tenemos creado el dominio
Listo hay tenemos nuestra plantilla
Luego editamos la plantilla, aquí tenemos nuestro usuario y nuestro fttp
de host
Luego nos vamos en nuestro gestor de ftp en este caso yo utiliza flezilla
y creamos
Conectamos
Lego pulsamos en _init_py para ir en nuestro editor de código Python
3.4 Código de chatbot inteligente con WhatsApp en Python
Luego vamos en configuración de Facebook developer
Luego vamos al administrador y habilitamos mensajería
Listo bueno en este caso ya tendremos el mensaje con número de
teléfono y el id del mensaje.
Paso 2
Para proceder el segundo, primeramente ya tenemos funcionando
nuestra mensajería ya envía los mensajes por lo tanto seguiremos con
la siguiente fase que es como vamos guardar los mensajes de WhatsApp
que enviamos y recibimos con Python.
3.5 Creamos la base de datos
Y aquí creamos nuestra base de datos
Luego ingresamos a PHPAdmin
Hay tenemos el código de registro de la tabla en phpadmin
Validamos el código y ya tenemos nuestro tabla que se llama registro
Luego instalamos las dependencias de Python
Primero nos logeamos por medio de página web
3.6 Instalamos la dependencia en este caso yo ya tengo instalado
3.7 Luego vamos colocar los datos de conexión en visual code
from flask import Flask, jsonify, request
app = Flask(__name__)
#CUANDO RECIBAMOS LAS PETICIONES EN ESTA RUTA
@app.route("/webhook/", methods=["POST", "GET"])
def webhook_whatsapp():
#SI HAY DATOS RECIBIDOS VIA GET
if request.method == "GET":
#SI EL TOKEN ES IGUAL AL QUE RECIBIMOS
if request.args.get('hub.verify_token') ==
"HolaNovato":
#ESCRIBIMOS EN EL NAVEGADOR EL VALOR DEL RETO
RECIBIDO DESDE FACEBOOK
return request.args.get('hub.challenge')
else:
#SI NO SON IGUALES RETORNAMOS UN MENSAJE DE
ERROR
return "Error de autentificacion."
#RECIBIMOS TODOS LOS DATOS ENVIADO VIA JSON
data=request.get_json()
#EXTRAEMOS EL NUMERO DE TELEFONO Y EL MANSAJE
telefonoCliente=data['entry'][0]['changes'][0]['value']
['messages'][0]['from']
#EXTRAEMOS EL TELEFONO DEL CLIENTE
mensaje=data['entry'][0]['changes'][0]['value']
['messages'][0]['text']['body']
#EXTRAEMOS EL ID DE WHATSAPP DEL ARRAY
idWA=data['entry'][0]['changes'][0]['value']['messages']
[0]['id']
#EXTRAEMOS EL TIEMPO DE WHATSAPP DEL ARRAY
timestamp=data['entry'][0]['changes'][0]['value']
['messages'][0]['timestamp']
#ESCRIBIMOS EL NUMERO DE TELEFONO Y EL MENSAJE EN EL
ARCHIVO TEXTO
#SI HAY UN MENSAJE
if mensaje is not None:
from rivescript import RiveScript
#INICIALIZAMOS RIVESCRIPT Y CARGAMOS LA CONVERSACION
bot = RiveScript()
bot.load_file('restaurante.rive')
bot.sort_replies()
#OBTENEMOS LA RESPUESTA
respuesta= bot.reply("localuser",mensaje)
respuesta=respuesta.replace("\\n","\\\n")
respuesta=respuesta.replace("\\","")
#CONECTAMOS A LA BASE DE DATOS
import mysql.connector
mydb = mysql.connector.connect(
host = "mysql-chat-bot.alwaysdata.net",
user = "chat-bot",
password = "wachapa1991",
database = 'chat-bot_wa'
)
#para q no me este llegando mensaje repetidos
mycursor = mydb.cursor()
query="SELECT count(id) AS cantidad FROM registro
WHERE id_wa='" + idWA + "';"
mycursor.execute("SELECT count(id) AS cantidad FROM
registro WHERE id_wa='" + idWA + "';")
cantidad, = mycursor.fetchone()
cantidad=str(cantidad)
cantidad=int(cantidad)
if cantidad==0 :
sql = ("INSERT INTO registro"+
"(mensaje_recibido,mensaje_enviado,id_wa
,timestamp_wa ,telefono_wa) VALUES "+
"('"+mensaje+"' ,'
"+respuesta+"','"+idWA+"' ,'"+timestamp+"','"+telefonoClient
e+"');")
mycursor.execute(sql)
mydb.commit()
enviar(telefonoCliente,respuesta)
#RETORNAMOS EL STATUS EN UN JSON
return jsonify({"status": "success"}, 200)
def enviar(telefonoRecibe,respuesta):
from heyoo import WhatsApp
#TOKEN DE ACCESO DE FACEBOOK
token='EAADgVgdPVIsBO818eslISu3cCMMO2AlhxtCwvnYcLd70QmOuhvaU
ROb1Nu7FTldlTVqgKahuzWmMH66dRviVEotkObNpL6MSxwpmBfc9SUkaTNHz
sny6IHrZAT9pTfwg2dpPCpzXIRamnZBBi7QzFRJzSbeqZBj3joBqmKZCuGt1
6bcXbb0lVyMGPX2gZB4qTsDG0DKblOU3ZCSDU3FKvw'
#IDENTIFICADOR DE NÚMERO DE TELÉFONO
idNumeroTeléfono='102986362886514'
#INICIALIZAMOS ENVIO DE MENSAJES
mensajeWa=WhatsApp(token,idNumeroTeléfono)
telefonoRecibe=telefonoRecibe.replace("521","52")
#ENVIAMOS UN MENSAJE DE TEXTO
mensajeWa.send_message(respuesta,telefonoRecibe)
#INICIAMSO FLASK
if __name__ == "__main__":
app.run(debug=True)
También tenemos el código del restaurante con toda la información que nos
puede brindar, lo primero creamos nuevo archivo con el nombre restaurante.rive
Y tenemos el código
Listo, ya tenemos el código y enviamos un mensaje en WhatsApp, y nos guarda en
la base de datos phpadmin
Paso 3.
En este paso ya tenemos todo los mensajes guardando en la base de datos ahora
lo que vamos a realizar es recibir la respuesta según la pregunta.
3.8 Instalamos la dependencia
Para empezar primero vamos en Facebook en la opción configuración
de la API, y colocamos el número de dependencia
Luego agregamos el código
enviar(telefonoCliente,respuesta)
#RETORNAMOS EL STATUS EN UN JSON
return jsonify({"status": "success"}, 200)
def enviar(telefonoRecibe,respuesta):
from heyoo import WhatsApp
#TOKEN DE ACCESO DE FACEBOOK
token='EAADgVgdPVIsBOw4v1ZAcCV9i3Vt3dNL9anS5dvXV9x7etZBB3p9Z
AQB3KDUVxIgLo2s4E9CVa6RyZAXwBRj4KqLSwUtFpLiNv6ZCsCZBMLnqtGZC
04tOlpCu8yj1dTXQykqSsrZCVRgaMVZB0SLd1X6VmlfWk09ugBzF4ysBzeIJ
abf6OGMKhEZCPqI7uRV1IwC7ZAOZC9RqsgtkoPRKRGwWs6AZD'
#IDENTIFICADOR DE NÚMERO DE TELÉFONO
idNumeroTeléfono='102986362886514'
#INICIALIZAMOS ENVIO DE MENSAJES
mensajeWa=WhatsApp(token,idNumeroTeléfono)
telefonoRecibe=telefonoRecibe.replace("521","52")
#ENVIAMOS UN MENSAJE DE TEXTO
mensajeWa.send_message(respuesta,telefonoRecibe)
Instalamos la dependencia
3.9 Luego mostramos el código y pruebas
Enviamos mensaje en WhatsApp