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
//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 }
Ave que vuela, a la cazuela.