Enlace de salida de Notification Hubs para Azure Functions

En este artículo se explica cómo enviar notificaciones Configurar las notificaciones de inserción mediante el uso de enlaces de Azure Notification Hubs en Azure Functions. Azure Functions admite los enlaces de salida para Notification Hubs.

Azure Notification Hubs debe estar configurado para el servicio de notificaciones de plataforma (PNS) que desea usar. Para información sobre cómo obtener notificaciones de inserción en la aplicación cliente desde Notification Hubs, consulte Introducción a Notification Hubs y seleccione la plataforma cliente de destino en la lista desplegable que aparece cerca de la parte superior de la página.

Importante

Google ha dejado de usar Google Cloud Messaging (GCM) en favor de Firebase Cloud Messaging (FCM). Este enlace de salida no es compatible con FCM. Para enviar notificaciones con FCM, use Firebase API directamente en su función o use notificaciones de plantilla.

Paquetes: Functions 1.x

Los enlaces de Notification Hubs se proporcionan en el paquete NuGet Microsoft.Azure.WebJobs.Extensions.NotificationHubs, versión 1.x. El código fuente del paquete está en el repositorio azure-webjobs-sdk-extensions de GitHub.

En la siguiente tabla se explica cómo agregar compatibilidad para este enlace en cada entorno de desarrollo.

Entorno de desarrollo Para agregar compatibilidad en
Functions 1.x
Desarrollo local: biblioteca de clases C# Instalación del paquete
Desarrollo local: script de C#, JavaScript, F# Automático
Desarrollo con Portal Automático

Paquetes: Functions 2.x y versiones posteriores

Este enlace no está disponible en Functions 2.x y versiones posteriores.

Ejemplo: plantilla

Las notificaciones que envía pueden ser notificaciones nativas o de plantilla. Las notificaciones nativas se envían a una plataforma cliente específica, tal como está configurado en la propiedad platform del enlace de salida. Las notificaciones de plantillas pueden enviarse varias plataformas.

Vea el ejemplo específico del lenguaje:

Ejemplo de plantilla de script de C#: parámetro de salida

En este ejemplo, se envía una notificación a un registro de plantillas que contiene un marcador de posición message en la plantilla.

using System;
using System.Threading.Tasks;
using System.Collections.Generic;

public static void Run(string myQueueItem,  out IDictionary<string, string> notification, TraceWriter log)
{
    log.Info($"C# Queue trigger function processed: {myQueueItem}");
    notification = GetTemplateProperties(myQueueItem);
}

private static IDictionary<string, string> GetTemplateProperties(string message)
{
    Dictionary<string, string> templateProperties = new Dictionary<string, string>();
    templateProperties["message"] = message;
    return templateProperties;
}

Ejemplo de plantilla de script de C#: asincrónico

Si va a utilizar código asincrónico, no se admiten parámetros de salida. En este caso, utilice IAsyncCollector para devolver la notificación de plantillas. El código siguiente es un ejemplo asincrónico del anterior.

using System;
using System.Threading.Tasks;
using System.Collections.Generic;

public static async Task Run(string myQueueItem, IAsyncCollector<IDictionary<string,string>> notification, TraceWriter log)
{
    log.Info($"C# Queue trigger function processed: {myQueueItem}");

    log.Info($"Sending Template Notification to Notification Hub");
    await notification.AddAsync(GetTemplateProperties(myQueueItem));    
}

private static IDictionary<string, string> GetTemplateProperties(string message)
{
    Dictionary<string, string> templateProperties = new Dictionary<string, string>();
    templateProperties["user"] = "A new user wants to be added : " + message;
    return templateProperties;
}

Ejemplo de plantilla de script de C#: JSON

En este ejemplo, se envía una notificación a un registro de plantillas que contiene un marcador de posición message en la plantilla mediante una cadena JSON válida.

using System;

public static void Run(string myQueueItem,  out string notification, TraceWriter log)
{
    log.Info($"C# Queue trigger function processed: {myQueueItem}");
    notification = "{\"message\":\"Hello from C#. Processed a queue item!\"}";
}

