Contestar los WhatsApp con ChatGPT
Ya hemos recibido mensajes de WhatsApp, hemos procesado el mensaje con inteligencia artificial y guardado en la base de datos, ahora vamos a Contestar los WhatsApp con ChatGPT recibidos en Python, siguiendo estos pasos:
Instalamos las dependencias

pip install heyoo

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='EAALDlRZBLBD4BAGIFXLcPuwwgkXMZAnCOAuvPTXRBPbi4tKavrq9PmCFuWfMvmoBHkjeKghBQhs0AExdK3Ru5NCXfWsDaIvUuVAZBDLNtKmom0pwSkA9LhUJMYrLVYTLhlWPPjg9iRuOBSpKKr7oExDHwC385UxJZCwFH2qxadMfqKQDAMMngReZBNvyJ3rLFmiOVB6xZBrwZDZD'
#IDENTIFICADOR DE NÚMERO DE TELÉFONO
idNumeroTeléfono='116907067953774'
#INICIALIZAMOS ENVIO DE MENSAJES
mensajeWa=WhatsApp(token,idNumeroTeléfono)
telefonoRecibe=telefonoRecibe.replace("521","52")
#ENVIAMOS UN MENSAJE DE TEXTO
mensajeWa.send_message(respuesta,telefonoRecibe)
Todo el codigo seria este
#Código de Recibir WhatsApp y crear una respuesta con ChatGPT
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:
import openai
# Indica el API Key
openai.api_key = "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"
# Uso de ChapGPT en Python
model_engine = "text-davinci-003"
prompt = mensaje
completion = openai.Completion.create(engine=model_engine,
prompt=prompt,
max_tokens=1024,
n=1,
stop=None,
temperature=0.7)
respuesta=""
for choice in completion.choices:
respuesta=respuesta+choice.text
print(f"Response: %s" % choice.text)
respuesta=respuesta.replace("\\n","\\\n")
respuesta=respuesta.replace("\\","")
#CONECTAMOS A LA BASE DE DATOS
import mysql.connector
mydb = mysql.connector.connect(
host = "localhost",
user = "root",
password = "",
database='novato_chat'
)
mycursor = mydb.cursor()
query="SELECT count(id) AS cantidad FROM registro WHERE id_wa='" + idWA + "';"
mycursor.execute(query)
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+"','"+telefonoCliente+"');")
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='EAALDlRZBLBD4BAGIFXLcPuwwgkXMZAnCOAuvPTXRBPbi4tKavrq9PmCFuWfMvmoBHkjeKghBQhs0AExdK3Ru5NCXfWsDaIvUuVAZBDLNtKmom0pwSkA9LhUJMYrLVYTLhlWPPjg9iRuOBSpKKr7oExDHwC385UxJZCwFH2qxadMfqKQDAMMngReZBNvyJ3rLFmiOVB6xZBrwZDZD'
#IDENTIFICADOR DE NÚMERO DE TELÉFONO
idNumeroTeléfono='116907067953774'
#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)
Código completo
conexion.php
<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "chat"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname);
envia.php
<?php
//enviar.php
/*
* RECIBIMOS LA RESPUESTA
*/
function enviar($recibido, $enviado, $idWA,$timestamp,$telefonoCliente) {
require_once './conexion.php';
//CONSULTAMOS TODOS LOS REGISTROS CON EL ID DEL MANSAJE
$sqlCantidad = "SELECT count(id) AS cantidad FROM registro WHERE id_wa='" . $idWA . "';";
$resultCantidad = $conn->query($sqlCantidad);
//OBTENEMOS LA CANTIDAD DE MENSAJES ENCONTRADOS (SI ES 0 LO REGISTRAMOS SI NO NO)
$cantidad = 0;
//SI LA CONSULTA ARROJA RESULTADOS
if ($resultCantidad) {
//OBTENEMOS EL PRIMER REGISTRO
$rowCantidad = $resultCantidad->fetch_row();
//OBTENEMOS LA CANTIDAD DE REGISTROS
$cantidad = $rowCantidad[0];
}
//SI LA CANTIDAD DE REGISTROS ES 0 ENVIAMOS EL MENSAJE DE LO CONTRARIO NO LO ENVIAMOS PORQUE YA SE ENVIO
if ($cantidad == 0) {
//TOKEN QUE NOS DA FACEBOOK
$token = 'EAAx2HnFSmF0BAFLiJfLtYauPhhTyYyAXBEPo4XZBe3tDBFclNOmEqEZAeRIxZB22EKqr1jP8vCh2NdZBctebbuQdd1HtxY5yU2k3nCSuwzQn9bgwXhd01CDV7ZCdu93f9O3oKkdZCGIf5uPr37LX29VKeATnNraz3vUKVC7x7ehGVlCnN5yIbyZBbXIZAlMUMRZAjCOSxDaw9mAZDZD';
//NUESTRO TELEFONO
$telefono = '527121122441';
//IDENTIFICADOR DE NÚMERO DE TELÉFONO
$telefonoID = '110476218612328';
//URL A DONDE SE MANDARA EL MENSAJE
$url = 'https://graph.facebook.com/v15.0/' . $telefonoID . '/messages';
//CONFIGURACION DEL MENSAJE
$mensaje = ''
. '{'
. '"messaging_product": "whatsapp", '
. '"recipient_type": "individual",'
. '"to": "' . $telefono . '", '
. '"type": "text", '
. '"text": '
. '{'
. ' "body":"' . $enviado . '",'
. ' "preview_url": true, '
. '} '
. '}';
//DECLARAMOS LAS CABECERAS
$header = array("Authorization: Bearer " . $token, "Content-Type: application/json",);
//INICIAMOS EL CURL
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POSTFIELDS, $mensaje);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//OBTENEMOS LA RESPUESTA DEL ENVIO DE INFORMACION
$response = json_decode(curl_exec($curl), true);
//OBTENEMOS EL CODIGO DE LA RESPUESTA
$status_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
//CERRAMOS EL CURL
curl_close($curl);
//INSERTAMOS LOS REGISTROS DEL ENVIO DEL WHATSAPP
$sql = "INSERT INTO registro "
. "(mensaje_recibido ,mensaje_enviado ,id_wa ,timestamp_wa , telefono_wa) VALUES "
. "('" . $recibido . "' ,'" . $enviado . "','" . $idWA . "','" . $timestamp . "','" . $telefonoCliente . "');";
$conn->query($sql);
$conn->close();
}
}
index.php
<?php
//DESHABILITAMOS EL MOSTRAR ERRORES
ini_set('display_errors', 0);
ini_set('display_startup_errors', 0);
error_reporting(-1);
require 'vendor/autoload.php';
//IMPORTAMOS LAS LIBRERIRAS DE Rivescript
use \Axiom\Rivescript\Rivescript;
/*
* VERIFICACION DEL WEBHOOK
*/
//TOQUEN QUE QUERRAMOS PONER
$token = 'HolaNovato';
//RETO QUE RECIBIREMOS DE FACEBOOK
$palabraReto = $_GET['hub_challenge'];
//TOQUEN DE VERIFICACION QUE RECIBIREMOS DE FACEBOOK
$tokenVerificacion = $_GET['hub_verify_token'];
//SI EL TOKEN QUE GENERAMOS ES EL MISMO QUE NOS ENVIA FACEBOOK RETORNAMOS EL RETO PARA VALIDAR QUE SOMOS NOSOTROS
if ($token === $tokenVerificacion) {
echo $palabraReto;
exit;
}
/*
* RECEPCION DE MENSAJES
*/
//LEEMOS LOS DATOS ENVIADOS POR WHATSAPP
$respuesta = file_get_contents("php://input");
//CONVERTIMOS EL JSON EN ARRAY DE PHP
$respuesta = json_decode($respuesta, true);
//EXTRAEMOS EL MENSAJE DEL ARRAY
$mensaje=$respuesta['entry'][0]['changes'][0]['value']['messages'][0]['text']['body'];
//EXTRAEMOS EL TELEFONO DEL ARRAY
$telefonoCliente=$respuesta['entry'][0]['changes'][0]['value']['messages'][0]['from'];
//EXTRAEMOS EL ID DE WHATSAPP DEL ARRAY
$id=$respuesta['entry'][0]['changes'][0]['value']['messages'][0]['id'];
//EXTRAEMOS EL TIEMPO DE WHATSAPP DEL ARRAY
$timestamp=$respuesta['entry'][0]['changes'][0]['value']['messages'][0]['timestamp'];
//SI HAY UN MENSAJE
if($mensaje!=null){
//file_put_contents("text.txt", $mensaje);
//INICIALIZAMOS RIVESCRIPT Y CARGAMOS LA CONVERSACION
$rivescript = new Rivescript();
$rivescript->load('restaurante.rive');
//OBTENEMOS LA RESPUESTA
$respuesta= $rivescript->reply($mensaje);
//ESCRIBIMOS LA RESPUESTA
//file_put_contents("text.txt", $respuesta);
require_once "envia.php";
//ENVIAMOS LA RESPUESTA VIA WHATSAPP
enviar($mensaje,$respuesta,$id,$timestamp,$telefonoCliente);
}
restaurante.rive
+ hola - Hola, Soy un robot, esta es la informacion que te puedo ofrecer\nNuestros telefonos\nNuestra direccion\nEntregas\nPagina web\nHorarios\nMenu\n ! var lunes = Menu del Lunes \nChiles en nogada 20.50 \nChilaquiles 15.50 \n ! var martes = Menu del Martes \nPambasos 20.50 \nHuitlacoche 15.50 \n ! var miercoles = Menu del Miercoles \nEnchiladas 120.50 \nCaldo de olla 15.50 \n ! var jueves = Menu del Jueves \nTacos 120.50 \nQuesadillas 15.50 \n ! var viernes = Menu del Viernes \nTortas 20.50 \nTacos 15.50 \n ! var sabado = Menu del Sabado \nEnchiladas 120.50 \nHuitlacoche 15.50 \n ! var domingo = Los domingo esta cerrado ! var horario = Lunes abrimos de 08:00 a 18:00\nMartes abrimos de 08:00 a 18:00\nMiercoles abrimos de 08:00 a 18:00\nJueves abrimos de 08:00 a 18:00\nViernes abrimos de 08:00 a 18:00\nSabados abrimos de 08:00 a 12:00\nDomingos Cerrado\n + lunes * - <bot lunes> + martes * - <bot martes> + miercoles * - <bot miercoles> + jueves * - <bot jueves> + viernes * - <bot viernes> + sabado * - <bot sabado> + domingo * - <bot domingo> + (menu|carta) * - <bot lunes> \n <bot martes> \n <bot miercoles> \n <bot jueves> \n <bot viernes> \n <bot sabado> \n <bot domingo> + como estas @ hola + hay alguien* @ hola + (telefono|celular|cel) * - Nuestro telefono es 725648221 + (direccion|ubicacion|lugar) * - Nuestra direccion Colonia Emiliano Zapata Acapulco Gro - Nos encontramos ubicados en la Colonia Emiliano Zapata Acapulco Gro + (entregas|a domicilio) * - Realizamos entregas a domicilio solo de lunes a viernes de 12:00 a 15:00 + (pagina web|web|pagina) * - Visitanos en https://www.programadornovato.com + (hora|horarios|dias|abierto) * - <bot horario> + * - Recuerda que soy un robot, me podrías preguntar de otra forma - Intenta hacer tu pregunta de otra manera.
🔗 Codigo: Contestar los WhatsApp con ChatGPT · programadornovato/ChatgptWhatsApp@b15b501 (github.com)