04. WHATSAPP CHATGPT WOOCOMMERCE

Contestar los WhatsApp con ChatGPT de ventas de WooCommerce

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 de ventas en PHP, siguiendo estos pasos:

Agregar codigo para Contestar los WhatsApp con ChatGPT en PHP

image 59

        //TOKEN QUE NOS DA FACEBOOK
        $token = 'EAAKysBbB3NoBACZBr6HLldcJoURimG2dFSmgrqCLLVdWISSXOl9rICFnCXgDc1X5LSeIcLESwDjXWm6ju7oJZBr1kzNyZCCLpQKLZBJUQFNdBL2b0pe9FTHlty1GPeXvGJpWuFKn3vTG5f8u8sWubHx8gSGFSOE8LPDd4L4r74R4NBFrYa7b1AnBRKai2XXVFckTbS3ABAZDZD';
        //NUESTRO TELEFONO
        $telefonoCliente=str_replace("521","52",$telefonoCliente);
        //IDENTIFICADOR DE NÚMERO DE TELÉFONO
        $telefonoID = '116907067953774';
        //URL A DONDE SE MANDARA EL MENSAJE
        $url = 'https://graph.facebook.com/v16.0/' . $telefonoID . '/messages';
        //CONFIGURACION DEL MENSAJE
        $mensaje = ''
                . '{'
                . '"messaging_product": "whatsapp", '
                . '"recipient_type": "individual",'
                . '"to": "' . $telefonoCliente . '", '
                . '"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);


Código completo

chatgpt.php

<?php
function preguntaChatgpt($pregunta){
    //API KEY DE CHATGPT
    $apiKey='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';
    //INICIAMOS LA CONSULTA DE CURL
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://api.openai.com/v1/chat/completions');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: Bearer '.$apiKey,
        'Content-Type: application/json',
    ]);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n 
        \"model\": \"gpt-3.5-turbo\",\n 
        \"messages\": [
            {\"role\": \"user\", 
            \"content\": \"".$pregunta."\"}
            ]\n
        }");
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    $response = curl_exec($ch);
    
    curl_close($ch);
    $decoded_json = json_decode($response, false);
    //RETORNAMOS LA RESPUESTA QUE EXTRAEMOS DEL JSON
    return  $decoded_json->choices[0]->message->content;    
}
//$respuesta=preguntaChatgpt("Quien es el presidente de usa");
//echo $respuesta;

envia.php

<?php
//enviar.php
/*
 * RECIBIMOS LA RESPUESTA
*/
function enviar($recibido, $enviado, $idWA,$timestamp,$telefonoCliente) {
    // Incluir el entorno de WordPress
    require_once( '../wp-load.php' );
    global $wpdb;
    // Consulta para contar registros con un valor específico de id_wa
    $query = "SELECT COUNT(id) AS cantidad FROM wp_registro WHERE id_wa = %s";
    // Preparar y ejecutar la consulta
    $sql = $wpdb->prepare( $query, $idWA );
    $cantidad = $wpdb->get_var( $sql );
    //SI LA CANTIDAD DE REGISTROS ES 0 ENVIAMOS EL MENSAJE DE LO CONTRARIO NO LO ENVIAMOS PORQUE YA SE ENVIO
    if ($cantidad == 0) {
        $enviado=str_replace("\n","",$enviado);


        //TOKEN QUE NOS DA FACEBOOK
        $token = 'EAAKysBbB3NoBACZBr6HLldcJoURimG2dFSmgrqCLLVdWISSXOl9rICFnCXgDc1X5LSeIcLESwDjXWm6ju7oJZBr1kzNyZCCLpQKLZBJUQFNdBL2b0pe9FTHlty1GPeXvGJpWuFKn3vTG5f8u8sWubHx8gSGFSOE8LPDd4L4r74R4NBFrYa7b1AnBRKai2XXVFckTbS3ABAZDZD';
        //NUESTRO TELEFONO
        $telefonoCliente=str_replace("521","52",$telefonoCliente);
        //IDENTIFICADOR DE NÚMERO DE TELÉFONO
        $telefonoID = '116907067953774';
        //URL A DONDE SE MANDARA EL MENSAJE
        $url = 'https://graph.facebook.com/v16.0/' . $telefonoID . '/messages';
        //CONFIGURACION DEL MENSAJE
        $mensaje = ''
                . '{'
                . '"messaging_product": "whatsapp", '
                . '"recipient_type": "individual",'
                . '"to": "' . $telefonoCliente . '", '
                . '"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
        // Consulta para insertar el registro
        $sql = "INSERT INTO wp_registro 
        (mensaje_recibido, mensaje_enviado, id_wa, timestamp_wa, telefono_wa) VALUES 
        (%s, %s, %s, %s, %s)";

        // Preparar y ejecutar la consulta
        $prepared_sql = $wpdb->prepare( $sql, $recibido, $enviado, $idWA, $timestamp, $telefonoCliente );
        $result = $wpdb->query( $prepared_sql );

        // Verificar si la inserción fue exitosa
        if ( $result !== false ) {
            echo 'Registro insertado con éxito. ID del registro: ' . $wpdb->insert_id;
        } else {
            echo 'Error al insertar el registro.';
        }
    }
}