Ejemplo de plantilla de script de C#: tipos de biblioteca

En este ejemplo, se muestra cómo utilizar los tipos definidos en la biblioteca de Microsoft Azure Notification Hubs.

#r "Microsoft.Azure.NotificationHubs"

using System;
using System.Threading.Tasks;
using Microsoft.Azure.NotificationHubs;

public static void Run(string myQueueItem,  out Notification notification, TraceWriter log)
{
   log.Info($"C# Queue trigger function processed: {myQueueItem}");
   notification = GetTemplateNotification(myQueueItem);
}

private static TemplateNotification GetTemplateNotification(string message)
{
    Dictionary<string, string> templateProperties = new Dictionary<string, string>();
    templateProperties["message"] = message;
    return new TemplateNotification(templateProperties);
}

Ejemplo de plantilla de F#

En este ejemplo, se envía una notificación a un registro de plantillasmessage que contiene y location.

let Run(myTimer: TimerInfo, notification: byref<IDictionary<string, string>>) =
    notification = dict [("location", "Redmond"); ("message", "Hello from F#!")]

Ejemplo de plantilla de JavaScript

En este ejemplo, se envía una notificación a un registro de plantillasmessage que contiene y location.

module.exports = async function (context, myTimer) {
    var timeStamp = new Date().toISOString();

    if (myTimer.IsPastDue)
    {
        context.log('Node.js is running late!');
    }
    context.log('Node.js timer trigger function ran!', timeStamp);  
    context.bindings.notification = {
        location: "Redmond",
        message: "Hello from Node!"
    };
};

Ejemplo: nativo de APNS

En este ejemplo de script de C# se muestra cómo enviar una notificación APNS nativa.

#r "Microsoft.Azure.NotificationHubs"
#r "Newtonsoft.Json"

using System;
using Microsoft.Azure.NotificationHubs;
using Newtonsoft.Json;

public static async Task Run(string myQueueItem, IAsyncCollector<Notification> notification, TraceWriter log)
{
    log.Info($"C# Queue trigger function processed: {myQueueItem}");

    // In this example the queue item is a new user to be processed in the form of a JSON string with 
    // a "name" value.
    //
    // The JSON format for a native APNS notification is ...
    // { "aps": { "alert": "notification message" }}  

    log.LogInformation($"Sending APNS notification of a new user");    
    dynamic user = JsonConvert.DeserializeObject(myQueueItem);    
    string apnsNotificationPayload = "{\"aps\": {\"alert\": \"A new user wants to be added (" + 
                                        user.name + ")\" }}";
    log.LogInformation($"{apnsNotificationPayload}");
    await notification.AddAsync(new AppleNotification(apnsNotificationPayload));        
}

Ejemplo: nativo de WNS

En este ejemplo de script de C# se muestra cómo usar los tipos definidos en la biblioteca de Microsoft Azure Notification Hubs para enviar una notificación de WNS nativa.

#r "Microsoft.Azure.NotificationHubs"
#r "Newtonsoft.Json"

using System;
using Microsoft.Azure.NotificationHubs;
using Newtonsoft.Json;

public static async Task Run(string myQueueItem, IAsyncCollector<Notification> notification, TraceWriter log)
{
    log.Info($"C# Queue trigger function processed: {myQueueItem}");

    // In this example the queue item is a new user to be processed in the form of a JSON string with 
    // a "name" value.
    //
    // The XML format for a native WNS toast notification is ...
    // <?xml version="1.0" encoding="utf-8"?>
    // <toast>
    //      <visual>
    //     <binding template="ToastText01">
    //       <text id="1">notification message</text>
    //     </binding>
    //   </visual>
    // </toast>

    log.Info($"Sending WNS toast notification of a new user");    
    dynamic user = JsonConvert.DeserializeObject(myQueueItem);    
    string wnsNotificationPayload = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                                    "<toast><visual><binding template=\"ToastText01\">" +
                                        "<text id=\"1\">" + 
                                            "A new user wants to be added (" + user.name + ")" + 
                                        "</text>" +
                                    "</binding></visual></toast>";

    log.Info($"{wnsNotificationPayload}");
    await notification.AddAsync(new WindowsNotification(wnsNotificationPayload));        
}

