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:

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; }
    }

}

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();

        }

    }
}

Al enviar un mensaje recibimos una respuesta

Los comentarios están cerrados.

Salir de la versión móvil