Connector trigger for Azure Functions (Preview)

Utilisez le déclencheur Connector pour exécuter une fonction lorsqu’un événement survient dans un service tel qu’Office 365, SharePoint, Dataverse, SMTP, Salesforce, et bien d’autres. Le déclencheur reçoit des événements d’un connecteur géré dans l’espace de noms Azure Connector. Pour explorer les connecteurs gérés disponibles, voir la référence des connecteurs.

Pour des informations sur l’installation de l’extension, les types de liaison supportés, l’authentification de rappel et la configuration à l’échelle de l’application, voir l’aperçu de l’extension Connector.

Important

Le déclencheur du Connecteur est actuellement en aperçu public. Les fonctionnalités, les noms de configuration et les connecteurs pris en charge peuvent changer avant la disponibilité générale (GA). L’utilisation de cette fonctionnalité est soumise aux Conditions d’utilisation supplémentaires pour les Aperçus Microsoft Azure.

Note

Le déclencheur Connector n’est pas actuellement pris en charge pour ce langage.

Examples

Les exemples Office 365 Outlook et SharePoint Online utilisent des charges utiles fortement typées issues du SDK Azure Connectors. Pour les opérations de connecteur qui n’ont pas encore de charges utiles fortement typées, liez pour string recevoir la charge utile JSON brute. Ces exemples enregistrent intentionnellement uniquement les informations de base sur la charge utile afin de rester concentrés sur la définition des fonctions déclenchées par le Connecteur. Remplacez la journalisation par la logique de traitement de votre application.

Office 365 Outlook

L’exemple suivant s’exécute lorsqu’un nouvel e-mail arrive dans la boîte aux lettres Office 365 Outlook configurée :

using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Connector;
using Microsoft.Extensions.Logging;
using Azure.Connectors.Sdk.Office365.Models;

namespace Office365App;

public class O365Functions
{
    private readonly ILogger<O365Functions> _logger;

    public O365Functions(ILogger<O365Functions> logger)
    {
        _logger = logger;
    }

    [Function("OnNewEmail")]
    public void OnNewEmail(
        [ConnectorTrigger] Office365OnNewEmailTriggerPayload payload)
    {
        var messageCount = payload.Body?.Value?.Count ?? 0;
        _logger.LogInformation(
            "Received {MessageCount} new email message(s).",
            messageCount);
    }
}

Le Office365OnNewEmailTriggerPayload type est défini dans l’espace Azure.Connectors.Sdk.Office365.Models de noms.

Pour l’exemple complet de code, y compris l’infrastructure et l’enregistrement des déclencheurs, voir Office 365 Outlook déclencheurs pour .NET.

SharePoint en ligne

L’exemple suivant s’exécute lorsqu’un fichier est créé dans la bibliothèque de documents SharePoint Online configurée :

using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Connector;
using Microsoft.Extensions.Logging;
using Azure.Connectors.Sdk.SharePointOnline.Models;

namespace SharePointApp;

public class SharePointFunctions
{
    private readonly ILogger<SharePointFunctions> _logger;

    public SharePointFunctions(ILogger<SharePointFunctions> logger)
    {
        _logger = logger;
    }

    [Function("OnNewFile")]
    public void OnNewFile(
        [ConnectorTrigger] SharePointOnlineOnNewFileItemsTriggerPayload payload)
    {
        var fileCount = payload.Body?.Value?.Count ?? 0;
        _logger.LogInformation(
            "Received {FileCount} new SharePoint file(s).",
            fileCount);
    }
}

Le SharePointOnlineOnNewFileItemsTriggerPayload type est défini dans l’espace Azure.Connectors.Sdk.SharePointOnline.Models de noms.

Pour l’exemple complet de code, y compris l’infrastructure et l’enregistrement des déclencheurs, voir SharePoint Online déclencheurs pour .NET.

Connecteur sans charge utile fortement typée

Certains événements de connecteur n'ont pas encore de charge utile .NET fortement typée. L’exemple suivant s’exécute lorsqu’un nouveau message est ajouté à un chat ou canal Microsoft Teams et lie la charge utile à string:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Connector;
using Microsoft.Extensions.Logging;

namespace TeamsApp;

public class TeamsFunctions
{
    private readonly ILogger<TeamsFunctions> _logger;

    public TeamsFunctions(ILogger<TeamsFunctions> logger)
    {
        _logger = logger;
    }

