From 0a7ca48dc4359d32da6edba2ac7de4702fe2312c Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Wed, 9 Oct 2024 19:15:00 -0700 Subject: [PATCH] --Enviar mensaje de bienvenida whatsapp --- App_Code/modExtensiones.vb | 88 +++++++++++++++++++++++++++---- Sistemas/SessionesActivas.aspx | 1 - Sistemas/SessionesActivas.aspx.vb | 5 +- Sistemas/UsuarioDetalle.aspx | 34 +++++++++++- Sistemas/UsuarioDetalle.aspx.vb | 84 ++++++++++++++++++++++++++++- 5 files changed, 194 insertions(+), 18 deletions(-) diff --git a/App_Code/modExtensiones.vb b/App_Code/modExtensiones.vb index 1831a63a6..a650d3ebc 100644 --- a/App_Code/modExtensiones.vb +++ b/App_Code/modExtensiones.vb @@ -25,6 +25,7 @@ Imports iText.Html2pdf Imports iText.Html2pdf.Resolver.Font Imports iText.Layout.Properties Imports Newtonsoft.Json +Imports Stimulsoft.Base.Json.Linq Namespace Extensiones #Region "E X T E N S I O N E S" @@ -153,6 +154,8 @@ Namespace Extensiones Public Const MinFecha As Date = #1/1/1900# Public Const MaxFecha As Date = #1/1/9999# Public Const GlobalRowVersion As Integer = 555555 + Public Const WhatsAppToken As String = "EAAQvTBdnkp4BO51Hmf5PD48NaY3ZC830gUS7WVNNoZAampZCK256UQ68OZCVCcPZCZCMmtW4xZA0PtP8HLRz6ZASufOgqk4A0lOpCi4ZBtWR5ZCpiMZCr9e0PpwUx4lZBW0spGZBM1DcOHQE5DnTmeJ1RISBnzI1i8RbRClLk2xbvNTu4elEXoSaofd96bW2mQ66ddLprSAZDZD" + #Region "PropiedadesEncriptación" Private _Key() As Byte = {} @@ -628,21 +631,14 @@ Namespace Extensiones Return String.Format("
  • {0}{3}
  • ", Time, Tipo, Ico, Mensaje, Link, If(tonewpage, "target=""_blank""", "")) End Function - Public Function EnviarNotificacionWhatsApp(NumeroTelefono As String, Mensaje As String, Optional NombrePlantilla As String = "", Optional Token As String = "") As Boolean + Public Function EnviarNotificacionWhatsApp(NumeroTelefono As String, Mensaje As String, Optional NombrePlantilla As String = "") As Boolean Dim RetornoObj As String = "{}" Dim Retorno As Boolean = False - Dim Str As String = "" - - If String.IsNullOrEmpty(Token) Then - Str = My.Computer.FileSystem.ReadAllText($"c:\temp\WSToken.txt") - Else - Str = Token - End If Try - Dim TokenAutorizacion As String = $"Bearer {Str}" + Dim TokenAutorizacion As String = $"Bearer {WhatsAppToken}" Using httpClient = New HttpClient() - Using request = New HttpRequestMessage(HttpMethod.Post, New Uri("https://graph.facebook.com/v20.0/400260286507131/messages")) + Using request = New HttpRequestMessage(HttpMethod.Post, New Uri("https://graph.facebook.com/v20.0/425866980604901/messages")) request.Headers.Add("Authorization", TokenAutorizacion) Dim json = New Newtonsoft.Json.Linq.JObject() @@ -687,6 +683,78 @@ Namespace Extensiones Return Retorno End Function + Public Function EnviarNotificacionBienvendiaWhatsApp(NumeroTelefono As String, NombreUsuario As String, Mensaje As String) As Boolean + Dim RetornoObj As String = "{}" + Dim Retorno As Boolean = False + + Try + Dim TokenAutorizacion As String = $"Bearer {WhatsAppToken}" + Using httpClient = New HttpClient() + Using request = New HttpRequestMessage(HttpMethod.Post, New Uri("https://graph.facebook.com/v20.0/425866980604901/messages")) + + request.Headers.Add("Authorization", TokenAutorizacion) + Dim json = New Newtonsoft.Json.Linq.JObject() + json.Add(New Newtonsoft.Json.Linq.JProperty("messaging_product", "whatsapp")) + json.Add(New Newtonsoft.Json.Linq.JProperty("to", NumeroTelefono)) + + json.Add(New Newtonsoft.Json.Linq.JProperty("type", "template")) + + Dim plantilla As New Newtonsoft.Json.Linq.JObject( + New Newtonsoft.Json.Linq.JProperty("name", "bienvenida"), + New Newtonsoft.Json.Linq.JProperty("language", + New Newtonsoft.Json.Linq.JObject( + New Newtonsoft.Json.Linq.JProperty("code", "es_MX") + ) + ), + New Newtonsoft.Json.Linq.JProperty("components", + New Newtonsoft.Json.Linq.JArray( + New Newtonsoft.Json.Linq.JObject( + New Newtonsoft.Json.Linq.JProperty("type", "header"), + New Newtonsoft.Json.Linq.JProperty("parameters", + New Newtonsoft.Json.Linq.JArray( + New Newtonsoft.Json.Linq.JObject( + New Newtonsoft.Json.Linq.JProperty("type", "text"), + New Newtonsoft.Json.Linq.JProperty("text", NombreUsuario) + ) + ) + ) + ), + New Newtonsoft.Json.Linq.JObject( + New Newtonsoft.Json.Linq.JProperty("type", "body"), + New Newtonsoft.Json.Linq.JProperty("parameters", + New Newtonsoft.Json.Linq.JArray( + New Newtonsoft.Json.Linq.JObject( + New Newtonsoft.Json.Linq.JProperty("type", "text"), + New Newtonsoft.Json.Linq.JProperty("text", Mensaje) + ) + ) + ) + ) + ) + ) + ) + + json.Add(New Newtonsoft.Json.Linq.JProperty("template", plantilla)) + + Using content = New StringContent(json.ToString, Encoding.UTF8, "application/json") + request.Content = content + Dim response = httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead).Result + + If response.StatusCode = Net.HttpStatusCode.OK Then + RetornoObj = response.Content.ReadAsStringAsync().Result + Retorno = True + End If + End Using + + End Using + + End Using + Catch ex As Exception + RetornoObj = New Newtonsoft.Json.Linq.JObject(New Newtonsoft.Json.Linq.JProperty("Error", ex.ToString())).ToString() + GuardaLog("Ocurrió un error al enviar la informacion por whatsapp" & ex.Message) + End Try + Return Retorno + End Function #End Region diff --git a/Sistemas/SessionesActivas.aspx b/Sistemas/SessionesActivas.aspx index 312a880fb..580cd16d9 100644 --- a/Sistemas/SessionesActivas.aspx +++ b/Sistemas/SessionesActivas.aspx @@ -129,7 +129,6 @@ - diff --git a/Sistemas/SessionesActivas.aspx.vb b/Sistemas/SessionesActivas.aspx.vb index 2b0a81488..36c3c06e8 100644 --- a/Sistemas/SessionesActivas.aspx.vb +++ b/Sistemas/SessionesActivas.aspx.vb @@ -193,9 +193,8 @@ Partial Class SessionesActivas Dim mensaje = TxtMensaje.Text.Trim() + "
    Liga" - 'TokenPermanente - Dim Token = "EAAQvTBdnkp4BO51Hmf5PD48NaY3ZC830gUS7WVNNoZAampZCK256UQ68OZCVCcPZCZCMmtW4xZA0PtP8HLRz6ZASufOgqk4A0lOpCi4ZBtWR5ZCpiMZCr9e0PpwUx4lZBW0spGZBM1DcOHQE5DnTmeJ1RISBnzI1i8RbRClLk2xbvNTu4elEXoSaofd96bW2mQ66ddLprSAZDZD" - EnviarNotificacionWhatsApp("6621143532", mensaje, Token:=Token) + + EnviarNotificacionWhatsApp("6621143532", mensaje) ClsSisNotificaciones.EnviarAlerta("Aviso", mensaje, RCveUsuario, Tipo:=TipoNotificacion.ToastInformacionB) diff --git a/Sistemas/UsuarioDetalle.aspx b/Sistemas/UsuarioDetalle.aspx index 06a85cab7..251d0e29b 100644 --- a/Sistemas/UsuarioDetalle.aspx +++ b/Sistemas/UsuarioDetalle.aspx @@ -1249,7 +1249,7 @@
    -
    +
    @@ -2622,6 +2622,37 @@
    +
    +
    +
    +
    + + Notificaciones +
    +
    +
    +
    +
    +
    + + +
    +
    +
    + + + + + + + + +
    Celular: + +
    +
    +
    +
    @@ -3194,7 +3225,6 @@
    -
    diff --git a/Sistemas/UsuarioDetalle.aspx.vb b/Sistemas/UsuarioDetalle.aspx.vb index ab86e0424..ad57bdcea 100644 --- a/Sistemas/UsuarioDetalle.aspx.vb +++ b/Sistemas/UsuarioDetalle.aspx.vb @@ -2,6 +2,7 @@ Option Strict On Imports System.Data +Imports System.Net.Http Imports Extensiones Imports Microsoft.Reporting.WebForms @@ -611,6 +612,7 @@ Partial Class Sistemas_UsuarioDetalle TxtPorcentajeMaximoAutorizacion.Text = ObjUsuario.DtResultados.Rows(0)("PorcentajeMaximoAutorizacion").ToString().ToDecimal().FormatoNumero(2) TxtDiasVencidos.Text = ObjUsuario.DtResultados.Rows(0)("DiasMaximoAutorizacion").ToString() + TxtTelefono.Text = ObjUsuario.DtResultados.Rows(0)("Celular").ToString() Else Alert("El Usuario Solicitado no existe, Revise su búsqueda.", TipoMensaje.MsgAdvertencia) BtnGuardar.Enabled = False @@ -858,7 +860,7 @@ Partial Class Sistemas_UsuarioDetalle 'REGISTRA O ACTUALIZA LOS DATOS GENERALES DEL USUARIO If CveUsuario = -1 Then - CveUsuario = ObjUsuarios.AddUsuario(TxtUsuario.Text.Trim, Encripta(ContraseñaPredeterminada), TxtNombre.Text.Trim, DdlRol.SelectedValue.ToEntero, TxtCorreo.Text.Trim, DdlPersonal.SelectedValue.ToEntero, DdlVendedor.SelectedValue.ToEntero, ChkCambiarContraseña.Checked, UsuarioActual.CveUsuario, DdlEmpresa.SelectedValue.ToEntero, DdlSubProyectos.SelectedValue.ToEntero, CveAlmacenAsignado:=DdlAlmacenGeneral.SelectedValue.ToEntero, AsignarSubProyecto:=ChkAsignarSubProyecto.Checked, AsignarOC:=ChkAsignarOC.Checked, DescuentoAutorizado:=TxtDescuentoAutorizado.Text.ToDouble, CodigoAcceso:=CodigoAcceso, LimiteCreditoAutorizado:=TxtLimiteAutorizado.Text.ToDecimal(), PorcentajeMaximoAutorizacion:=TxtPorcentajeMaximoAutorizacion.Text.ToDecimal(), DiasMaximoAutorizacion:=TxtDiasVencidos.Text.ToEntero()) + CveUsuario = ObjUsuarios.AddUsuario(TxtUsuario.Text.Trim, Encripta(ContraseñaPredeterminada), TxtNombre.Text.Trim, DdlRol.SelectedValue.ToEntero, TxtCorreo.Text.Trim, DdlPersonal.SelectedValue.ToEntero, DdlVendedor.SelectedValue.ToEntero, ChkCambiarContraseña.Checked, UsuarioActual.CveUsuario, DdlEmpresa.SelectedValue.ToEntero, DdlSubProyectos.SelectedValue.ToEntero, CveAlmacenAsignado:=DdlAlmacenGeneral.SelectedValue.ToEntero, AsignarSubProyecto:=ChkAsignarSubProyecto.Checked, AsignarOC:=ChkAsignarOC.Checked, DescuentoAutorizado:=TxtDescuentoAutorizado.Text.ToDouble, CodigoAcceso:=CodigoAcceso, LimiteCreditoAutorizado:=TxtLimiteAutorizado.Text.ToDecimal(), PorcentajeMaximoAutorizacion:=TxtPorcentajeMaximoAutorizacion.Text.ToDecimal(), DiasMaximoAutorizacion:=TxtDiasVencidos.Text.ToEntero(), Celular:=TxtTelefono.Text.Trim()) EsNuevoUsuario = True If CveUsuario = -1 Then TieneError = True @@ -870,7 +872,7 @@ Partial Class Sistemas_UsuarioDetalle End If Next Else - If Not ObjUsuarios.UpdateUsuario(TxtUsuario.Text.Trim, TxtNombre.Text.Trim, DdlRol.SelectedValue.ToEntero, TxtCorreo.Text.Trim, DdlPersonal.SelectedValue.ToEntero, DdlVendedor.SelectedValue.ToEntero, ChkCambiarContraseña.Checked, ChkEstatus.Checked, DdlEmpresa.SelectedValue.ToEntero, CveUsuario, DdlAlmacenGeneral.SelectedValue.ToEntero, DdlSubProyectos.SelectedValue.ToEntero, UsuarioActual.CveUsuario, AsignarSubProyecto:=ChkAsignarSubProyecto.Checked, AsignarOC:=ChkAsignarOC.Checked, DescuentoAutorizado:=TxtDescuentoAutorizado.Text.ToDouble, CodigoAcceso:=CodigoAcceso, LimiteCreditoAutorizado:=TxtLimiteAutorizado.Text.ToDecimal(), PorcentajeMaximoAutorizacion:=TxtPorcentajeMaximoAutorizacion.Text.ToDecimal(), DiasMaximoAutorizacion:=TxtDiasVencidos.Text.ToEntero()) Then + If Not ObjUsuarios.UpdateUsuario(TxtUsuario.Text.Trim, TxtNombre.Text.Trim, DdlRol.SelectedValue.ToEntero, TxtCorreo.Text.Trim, DdlPersonal.SelectedValue.ToEntero, DdlVendedor.SelectedValue.ToEntero, ChkCambiarContraseña.Checked, ChkEstatus.Checked, DdlEmpresa.SelectedValue.ToEntero, CveUsuario, DdlAlmacenGeneral.SelectedValue.ToEntero, DdlSubProyectos.SelectedValue.ToEntero, UsuarioActual.CveUsuario, AsignarSubProyecto:=ChkAsignarSubProyecto.Checked, AsignarOC:=ChkAsignarOC.Checked, DescuentoAutorizado:=TxtDescuentoAutorizado.Text.ToDouble, CodigoAcceso:=CodigoAcceso, LimiteCreditoAutorizado:=TxtLimiteAutorizado.Text.ToDecimal(), PorcentajeMaximoAutorizacion:=TxtPorcentajeMaximoAutorizacion.Text.ToDecimal(), DiasMaximoAutorizacion:=TxtDiasVencidos.Text.ToEntero(), Celular:=TxtTelefono.Text.Trim()) Then TieneError = True End If @@ -5013,4 +5015,82 @@ Partial Class Sistemas_UsuarioDetalle params.Add(New ReportParameter("LogoPath", If(Imagen.Exists, $"file://{Imagen.FullName}", ""))) ImprimirPDF("Empresas/Grales/Formatos/BitacoraLogin.rdlc", DtDatos, params, String.Format("BitacoraRegistro-{0}", NowADS().ToDateTime.ToShortDateString)) End Sub + + Protected Sub BtnEnviarMensaje_Click(sender As Object, e As EventArgs) + EnviarNotificacionBienvendiaWhatsApp($"52{TxtTelefono.Text}", TxtNombre.Text, "\nFavor de responder el mensaje") + Alert("El mensaje se envio correctamente") + End Sub + + 'Public Function EnviarNotificacionBienvendiaWhatsApp(NumeroTelefono As String, NombreUsuario As String, Mensaje As String) As Boolean + ' Dim RetornoObj As String = "{}" + ' Dim Retorno As Boolean = False + + ' Try + ' Dim TokenAutorizacion As String = $"Bearer {WhatsAppToken}" + ' Using httpClient = New HttpClient() + ' Using request = New HttpRequestMessage(HttpMethod.Post, New Uri("https://graph.facebook.com/v20.0/425866980604901/messages")) + + ' request.Headers.Add("Authorization", TokenAutorizacion) + ' Dim json = New Newtonsoft.Json.Linq.JObject() + ' json.Add(New Newtonsoft.Json.Linq.JProperty("messaging_product", "whatsapp")) + ' json.Add(New Newtonsoft.Json.Linq.JProperty("to", NumeroTelefono)) + + ' json.Add(New Newtonsoft.Json.Linq.JProperty("type", "template")) + + ' Dim plantilla As New Newtonsoft.Json.Linq.JObject( + ' New Newtonsoft.Json.Linq.JProperty("name", "bienvenida"), + ' New Newtonsoft.Json.Linq.JProperty("language", + ' New Newtonsoft.Json.Linq.JObject( + ' New Newtonsoft.Json.Linq.JProperty("code", "es_MX") + ' ) + ' ), + ' New Newtonsoft.Json.Linq.JProperty("components", + ' New Newtonsoft.Json.Linq.JArray( + ' New Newtonsoft.Json.Linq.JObject( + ' New Newtonsoft.Json.Linq.JProperty("type", "header"), + ' New Newtonsoft.Json.Linq.JProperty("parameters", + ' New Newtonsoft.Json.Linq.JArray( + ' New Newtonsoft.Json.Linq.JObject( + ' New Newtonsoft.Json.Linq.JProperty("type", "text"), + ' New Newtonsoft.Json.Linq.JProperty("text", NombreUsuario) + ' ) + ' ) + ' ) + ' ), + ' New Newtonsoft.Json.Linq.JObject( + ' New Newtonsoft.Json.Linq.JProperty("type", "body"), + ' New Newtonsoft.Json.Linq.JProperty("parameters", + ' New Newtonsoft.Json.Linq.JArray( + ' New Newtonsoft.Json.Linq.JObject( + ' New Newtonsoft.Json.Linq.JProperty("type", "text"), + ' New Newtonsoft.Json.Linq.JProperty("text", Mensaje) + ' ) + ' ) + ' ) + ' ) + ' ) + ' ) + ' ) + + ' json.Add(New Newtonsoft.Json.Linq.JProperty("template", plantilla)) + + ' Using content = New StringContent(json.ToString, Encoding.UTF8, "application/json") + ' request.Content = content + ' Dim response = httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead).Result + + ' If response.StatusCode = Net.HttpStatusCode.OK Then + ' RetornoObj = response.Content.ReadAsStringAsync().Result + ' Retorno = True + ' End If + ' End Using + + ' End Using + + ' End Using + ' Catch ex As Exception + ' RetornoObj = New Newtonsoft.Json.Linq.JObject(New Newtonsoft.Json.Linq.JProperty("Error", ex.ToString())).ToString() + ' GuardaLog("Ocurrió un error al enviar la informacion por whatsapp" & ex.Message) + ' End Try + ' Return Retorno + 'End Function End Class