Artículo
· 9 feb, 2020 Lectura de 7 min

Usar API externa para crear notificaciones

Hola, en este artículo comparto cómo usar una API para crear notificaciones. En concreto trabajaremos con OneSignal:

https://documentation.onesignal.com/reference#create-notification

 

Primero, en el servicio recibimos un mensaje con la siguiente estructura:

 

{

    "idApp": "111111111",

    "numExpediente": "111111111",

    "idioma": "ES",

    "tipoNotificacion": "citafuturaAP",

    "notificacion": {

        "titulo": "Cita Atención Primaria",

        "subtitulo": "C.P. ISORA",

       "mensaje": "Aquí el contenido del mensaje si aplicase",

       "datosAdicionales": [

            {

               "clave": "centro",

               "valor": "C.P. ISORA",

           },

           {

               "clave": "fecha", {}

               "valor": "yyyy/mm/dd",

           },

           {

               "clave": "hora",

               "valor": "hh:mm",

           },

           {

               "clave": "profesional",

               "valor": "nombre del profesional",

           },

           {

               "clave": "nomUsuario",

               "valor": "nombre del usuario",

           },

           {

               "clave": "codcita",

               "valor": "idCita",

           },

           {

               "clave": "sepuedeborrar",

               "valor": 1,

           }

       ]

    }

}

 

Segundo, necesitamos enviar a OneSignal la siguiente estructura:

 

{

    "app_id": "11111",

    "headings": {"en":"Cita Atencion Primaria","es":"Cita Atencion Primaria"},

    "subtitle": {"en":"C.P. ISORA","es":"C.P. ISORA"},

    "contents": {"en": "Next appointment", "es": "Siguiente cita"},

    "data":{

               "centro": "C.P. ISORA",

                

               "fecha": "yyyy/mm/dd",

                

               "hora": "hh:mm",

               "profesional": "nombre del profesional",

               "nomUsuario": "nombre del usuario",

                

               "codcita": "idCita",

                

               "sepuedeborrar": 1

    },

    "include_player_ids": ["c2917a6f-6ecf-4f45-8b31-9b72538580fd"]

}

 

Lo que haremos será ayudarnos del siguiente código en el Proceso, cuya misión es convertir datosAdicionales, en data, guardándolo en la variable global ^data:

 

 

 set data = "{"

 

  $$$LOGINFO("datosAdicionales: "_request.notificacion.datosAdicionales)

 

  for i=1:1:request.notificacion.datosAdicionales.Count(){

   //$$$LOGINFO("i: "_i)

   set datos = request.notificacion.datosAdicionales.GetAt(i)

   //$$$LOGINFO("datos.clave: "_datos.clave)

   //$$$LOGINFO("datos.valor: "_datos.valor)

   

   set data = data_""""_datos.clave_""""_":"_""""_datos.valor_""""_","

   $$$LOGINFO("data: "_data)

  }

  set data=$extract(data,1,$length(data)-1)_"}"

  $$$LOGINFO("data: "_data)

  set ^data = data

 

El resultado de hacer pasar el mensaje anterior por el proceso es:

 

^data: {"centro":"C.P. ISORA","fecha":"yyy/mm/dd","hora":"hh:mm","profesional":"nombre del profesional","nomUsuario":"nombre de usuario","codcita":"idCita","sepuedeborrar":"1"}

 

A continuación, vamos a la Operación, donde haremos un POST, creando el JSON y enviándolo a la API:

 

Class Operaciones.REST.NotificacionesPUSH.CrearNotificacion Extends EnsLib.REST.Operation

{

Parameter INVOCATION = "Queue";

Method CrearNotificacion(pRequest As Mensajes.Request.NotificacionesPUSH.CrearNotificacion, pResponse As Mensajes.Response.NotificacionesPUSH.CrearNotificacion) As %Library.Status

{

    $$$LOGINFO("^data: "_^data)

   

    Set body = {

     "app_id": (pRequest.idApp),

     "headings": {"en":(pRequest.notificacion.titulo),"es":(pRequest.notificacion.titulo)},

     "subtitle": {"en":(pRequest.notificacion.subtitulo),"es":(pRequest.notificacion.subtitulo)},

     "contents": {"en":(pRequest.notificacion.mensaje),"es":(pRequest.notificacion.mensaje)},

     "data":(^data),

     "include_player_ids": ["c2917a6f-6ecf-4f45-8b31-9b72538580fd"]

    }

   

   

    set httpRequest = ##class(%Net.HttpRequest).%New()

    set tResponse = ##class(%Net.HttpResponse).%New()

   

   

    set httpRequest.Server = "onesignal.com"

    set httpRequest.ContentType = "application/json"

    set httpRequest.Authorization = "Basic "_##class(Util.TablasMaestras).getValorMaestra("NOTIFICACIONESPUSH.PARAMETRIZACIONES","ONESIGNAL_APIKEY")

    $$$LOGINFO("httpRequest.Authorization: "_httpRequest.Authorization)   

    set httpRequest.Https = 1

   

    set httpRequest.SSLConfiguration = "Certificado"

    Do httpRequest.EntityBody.Write(body.%ToJSON())

    set tSC = httpRequest.Post("https://onesignal.com/api/v1/notifications")

   

   

   

    set tResponse = httpRequest.HttpResponse

   

   

    if $$$ISERR(tSC){

            $$$ThrowOnError(tSC)

    }

    if (tResponse.Data.AtEnd = 0) {

        set linea = tResponse.Data.Read()

    }

   

    set pResponse = ##class(Mensajes.Response.NotificacionesPUSH.CrearNotificacion).%New()

    do pResponse.informacion.Write(linea)

   

    Quit pResponse

}

XData MessageMap

{

<MapItems>

  <MapItem MessageType="Mensajes.Request.NotificacionesPUSH.CrearNotificacion">

    <Method>CrearNotificacion</Method>

  </MapItem>

</MapItems>

}

}

 

Con lo anterior hecho, estamos listos para probar mediante POSTMAN. Creamos una nueva request con la URL hacia nuestro servidor, y enviamos el mensaje que hay al inicio del artículo. Como resultado veremos que la API nos responde con el id de la notificación creada, y a cuántos usuarios (recipients) se logró enviar.

Como hemos visto, gracias a ensemble y con algo de código 💻, logramos conectar con APIs externas.

 

Para más información:

https://community.intersystems.com/post/how-could-we-include-json-object...

 

Comentarios (0)1
Inicie sesión o regístrese para continuar