    [Function("OnNewTeamsMessage")]
    public void OnNewTeamsMessage([ConnectorTrigger] string payload)
    {
        _logger.LogInformation("Received a new Teams message: {Payload}", payload);
    }
}

Pour identifier les opérations de connecteurs qui n'ont pas encore de charges utiles fortement typées, voir Operations to Azure Functions signature mapping.

Attributes

Dans une application worker isolée .NET, appliquez [ConnectorTrigger] au paramètre de fonction qui reçoit la charge utile d’événement :

[Function("OnConnectorEvent")]
public void Run([ConnectorTrigger] string payload)
{
    // Process the raw JSON payload.
}

L’attribut ConnectorTrigger n’a aucune propriété configurable. Configurez le connecteur, le fonctionnement, les paramètres de fonctionnement, la fonction de destination et l’authentification de rappel dans la configuration du déclencheur dans l’espace de noms Azure Connector.

Examples

L’extension du connecteur Node.js fournit des contextes typés pour les opérations Office 365 Outlook, SharePoint Online et Microsoft Teams présentées dans cette section. Ces exemples enregistrent intentionnellement uniquement les informations de base sur la charge utile afin de rester concentrés sur la définition des fonctions déclenchées par le Connecteur. Remplacez la journalisation par la logique de traitement de votre application.

Office 365 Outlook

L’exemple suivant s’exécute lorsqu’un nouvel e-mail arrive dans la boîte aux lettres Office 365 Outlook configurée :

import { InvocationContext } from '@azure/functions';
import {
    connectors,
    EmailTriggerContext,
} from '@azure/functions-extensions-connectors';

connectors.office365.onNewEmail('OnNewEmail', {
    handler: async (
        context: EmailTriggerContext,
        invocationContext: InvocationContext,
    ) => {
        invocationContext.log(
            `Received ${context.emails.length} new email message(s).`,
        );
    },
});

Le EmailTriggerContext type expose les messages sous forme d’un tableau typé emails .

Pour l’exemple complet de code, y compris l’infrastructure et l’enregistrement des déclencheurs, voir Office 365 Outlook déclencheurs pour TypeScript.

SharePoint en ligne

L’exemple suivant s’exécute lorsqu’un fichier est créé dans la bibliothèque de documents SharePoint Online configurée :

import { InvocationContext } from '@azure/functions';
import {
    connectors,
    FileTriggerContext,
} from '@azure/functions-extensions-connectors';

connectors.sharepoint.onNewFile('OnSharepointNewFile', {
    handler: async (
        context: FileTriggerContext,
        invocationContext: InvocationContext,
    ) => {
        invocationContext.log(
            `Received ${context.files.length} new SharePoint file(s).`,
        );
    },
});

Le FileTriggerContext type expose les métadonnées du fichier sous forme d’un tableau typé files .

Pour l’exemple complet de code, incluant l’infrastructure et l’enregistrement des déclencheurs, voir SharePoint Online déclencheurs pour TypeScript.

Microsoft Teams

L’exemple suivant s’exécute lorsqu’un nouveau message est ajouté à un canal Microsoft Teams :

import { InvocationContext } from '@azure/functions';
import {
    ChannelMessageTriggerContext,
    connectors,
} from '@azure/functions-extensions-connectors';

connectors.teams.onNewChannelMessage('OnNewChannelMessage', {
    handler: async (
        context: ChannelMessageTriggerContext,
        invocationContext: InvocationContext,
    ) => {
        invocationContext.log(
            `Received ${context.messages.length} new Teams message(s).`,
        );
    },
});

Le ChannelMessageTriggerContext type expose les messages sous forme d’un tableau typé messages .

Pour l’exemple complet de code, y compris l’infrastructure et l’enregistrement des déclencheurs, voir Microsoft Teams triggers pour TypeScript.

Enregistrement

Utilisez la fonction générique connectorTrigger pour une opération qui n’a pas d’enregistrement spécifique au connecteur :

import { InvocationContext } from '@azure/functions';
import {
    connectorTrigger,
    ConnectorTriggerContext,
} from '@azure/functions-extensions-connectors';

connectorTrigger('OnConnectorEvent', {
    handler: async (
        context: ConnectorTriggerContext,
        invocationContext: InvocationContext,
    ) => {
        invocationContext.log(JSON.stringify(context.rawPayload));
    },
});

L’enregistrement générique met par défaut le type d’objet à unknown. Validez la charge utile avant d’accéder aux propriétés spécifiques à l’opération. Configurez le connecteur, le fonctionnement, les paramètres de fonctionnement, la fonction de destination et l’authentification de rappel dans la configuration du déclencheur dans l’espace de noms Azure Connector.

Examples

L’extension du connecteur Node.js fournit des contextes spécifiques au connecteur pour les opérations Office 365 Outlook, SharePoint Online et Microsoft Teams présentées dans cette section. Ces exemples enregistrent intentionnellement uniquement les informations de base sur la charge utile afin de rester concentrés sur la définition des fonctions déclenchées par le Connecteur. Remplacez la journalisation par la logique de traitement de votre application.

Office 365 Outlook

L’exemple suivant s’exécute lorsqu’un nouvel e-mail arrive dans la boîte aux lettres Office 365 Outlook configurée :

const {
    connectors,
} = require('@azure/functions-extensions-connectors');

connectors.office365.onNewEmail('OnNewEmail', {
    handler: async (context, invocationContext) => {
        invocationContext.log(
            `Received ${context.emails.length} new email message(s).`,
        );
    },
});

Le contexte du gestionnaire expose les messages via le emails tableau.

SharePoint en ligne

L’exemple suivant s’exécute lorsqu’un fichier est créé dans la bibliothèque de documents SharePoint Online configurée :

const {
    connectors,
} = require('@azure/functions-extensions-connectors');

connectors.sharepoint.onNewFile('OnSharepointNewFile', {
    handler: async (context, invocationContext) => {
        invocationContext.log(
            `Received ${context.files.length} new SharePoint file(s).`,
        );
    },
});

Le contexte du gestionnaire expose les métadonnées du fichier via le files tableau.

Microsoft Teams

L’exemple suivant s’exécute lorsqu’un nouveau message est ajouté à un canal Microsoft Teams :

const {
    connectors,
} = require('@azure/functions-extensions-connectors');

connectors.teams.onNewChannelMessage('OnNewChannelMessage', {
    handler: async (context, invocationContext) => {
        invocationContext.log(
            `Received ${context.messages.length} new Teams message(s).`,
        );
    },
});

Le contexte du gestionnaire expose les messages via le messages tableau.

Enregistrement

Utilisez la fonction générique connectorTrigger pour une opération qui n’a pas d’enregistrement spécifique au connecteur :

const {
    connectorTrigger,
} = require('@azure/functions-extensions-connectors');

connectorTrigger('OnConnectorEvent', {
    handler: async (context, invocationContext) => {
        invocationContext.log(JSON.stringify(context.rawPayload));
    },
});

L’enregistrement générique normalise l’enveloppe de rappel mais ne valide pas la forme spécifique de la charge utile à l’opération. Validez la charge utile avant d’accéder aux propriétés spécifiques à l’opération. Configurez le connecteur, le fonctionnement, les paramètres de fonctionnement, la fonction de destination et l’authentification de rappel dans la configuration du déclencheur dans l’espace de noms Azure Connector.

Examples

L’exemple Office 365 Outlook utilise une charge utile fortement typée enregistrée par l’extension du connecteur Python. Les exemples de SharePoint Online et Microsoft Teams lient et str analysent le JSON brut car ces opérations ne disposent actuellement pas de convertisseurs Python typés enregistrés. Ces exemples enregistrent intentionnellement uniquement les informations de base sur la charge utile afin de rester concentrés sur la définition des fonctions déclenchées par le Connecteur. Remplacez la journalisation par la logique de traitement de votre application.

Office 365 Outlook

L’exemple suivant s’exécute lorsqu’un nouvel e-mail arrive dans la boîte aux lettres Office 365 Outlook configurée :

import logging
from typing import List

import azure.functions as func
import azurefunctions.extensions.connectors.office365 as office365

app = func.FunctionApp()


@app.function_name(name="OnNewEmail")
@app.connector_trigger(arg_name="emails")
def on_new_email(
    emails: List[office365.ClientReceiveMessage],
) -> None:
    logging.info(
        "Received %s new email message(s).",
        len(emails),
    )

Le ClientReceiveMessage type est fourni par azurefunctions-extensions-connectors et représente les Office 365 Outlook messages du lot.

Pour l’exemple complet de code, y compris l’infrastructure et l’enregistrement des déclencheurs, voir Office 365 Outlook déclencheurs pour Python.

SharePoint en ligne

L’exemple suivant s’exécute lorsqu’un fichier est créé dans la bibliothèque de documents SharePoint Online configurée :

import json
import logging

import azure.functions as func

app = func.FunctionApp()


@app.function_name(name="OnSharepointNewFile")
@app.connector_trigger(arg_name="payload")
def on_sharepoint_new_file(payload: str) -> None:
    data = json.loads(payload)
    files = data.get("body", {}).get("value", [])
    logging.info(
        "Received %s new SharePoint file(s).",
        len(files),
    )

Pour l’exemple complet de code, incluant l’infrastructure et l’enregistrement des déclencheurs, voir SharePoint Online déclencheurs pour Python.

Connecteur sans charge utile fortement typée

L’exemple suivant s’exécute lorsqu’un nouveau message est ajouté à un canal Microsoft Teams et lie la charge utile à str:

import json
import logging

import azure.functions as func

app = func.FunctionApp()


@app.function_name(name="OnNewChannelMessage")
@app.connector_trigger(arg_name="payload")
def on_new_channel_message(payload: str) -> None:
    data = json.loads(payload)
    messages = data.get("body", {}).get("value", [])
    logging.info(
        "Received %s new Teams message(s).",
        len(messages),
    )

Pour identifier les opérations de connecteurs qui n'ont pas encore de charges utiles Python fortement typées, voir Operations to Azure Functions signature mapping.

Pour l’exemple complet de code, y compris l’infrastructure et l’enregistrement des déclencheurs, voir Microsoft Teams triggers pour Python.

Décorateurs

Appliquer connector_trigger à la fonction qui reçoit la charge utile de l’événement :

import azure.functions as func

app = func.FunctionApp()


@app.function_name(name="OnConnectorEvent")
@app.connector_trigger(arg_name="payload")
def on_connector_event(payload: str) -> None:
    # Process the raw JSON payload.
    pass

La arg_name valeur identifie le paramètre de fonction qui reçoit la charge utile. Configurez le connecteur, le fonctionnement, les paramètres de fonctionnement, la fonction de destination et l’authentification de rappel dans la configuration du déclencheur dans l’espace de noms Azure Connector.

Configurer le déclencheur

Une configuration de déclenchement dans Azure Connector Namespace associe un événement de service externe au rappel de la fonction de destination.

Valeurs de configuration des déclencheurs

Valeur de configuration Description
Connexion La connexion de connecteur gérée autorisée, telle que Office 365 Outlook ou SharePoint Online.
Nom de l’opération Le déclencheur du connecteur, tel que OnNewEmailV3 ou GetOnNewFileItems.
Parameters Valeurs requises par l’opération, telles qu’un dossier Outlook ou un site SharePoint et une bibliothèque de documents.
Callback URL (URL de rappel) L’extension Connector webhook endpoint pour la fonction de destination. Voir Authentifier les rappels.
Nom de la fonction Le nom de la fonction enregistrée dans votre code d’application.
Authentication La configuration d’authentification utilisée pour appeler l’application de fonction.

La functionName valeur de la chaîne de requête dans l’URL de rappel de la configuration du déclencheur doit correspondre au nom de la fonction enregistrée. Les noms de fonctions valides contiennent de 1 à 128 lettres, chiffres, sous-traits ou traits d’union.

Le nom de l’opération est défini par le connecteur géré. Vous choisissez le nom de la fonction dans votre code, et la configuration du déclencheur associe l’opération à cette fonction. Les exemples de cet article utilisent ces mappages :

Événement de connecteur Nom de l’opération Nom de la fonction
Nouvel e-mail Office 365 Outlook OnNewEmailV3 OnNewEmail
Nouveau fichier SharePoint Online GetOnNewFileItems OnNewFile
Nouveau message de chat ou de canal Microsoft Teams WebhookNewMessageTrigger OnNewTeamsMessage
Événement de connecteur Nom de l’opération Nom de la fonction
Nouvel e-mail Office 365 Outlook OnNewEmailV3 OnNewEmail
Nouveau fichier SharePoint Online GetOnNewFileItems OnSharepointNewFile
Nouveau message du canal Microsoft Teams WebhookNewMessageTrigger OnNewChannelMessage

Créer une configuration de déclencheur

Créez une configuration de déclencheur en utilisant Azure CLI ou le portail Connector Namespace.

