04. WHATSAPP CHATGPT

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

image 22
Abrimos cmd y escribimos pip install heyoo

pip install heyoo

image 144
Agregamos este codigo y colocamos la configuracion de la app de facebook

            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)

Los comentarios están cerrados.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad