Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Gebruik de Connector-trigger om een functie uit te voeren wanneer een gebeurtenis plaatsvindt in een dienst zoals Office 365, SharePoint, Dataverse, SMTP, Salesforce en nog veel meer. De trigger ontvangt gebeurtenissen van een beheerde connector in de Azure Connector Namespace. Om de beschikbare beheerde connectoren te verkennen, zie de referentie connectoren.
Voor informatie over het installeren van de extensie, ondersteunde bindingtypes, callback-authenticatie en app-brede configuratie, zie het overzicht van de Connector-extensie.
Important
De Connector-trigger is momenteel in openbare preview. Functies, configuratienamen en ondersteunde connectoren kunnen wijzigen vóór algemene beschikbaarheid (GA). Het gebruik van deze functie is onderworpen aan de aanvullende gebruiksvoorwaarden voor Microsoft Azure Previews.
Note
De Connector-trigger wordt momenteel niet ondersteund voor deze taal.
Examples
De voorbeelden van Office 365 Outlook en SharePoint Online gebruiken sterk getypeerde payloads van de Azure Connectors SDK. Voor connectorbewerkingen die nog geen sterk getypeerde payloads hebben, bind naar string om de ruwe JSON-payload te ontvangen. Deze voorbeelden loggen bewust alleen basisinformatie over de payload om gefocust te blijven op het definiëren van Connector-getriggerde functies. Vervang de logging door de verwerkingslogica van je applicatie.
Office 365 Outlook
Het volgende voorbeeld wordt uitgevoerd wanneer een nieuwe e-mail binnenkomt in de geconfigureerde Office 365 Outlook mailbox:
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);
}
}
Het Office365OnNewEmailTriggerPayload type wordt gedefinieerd in de Azure.Connectors.Sdk.Office365.Models naamruimte.
Voor het volledige codevoorbeeld, inclusief infrastructuur- en triggerregistratie, zie Office 365 Outlook triggers voor .NET.
SharePoint Online
Het volgende voorbeeld draait wanneer een bestand wordt aangemaakt in de geconfigureerde SharePoint Online-documentbibliotheek:
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);
}
}
Het SharePointOnlineOnNewFileItemsTriggerPayload type wordt gedefinieerd in de Azure.Connectors.Sdk.SharePointOnline.Models naamruimte.
Voor het volledige codevoorbeeld, inclusief infrastructuur en triggerregistratie, zie SharePoint Online triggers voor .NET.
Connector zonder sterk getypeerde lading
Sommige connector-events hebben nog geen sterk getypeerde .NET-payload. Het volgende voorbeeld draait wanneer een nieuw bericht wordt toegevoegd aan een Microsoft Teams-chat of -kanaal en de payload bindt aan 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);
}
}
Om connectoroperaties te identificeren die nog geen sterk getypeerde payloads hebben, zie Operations to Azure Functions signature mapping.
Attributes
In een .NET geïsoleerde worker-app, pas [ConnectorTrigger] je toe op de functieparameter die de gebeurtenispayload ontvangt:
[Function("OnConnectorEvent")]
public void Run([ConnectorTrigger] string payload)
{
// Process the raw JSON payload.
}
Het ConnectorTrigger attribuut heeft geen configureerbare eigenschappen. Configureer de connector, bewerking, operationele parameters, bestemmingsfunctie en callback-authenticatie in de triggerconfiguratie in Azure Connector Namespace.
Examples
De Node.js-connectorextensie biedt getypeerde contexten voor de Office 365 Outlook-, SharePoint Online- en Microsoft Teams-operaties die in deze sectie worden getoond. Deze voorbeelden loggen bewust alleen basisinformatie over de payload om gefocust te blijven op het definiëren van Connector-getriggerde functies. Vervang de logging door de verwerkingslogica van je applicatie.
Office 365 Outlook
Het volgende voorbeeld wordt uitgevoerd wanneer een nieuwe e-mail binnenkomt in de geconfigureerde Office 365 Outlook mailbox:
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).`,
);
},
});
Het EmailTriggerContext type stelt de berichten bloot als een getypte emails array.
Voor het volledige codevoorbeeld, inclusief infrastructuur- en triggerregistratie, zie Office 365 Outlook triggers voor TypeScript.
SharePoint Online
Het volgende voorbeeld draait wanneer een bestand wordt aangemaakt in de geconfigureerde SharePoint Online-documentbibliotheek:
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).`,
);
},
});
Het FileTriggerContext type maakt de bestandsmetadata bloot als een getypeerde files array.
Voor het volledige codevoorbeeld, inclusief infrastructuur en triggerregistratie, zie SharePoint Online triggers voor TypeScript.
Microsoft Teams
Het volgende voorbeeld wordt uitgevoerd wanneer een nieuw bericht wordt toegevoegd aan een Microsoft Teams-kanaal:
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).`,
);
},
});
Het ChannelMessageTriggerContext type stelt de berichten bloot als een getypte messages array.
Voor het volledige codevoorbeeld, inclusief infrastructuur- en triggerregistratie, zie Microsoft Teams triggers voor TypeScript.
Registration
Gebruik de generieke connectorTrigger functie voor een bewerking die geen connector-specifieke registratie heeft:
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));
},
});
De generieke registratie zet het itemtype standaard op unknown. Valideer de payload voordat je toegang hebt tot operationele specifieke eigenschappen. Configureer de connector, bewerking, operationele parameters, bestemmingsfunctie en callback-authenticatie in de triggerconfiguratie in Azure Connector Namespace.
Examples
De Node.js-connectoruitbreiding biedt connector-specifieke contexten voor de Office 365 Outlook-, SharePoint Online- en Microsoft Teams-operaties die in deze sectie worden getoond. Deze voorbeelden loggen bewust alleen basisinformatie over de payload om gefocust te blijven op het definiëren van Connector-getriggerde functies. Vervang de logging door de verwerkingslogica van je applicatie.
Office 365 Outlook
Het volgende voorbeeld wordt uitgevoerd wanneer een nieuwe e-mail binnenkomt in de geconfigureerde Office 365 Outlook mailbox:
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).`,
);
},
});
De handlercontext stelt de berichten bloot via de emails array.
SharePoint Online
Het volgende voorbeeld draait wanneer een bestand wordt aangemaakt in de geconfigureerde SharePoint Online-documentbibliotheek:
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).`,
);
},
});
De handlercontext stelt de bestandsmetadata bloot via de files array.
Microsoft Teams
Het volgende voorbeeld wordt uitgevoerd wanneer een nieuw bericht wordt toegevoegd aan een Microsoft Teams-kanaal:
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).`,
);
},
});
De handlercontext stelt de berichten bloot via de messages array.
Registration
Gebruik de generieke connectorTrigger functie voor een bewerking die geen connector-specifieke registratie heeft:
const {
connectorTrigger,
} = require('@azure/functions-extensions-connectors');
connectorTrigger('OnConnectorEvent', {
handler: async (context, invocationContext) => {
invocationContext.log(JSON.stringify(context.rawPayload));
},
});
De generieke registratie normaliseert de callback-enveloppe, maar valideert niet de operation-specifieke payloadvorm. Valideer de payload voordat je toegang hebt tot operationele specifieke eigenschappen. Configureer de connector, bewerking, operationele parameters, bestemmingsfunctie en callback-authenticatie in de triggerconfiguratie in Azure Connector Namespace.
Examples
Het Office 365 Outlook voorbeeld gebruikt een sterk getypeerde payload die wordt geregistreerd door de Python connectoruitbreiding. De voorbeelden van SharePoint Online en Microsoft Teams binden aan str en parsen de ruwe JSON omdat die bewerkingen momenteel geen geregistreerde Python-converters hebben. Deze voorbeelden loggen bewust alleen basisinformatie over de payload om gefocust te blijven op het definiëren van Connector-getriggerde functies. Vervang de logging door de verwerkingslogica van je applicatie.
Office 365 Outlook
Het volgende voorbeeld wordt uitgevoerd wanneer een nieuwe e-mail binnenkomt in de geconfigureerde Office 365 Outlook mailbox:
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),
)
Het ClientReceiveMessage type wordt geleverd door azurefunctions-extensions-connectors en vertegenwoordigt de Office 365 Outlook berichten in de batch.
Voor het volledige codevoorbeeld, inclusief infrastructuur- en triggerregistratie, zie Office 365 Outlook triggers voor Python.
SharePoint Online
Het volgende voorbeeld draait wanneer een bestand wordt aangemaakt in de geconfigureerde SharePoint Online-documentbibliotheek:
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),
)
Voor het volledige codevoorbeeld, inclusief infrastructuur en triggerregistratie, zie SharePoint Online triggers voor Python.
Connector zonder sterk getypeerde lading
Het volgende voorbeeld draait wanneer een nieuw bericht wordt toegevoegd aan een Microsoft Teams-kanaal en de payload bindt aanstr:
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),
)
Om connectoroperaties te identificeren die nog geen sterk getypeerde Python-payloads hebben, zie Operations to Azure Functions signature mapping.
Voor het volledige codevoorbeeld, inclusief infrastructuur- en triggerregistratie, zie Microsoft Teams triggers voor Python.
Decorators
Pas toe connector_trigger op de functie die de gebeurtenispayload ontvangt:
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
De arg_name waarde identificeert de functieparameter die de payload ontvangt. Configureer de connector, bewerking, operationele parameters, bestemmingsfunctie en callback-authenticatie in de triggerconfiguratie in Azure Connector Namespace.
De trigger configureren
Een triggerconfiguratie in de Azure Connector Namespace koppelt een externe servicegebeurtenis aan de callback van de bestemmingsfunctie.
Triggerconfiguratiewaarden
| Configuratiewaarde | Description |
|---|---|
| Verbinding | De geautoriseerde beheerde connectorverbinding, zoals Office 365 Outlook of SharePoint Online. |
| Naam van de operatie | De connector triggert de werking, zoals OnNewEmailV3 of GetOnNewFileItems. |
| Parameters | Waarden die door de operatie worden vereist, zoals een Outlook-map of een SharePoint-site en documentbibliotheek. |
| URL voor aanroep | Het Connector-extensie webhook-eindpunt voor de bestemmingsfunctie. Zie Authenticate callbacks. |
| Functienaam | De naam van de geregistreerde functie in je app-code. |
| Authentication | De authenticatieconfiguratie die wordt gebruikt om de functie-app aan te roepen. |
De functionName querystringwaarde in de callback-URL van de triggerconfiguratie moet overeenkomen met de naam van de geregistreerde functie. Geldige functienamen bevatten 1 tot 128 letters, cijfers, onderstreepjes of koppeltekens.
De bewerkingsnaam wordt gedefinieerd door de beheerde connector. Je kiest de functienaam in je code, en de triggerconfiguratie koppelt de operatie aan die functie. De voorbeelden in dit artikel gebruiken deze mappings:
| Connectorgebeurtenis | Naam van de operatie | Functienaam |
|---|---|---|
| Nieuwe Office 365 Outlook e-mail | OnNewEmailV3 |
OnNewEmail |
| Nieuw SharePoint Online-bestand | GetOnNewFileItems |
OnNewFile |
| Nieuw Microsoft Teams-chat- of kanaalbericht | WebhookNewMessageTrigger |
OnNewTeamsMessage |
| Connectorgebeurtenis | Naam van de operatie | Functienaam |
|---|---|---|
| Nieuwe Office 365 Outlook e-mail | OnNewEmailV3 |
OnNewEmail |
| Nieuw SharePoint Online-bestand | GetOnNewFileItems |
OnSharepointNewFile |
| Nieuw kanaalbericht van Microsoft Teams | WebhookNewMessageTrigger |
OnNewChannelMessage |
Maak een triggerconfiguratie aan
Maak een triggerconfiguratie aan door gebruik te maken van Azure CLI of het Connector Namespace-portaal.
Voordat je de triggerconfiguratie maakt, maak je een geautoriseerde managed connectorverbinding aan in je connectornaamruimte en deploy je de functie-app die de bestemmingsfunctie bevat.
Het volgende Bash-voorbeeld gebruikt Azure CLI en jq om een Office 365 Outlook nieuwe-e-mail trigger te maken. Vervang de tijdelijke waarden voor je middelen en verbinding:
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
De --parameters waarde is specifiek voor de aansluiting. In dit voorbeeld folderPath selecteert hij de Outlook-map om te monitoren. De callback-URL bevat de systeemsleutel niet. Het notificationDetails.authentication object voegt de sleutel toe als een querystring-geheim wanneer Connector Namespace de functie aanroept.
Gebruik
De trigger bindt het JSON-verzoeklichaam aan een van de .NET-bindingtypes die door de extensie worden ondersteund.
Connectoroperaties kunnen één event of een batch events teruggeven. Gebruik het operation-specifieke payloadmodel omdat de vorm het responscontract voor die connectoroperatie vertegenwoordigt.
Gebruik
De generieke registratie ontvangt een ConnectorTriggerContext<T>. De eigenschap bevat payload de genormaliseerde callback-enveloppe, items bevat de gebeurtenisitems en rawPayload behoudt het oorspronkelijke verzoekmateriaal. Connector-specifieke registraties leveren benoemde getypeerde arrays, zoals emails, files, of messages.
Voor een bewerking zonder connector-specifieke registratie is het itemtype standaard .unknown Valideer de payload voordat je toegang krijgt tot operation-specifieke eigenschappen.
Gebruik
De trigger kan het verzoeklichaam binden aan str, dict, of bytes. Wanneer azurefunctions-extensions-connectors een converter wordt geregistreerd voor de SDK-annotatie van de functie, deserialiseert de worker in plaats daarvan het verzoeklichaam naar het ondersteunde operation-specifieke type.
Connectoroperaties kunnen één event of een batch events teruggeven. Gebruik het type of de verzamelingsannotatie die voor de bewerking is geïdentificeerd in de bewerking handtekeningmapping.
De extensie accepteert HTTP POST en verzoeken PUT met het application/json contenttype. Een niet-leeg verzoeklichaam moet geldige JSON bevatten. De extensie weigert verzoekbodies groter dan 10 MB.
Metadata
De Connector-trigger toont momenteel geen callback-headers of andere verzoekmetadata als bindingsgegevens. De extensie definieert een leeg bindend datacontract, zodat de functie alleen het JSON-verzoeklichaam ontvangt in een bindingstype dat door de gekozen taal wordt ondersteund.