Atributos

En las bibliotecas de clases de C#, use el atributo NotificationHub.

Los parámetros y las propiedades del constructor del atributo se describen en la sección de configuración.

Configuración

En la siguiente tabla se explican las propiedades de configuración de enlace que se establecen en el archivo function.json y el atributo NotificationHub:

Propiedad de function.json Propiedad de atributo Descripción
type N/D Se debe establecer en notificationHub.
direction N/D Se debe establecer en out.
name N/D Nombre de variable usado en el código de función para el mensaje del Centro de notificaciones.
tagExpression TagExpression Las expresiones de etiqueta permiten especificar las notificaciones que se entregarán a un conjunto de dispositivos que se registraron para recibir las notificaciones que coincidan con estas expresiones. Para obtener más información, consulte Expresiones de etiqueta y enrutamiento.
hubName HubName Nombre del recurso del Centro de notificaciones en Azure Portal.
connection ConnectionStringSetting El nombre de una configuración de aplicación que contiene una cadena de conexión de Notification Hubs. La cadena de conexión se debe establecer en el valor DefaultFullSharedAccessSignature de la instancia de Notification Hub. Consulte Configuración de la cadena de conexión más adelante en este artículo.
platform Plataforma La propiedad de plataforma indica la plataforma cliente a donde se enviará la notificación. De forma predeterminada, si se omite la propiedad de plataforma desde el enlace de salida, las notificaciones de plantilla se pueden usar para tener como destino cualquier plataforma configurada en el centro de notificaciones de Azure. Para obtener más información sobre cómo utilizar plantillas en general para enviar notificaciones multiplataforma con un Centro de notificaciones de Azure, consulte Templates (Plantillas). Al establecerse, platform debe ser uno de los siguientes valores:

Cuando esté desarrollando localmente, agregue la configuración de la aplicación en el archivo local.settings.json de la colección .

Ejemplo de archivo function.json

A continuación, se muestra un ejemplo de un enlace de Notification Hubs en un archivo function.json.

{
  "bindings": [
    {
      "type": "notificationHub",
      "direction": "out",
      "name": "notification",
      "tagExpression": "",
      "hubName": "my-notification-hub",
      "connection": "MyHubConnectionString",
      "platform": "apns"
    }
  ],
  "disabled": false
}

Configuración de la cadena de conexión

Para usar un enlace de salida de una instancia de Notification Hub, debe configurar la cadena de conexión de la instancia. Puede seleccionar una instancia de Notification Hubs existente o crear una nuevo desde la pestaña Integrar de Azure Portal. También puede configurar la cadena de conexión de forma manual.

Para configurar la cadena de conexión a un Centro de notificaciones existente:

  1. Vaya al Centro de notificaciones en Azure Portal, elija Directivas de acceso y seleccione el botón Copiar situado junto a la directiva DefaultFullSharedAccessSignature. Con esto se copia la cadena de conexión de la directiva DefaultFullSharedAccessSignature en el Centro de notificaciones. Esta cadena de conexión permite que la función envíe mensajes de notificación a la instancia de Notification Hubs. Copia de la cadena de conexión del Centro de notificaciones
  2. Vaya a la aplicación de función en Azure Portal, elija Configuración de la aplicación, agregue una clave como MyHubConnectionString, pegue el elemento DefaultFullSharedAccessSignature copiado para la instancia de Notification Hubs como el valor y luego haga clic en Guardar.

El nombre de esta configuración de aplicación es lo que va en la configuración de conexión del enlace de salida en function.json o el atributo .NET. Consulte la sección Configuración que apareció anteriormente en este artículo.

Cuando esté desarrollando localmente, agregue la configuración de la aplicación en el archivo local.settings.json de la colección .

Excepciones y códigos de retorno

Enlace Referencia
Centro de notificaciones Guía de operaciones

Pasos siguientes