4. Recibir whatsapp

Contestar los WhatsApp recibidos en C#

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 recibidos en C#, siguiendo estos pasos:

image 33
Agregamos este codigo para validar que el id no se haya resibido ya

namespace ChatBotWa.Models
{
    using MySqlConnector;
    public class Datos
    {
        MySqlConnection connection = null;
        public Datos() {
            connection = new MySqlConnection("Server=localhost;User ID=root;Password=;Database=chat");
            connection.Open();
        }
        public void insertar(string mensaje_recibido,string mensaje_enviado   , string id_wa, string telefono_wa)
        {
            
            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 + "');";
                
                command.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
            }
        }
        //VALIDAMOS SI EL ID DE WA YA EXISTE
        public Boolean idWaExiste(string id_wa)
        {
            try
            {
                var command = connection.CreateCommand();
                command.CommandText = "SELECT * FROM `registro` WHERE `id_wa` = '"+ id_wa + "'";
                using MySqlDataReader rdr = command.ExecuteReader();
                if (rdr.Read())
                {
                    return true;
                }
                else {
                    return false;
                }
            }
            catch (Exception ex)
            {
            }
            return false;
        }

    }


    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 34
Agregamos este codigo para validar que el mensaje no se haya enviado en caso contrario enviar el mensaje con esta funcion

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;
            Datos dt = new Datos();
            var existeId = dt.idWaExiste(id_wa);
            if (existeId==false)
            {
                //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;

                dt.insertar(mensaje_recibido, mensaje_enviado, id_wa, telefono_wa);
                enviaAsync(telefono_wa, mensaje_enviado);
            }
            //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;
        }
        public async Task enviaAsync(string telefono, string mensaje)
        {
            telefono = telefono.Replace("521", "52");
            string token = "EABY2XYgjGo4BANdeZBqoJ11edwLjusQ4zSFsDpdn6IVxjuHKdWhN7RL188QKsyU9xoFvGPQG78FySQP7WOZB5uiojzv6kLhJkxZCYQGmSJPpuDUtrwcf7iUOVAyUbOYQNVpS25sYXUid7POpBZAEqsikp1UNSNQOPG2KWrZC66Drd71c8DVa3fhfg1wq6c125bkO0OmmusQZDZD";
            //Identificador de número de teléfono
            string idTelefono = "111290641852610";
            HttpClient client = new HttpClient();
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://graph.facebook.com/v15.0/" + idTelefono + "/messages");
            request.Headers.Add("Authorization", "Bearer " + token);
            string json = "{\"messaging_product\": \"whatsapp\",\"recipient_type\": \"individual\",\"to\": \"" + telefono + "\",\"type\": \"text\",\"text\": {\"body\": \"" + mensaje + "\"}}";
            request.Content = new StringContent(json);
            request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            HttpResponseMessage response = await client.SendAsync(request);
            //response.EnsureSuccessStatusCode();
            string responseBody = await response.Content.ReadAsStringAsync();

        }

    }
}

image 35
Al enviar un mensaje recibimos una respuesta

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. :)