3. Guardar los whatsapp

ChatBot guardar los WhatsApp que enviamos y recibimos en C#

Ya que recibimos WhatsApp’s y tambien generamos una respuesta con inteligencia artificial, vamos a guardar los WhatsApp enviados y recibidos. Seguiremos estos pasos:

Creamos la Base de Datos y la tabla

image 131
Creamos la base de datos y creamos la tabla con el codigo de abajo

-- Query para ChatBot guardar los WhatsApp's que enviamos y recibimos en C#
-- phpMyAdmin SQL Dump
-- version 5.1.1
-- https://www.phpmyadmin.net/
--
-- Servidor: 127.0.0.1
-- Tiempo de generación: 23-01-2023 a las 21:24:48
-- Versión del servidor: 10.4.20-MariaDB
-- Versión de PHP: 7.3.29

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 */;

--
-- Base de datos: `chat`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `registro`
--

CREATE TABLE `registro` (
  `id` int(5) NOT NULL,
  `fecha_hora` datetime DEFAULT current_timestamp(),
  `mensaje_recibido` varchar(1000) DEFAULT '',
  `mensaje_enviado` varchar(1000) DEFAULT '',
  `id_wa` varchar(1000) DEFAULT '',
  `telefono_wa` varchar(50) DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Índices para tablas volcadas
--

--
-- Indices de la tabla `registro`
--
ALTER TABLE `registro`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT de las tablas volcadas
--

--
-- AUTO_INCREMENT de la tabla `registro`
--
ALTER TABLE `registro`
  MODIFY `id` int(5) NOT NULL AUTO_INCREMENT;
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 */;

Codigo de C# para guardar los WhatsApp

Instalamos las librerías de MySQL

image 9
Abrimos Nuget seleccionamos Examinar y buscamos MySqlConnector

image 29
En Datos.cs Insertamos este codigo para insertar los registros en base de datos

namespace ChatBotWa.Models
{
    using MySqlConnector;
    public class Datos
    {
        public void insertar(string mensaje_recibido,string mensaje_enviado   , string id_wa, string telefono_wa)
        {
            var connection = new MySqlConnection("Server=localhost;User ID=root;Password=;Database=chat");
            try
            {
                var command = connection.CreateCommand();
                command.CommandText = "INSERT INTO `registro` " +
                    "(`mensaje_recibido`        ,`mensaje_enviado`        ,`id_wa`         , `telefono_wa`) VALUES " +
                    "('" + mensaje_recibido + "','" + mensaje_enviado + "', '" + id_wa + "', '" + telefono_wa + "');";
                connection.Open();
                command.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                //return ex.Message;
            }
            finally
            {
                connection.Close();
            }
        }
    }
    public class WebHookResponseModel
    {
        public Entry[] entry { get; set; }
    }

    public class Entry
    {
        public Change[] changes { get; set; }
    }

    public class Change
    {
        public Value value { get; set; }
    }

    public class Value
    {
        public int ad_id { get; set; }
        public long form_id { get; set; }
        public long leadgen_id { get; set; }
        public int created_time { get; set; }
        public long page_id { get; set; }
        public int adgroup_id { get; set; }
        public Messages[] messages { get; set; }
    }
    public class Messages
    {
        public string id { get; set; }
        public string from { get; set; }
        public Text text { get; set; }
    }
    public class Text
    {
        public string body { get; set; }
    }

}

image 31
En RecibirController.cs llamamos el codigo para insertar los registros de la base de datos

using ChatBotWa.Models;
using Microsoft.AspNetCore.Mvc;
using System.IO;
using System.Net;
using System.Net.Http.Headers;
using System.Xml.Linq;
using RiveScript;

namespace ChatBotWa.Controllers
{
    public class RecibirController
    {
        //RECIBIMOS LOS DATOS DE VALIDACION VIA GET
        [HttpGet]
        //DENTRO DE LA RUTA webhook
        [Route("webhook")]
        //RECIBIMOS LOS PARAMETROS QUE NOS ENVIA WHATSAPP PARA VALIDAR NUESTRA URL
        public string Webhook(
            [FromQuery(Name = "hub.mode")] string mode,
            [FromQuery(Name = "hub.challenge")] string challenge,
            [FromQuery(Name = "hub.verify_token")] string verify_token
        )
        {
            //SI EL TOKEN ES hola (O EL QUE COLOQUEMOS EN FACEBOOK)
            if (verify_token.Equals("hola"))
            {
                return challenge;
            }
            else
            {
                return "";
            }
        }
        //RECIBIMOS LOS DATOS DE VIA POST
        [HttpPost]
        //DENTRO DE LA RUTA webhook
        [Route("webhook")]
        //RECIBIMOS LOS DATOS Y LOS GUARDAMOS EN EL MODELO WebHookResponseModel
        public dynamic datos([FromBody] WebHookResponseModel entry)
        {
            //ESTRAEMOS EL MENSAJE RECIBIDO
            string mensaje_recibido = entry.entry[0].changes[0].value.messages[0].text.body;
            //ESTRAEMOS EL ID UNICO DEL MENSAJE
            string id_wa = entry.entry[0].changes[0].value.messages[0].id;
            //ESTRAEMOS EL NUMERO DE TELEFONO DEL CUAL RECIBIMOS EL MENSAJE
            string telefono_wa = entry.entry[0].changes[0].value.messages[0].from;
            //INICIALIZAMOS EL BOT DE RIVESCRIPT
            var bot = new RiveScript.RiveScript(true);
            //CARGAMOS EL ARCHIVO DONDE ESTA LA CONFIGURACION DE LA IA
            bot.loadFile("restaurante.rive");
            bot.sortReplies();
            //OBTENEMOS LA RESPUESTA DEPENDIENDO DEL MENSAJE RECIBIDO
            var mensaje_enviado=bot.reply("local-user", mensaje_recibido);
            //CREAMOS EL TEXTO DEL ARCHIVO
            string texto = "mensaje_recibido="+mensaje_recibido + Environment.NewLine;
            texto = texto+ "id_wa=" + id_wa + Environment.NewLine;
            texto = texto + "telefono_wa=" + telefono_wa + Environment.NewLine;
            texto = texto + "mensaje_enviado=" + mensaje_enviado + Environment.NewLine;
            Datos dt = new Datos();
            dt.insertar(mensaje_recibido, mensaje_enviado,id_wa,telefono_wa);
            //File.WriteAllText("texto.txt", texto);
            //SI NO HAY ERROR RETORNAMOS UN OK
            var response = new HttpResponseMessage(HttpStatusCode.OK);
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
            return response;
        }
    }
}

image 32
Validamos en la base de datos que los registros se hayan insertado

Los comentarios están cerrados.