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 @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@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 [email protected]_CHARACTER_SET_CLIENT */;
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
/*!40101 SET [email protected]_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

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

En Programador Novato vivimos de los anuncios, hemos detectado que está utilizando extensiones para bloquear anuncios. Ayudanos deshabilitando tu bloqueador de anuncios. :)