index.php

<?php
//Codigo para Recibir WhatsApp y crear una respuesta con ChatGPT para WooCommerce
/*
 * 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){

    $query = "
    SELECT CONCAT('Nombre: ', p.post_title) as product_name, 
    CONCAT('Categoría: ', t.name) as category_name,
    CONCAT('Precio: ', MAX(CASE WHEN pm1.meta_key = '_price' THEN pm1.meta_value END)) as price,
    CONCAT('Existencia: ', MAX(CASE WHEN pm2.meta_key = '_stock' THEN pm2.meta_value END)) as stock,
    CONCAT('ID de miniatura: ', MAX(CASE WHEN pm3.meta_key = '_thumbnail_id' THEN pm3.meta_value END)) as 
thumbnail_id,
    CONCAT('Descripción: ', p.post_excerpt) as description,
    CONCAT('URL del producto: ', (SELECT option_value FROM wp_options WHERE option_name = 'siteurl'), '/producto/', p.post_name, '/') as product_url
FROM wp_posts p
JOIN wp_term_relationships tr ON p.ID = tr.object_id
JOIN wp_term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
JOIN wp_terms t ON tt.term_id = t.term_id
JOIN wp_postmeta pm1 ON p.ID = pm1.post_id
JOIN wp_postmeta pm2 ON p.ID = pm2.post_id
LEFT JOIN wp_postmeta pm3 ON p.ID = pm3.post_id
LEFT JOIN wp_posts img ON img.ID = pm3.meta_value
WHERE p.post_type = 'product'
AND tt.taxonomy = 'product_cat'
AND (pm1.meta_key = '_price' OR pm2.meta_key = '_stock' OR pm3.meta_key = '_thumbnail_id')
AND p.post_status = 'publish'
GROUP BY p.post_title, t.name, img.guid, p.post_excerpt, p.post_name
HAVING thumbnail_id IS NOT NULL AND thumbnail_id <> ''
ORDER BY p.post_title ASC;
    ";


    // Incluir el entorno de WordPress
    require_once( '../wp-load.php' );

    // Verificar si WooCommerce está activo
    if ( ! class_exists( 'WooCommerce' ) ) {
        die( 'WooCommerce no está activo.' );
    }

    // Obtener la dirección, el teléfono y el correo electrónico de la tienda
    $store_address     = get_option( 'woocommerce_store_address' );
    $store_address_2   = get_option( 'woocommerce_store_address_2' );
    $store_city        = get_option( 'woocommerce_store_city' );
    $store_postcode    = get_option( 'woocommerce_store_postcode' );
    $store_country     = get_option( 'woocommerce_default_country' );
    $store_state       = get_option( 'woocommerce_default_state' );

    $store_email       = get_option( 'woocommerce_email_from_address' );
    $site_url = get_site_url();
    // Instancia de la clase wpdb
    global $wpdb;
    // Ejecutar la consulta
    $results = $wpdb->get_results( $query );
    $pregunta="Eres un woocommerce de nombre ".$site_url.", tus horarios son de lunes a viernes de 8am a 6pm , tu telefono es 712321321 , estas ubicado en ". $store_address . ", " . $store_address_2 . ", " . $store_city . ", " . $store_postcode . ", " . $store_country . ", " . $store_state . " y cuentas con estos productos (Saluda al cliente mostrando la información de la tienda pero no los productos). ";
    // Imprimir los resultados
    foreach( $results as $result ) {
        $pregunta=$pregunta. 'Nombre: ' . $result->product_name . ' , ';
        $pregunta=$pregunta. 'Categoría: ' . $result->category_name . ' , ';
        $pregunta=$pregunta. 'Precio: ' . $result->price . ' , ';
        $pregunta=$pregunta. 'Existencia: ' . $result->stock . ' , ';
        $pregunta=$pregunta. 'Descripción: ' . $result->description . ' , ';
        $pregunta=$pregunta. 'URL del producto: ' . $result->product_url . ' , ';
        //$pregunta=$pregunta. '\n';
    }
    $pregunta=$pregunta.". El cliente dice: ".$mensaje;
    require_once "chatgpt.php";
    $respuesta=preguntaChatgpt($pregunta);



    //ESCRIBIMOS LA RESPUESTA
    //file_put_contents("text.txt", $respuesta);
    require_once "envia.php";
    //ENVIAMOS LA RESPUESTA VIA WHATSAPP
    enviar($mensaje,$respuesta,$id,$timestamp,$telefonoCliente);

    //hola
    //que horarios tienes
    //abren el lunes
    //hola abren los domingos?
    //cual es tu telefono?
    //estan en acapulco?
    //estan en Ciudad de mexico?
    //tienes blusas?
    //A como las blusas?
    //como puedo comprar una blusa?
    //muestrame todos tus pantalones
}

Los comentarios están cerrados.