Guardar la conversación de ChatGPT en una Base de Datos de Woocommerce
Ya que recibimos WhatsApp’s y tambien generamos una respuesta con inteligencia artificial, vamos a Guardar la conversación de ChatGPT en una Base de Datos Mysql con PHP. Seguiremos estos pasos:
Creamos la Base de Datos y la tabla

-- phpMyAdmin SQL Dump -- version 5.2.1 -- https://www.phpmyadmin.net/ -- -- Servidor: localhost -- Tiempo de generación: 12-04-2023 a las 20:44:05 -- Versión del servidor: 10.4.21-MariaDB -- Versión de PHP: 8.0.12 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- Volcando estructura para tabla wordpress6.wp_registro CREATE TABLE IF NOT EXISTS `wp_registro` ( `id` int NOT NULL AUTO_INCREMENT, `fecha_hora` datetime DEFAULT CURRENT_TIMESTAMP, `mensaje_recibido` varchar(1000) DEFAULT '', `mensaje_enviado` varchar(1000) DEFAULT '', `id_wa` varchar(1000) DEFAULT '', `timestamp_wa` int DEFAULT NULL, `telefono_wa` varchar(50) DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=55 DEFAULT CHARSET=utf8mb3; -- -- Volcado de datos para la tabla `registro` -- -- -- Índices para tablas volcadas -- -- -- AUTO_INCREMENT de las tablas volcadas -- -- -- AUTO_INCREMENT de la tabla `registro` -- ALTER TABLE `wp_registro` MODIFY `id` int(5) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1; COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Código de PHP para Guardar la conversación de ChatGPT en una Base de Datos
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'), '/', 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
}
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);
//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.';
}
}
}