Avant de créer la configuration du déclencheur, créez une connexion de connecteur gérée autorisée dans votre espace de noms de connecteurs et déployez l’application de fonction contenant la fonction de destination.

L’exemple Bash suivant utilise Azure CLI et jq pour créer un déclencheur Office 365 Outlook de nouveau message. Remplacez les valeurs provisoires pour vos ressources et vos liens :

resourceGroup="<RESOURCE_GROUP>"
namespaceName="<CONNECTOR_NAMESPACE>"
functionAppName="<FUNCTION_APP>"
functionName="OnNewEmail"
triggerName="<TRIGGER_NAME>"
connectionName="<CONNECTION_NAME>"
connectorName="office365"
operationName="OnNewEmailV3"
subscriptionId=$(az account show --query id --output tsv)

connectorKey=$(az functionapp keys list \
    --resource-group "$resourceGroup" \
    --name "$functionAppName" \
    --query "systemKeys.connector_extension" \
    --output tsv)

callbackUrl="https://${functionAppName}.azurewebsites.net/runtime/webhooks/connector?functionName=${functionName}"

notificationFile=$(mktemp)
trap 'rm -f "$notificationFile"' EXIT

jq -n \
    --arg callbackUrl "$callbackUrl" \
    --arg connectorKey "$connectorKey" \
    '{
        callbackUrl: $callbackUrl,
        authentication: {
            type: "QueryString",
            name: "code",
            value: $connectorKey
        }
    }' > "$notificationFile"

az connector-namespace trigger create \
    --resource-group "$resourceGroup" \
    --namespace "$namespaceName" \
    --name "$triggerName" \
    --connection-details "{connectionName:${connectionName},connectorName:${connectorName}}" \
    --operation-name "$operationName" \
    --parameters "[{name:folderPath,value:'Inbox'}]" \
    --notification-details "@$notificationFile" \
    --description "${connectorName} ${operationName} -> ${functionName}" \
    --metadata "{destinationType:functionApp,functionAppName:${functionAppName},functionAppResourceGroup:${resourceGroup},functionAppSubscriptionId:${subscriptionId},functionName:${functionName},recurrenceFrequency:Minute,recurrenceInterval:'5'}"

rm -f "$notificationFile"
trap - EXIT

La --parameters valeur est spécifique à l’opération du connecteur. Dans cet exemple, folderPath sélectionne le dossier Outlook à suivre. L’URL de rappel ne contient pas la clé système. L’objet notificationDetails.authentication ajoute la clé comme un secret de requête lors de l’invoque de l’espace de noms Connector la fonction.

Usage

Le déclencheur lie le corps de la requête JSON à l’un des types de liaison .NET supportés par l’extension.

Les opérations de connecteur peuvent renvoyer un événement ou un lot d’événements. Utilisez le modèle de charge utile spécifique à l’opération car sa forme représente le contrat de réponse pour cette opération de connecteur.

Usage

L’enregistrement générique reçoit un ConnectorTriggerContext<T>. Sa payload propriété contient l’enveloppe de rappel normalisée, items contient les éléments de l’événement et rawPayload préserve le corps de la requête original. Les enregistrements spécifiques au connecteur fournissent des tableaux typés nommés, tels que emails, files, ou messages.

Pour une opération sans enregistrement spécifique au connecteur, le type d’élément est unknownpar défaut . Validez la charge utile avant d’accéder aux propriétés spécifiques à l’opération.

Usage

Le déclencheur peut lier le corps de la requête à str, dict, ou bytes. Lorsqu’il azurefunctions-extensions-connectors enregistre un convertisseur pour l’annotation SDK de la fonction, le travailleur désérialise le corps de la requête dans le type spécifique à l’opération supporté.

Les opérations de connecteur peuvent renvoyer un événement ou un lot d’événements. Utilisez le type ou l’annotation de collection identifiée pour l’opération dans la correspondance de signature d’opération.

L’extension accepte HTTP POST et PUT les requêtes avec le application/json type de contenu. Un corps de requête non vide doit contenir un JSON valide. L’extension rejette les corps de demande supérieurs à 10 Mo.

Metadata

Le déclencheur Connector n’expose actuellement pas les en-têtes de rappel ni d’autres métadonnées de requête comme données de liaison. L’extension définit un contrat de liaison vide, de sorte que la fonction ne reçoit que le corps de la requête JSON dans un type de liaison supporté par le langage sélectionné.

Étapes suivantes