Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Użyj wyzwalacza Connector, aby uruchomić funkcję, gdy wystąpi zdarzenie w usłudze takiej jak Office 365, SharePoint, Dataverse, SMTP, Salesforce i wiele innych. Wyzwalacz otrzymuje zdarzenia z zarządzanego złącza w przestrzeni nazw Azure Connector. Aby poznać dostępne złącza zarządzane, zobacz odniesienie do złączy.
Aby uzyskać informacje o instalacji rozszerzenia, obsługiwanych typach wiązań, uwierzytelnianiu callback oraz konfiguracji całej aplikacji, zobacz przegląd rozszerzenia Connector.
Important
Wyzwalacz Connector jest obecnie dostępny w publicznym podglądzie. Funkcje, nazwy konfiguracji i obsługiwane złącza mogą się zmieniać przed ogólną dostępnością (GA). Korzystanie z tej funkcji podlega Dodatkowym Warunkom Użytkowania Microsoft Azure Previews.
Note
Obecnie wyzwalacz Connector nie jest obsługiwany dla tego języka.
Examples
Przykłady Office 365 Outlook i SharePoint Online wykorzystują silnie typowane payloady z Azure Connectors SDK. Dla operacji łączących, które nie mają jeszcze silnie typowanych ładunków, przypisz się do string otrzymania surowego ładunku JSON. Te przykłady celowo rejestrują jedynie podstawowe informacje o ładunku, aby skupić się na definiowaniu funkcji wyzwalanych przez Connector. Zastąp logowanie logiką przetwarzania aplikacji.
Office 365 Outlook
Poniższy przykład pojawia się, gdy nowy e-mail pojawia się w skonfigurowanej skrzynce Office 365 Outlook:
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);
}
}
Typ Office365OnNewEmailTriggerPayload jest definiowany w Azure.Connectors.Sdk.Office365.Models przestrzeni nazw.
Pełny przykład kodu, w tym infrastruktura i rejestracja wyzwalaczy, znajduje się w Office 365 Outlook wyzwalaczach dla .NET.
SharePoint Online
Poniższy przykład uruchamia się, gdy plik zostanie utworzony w skonfigurowanej bibliotece dokumentów SharePoint Online:
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);
}
}
Typ SharePointOnlineOnNewFileItemsTriggerPayload jest definiowany w Azure.Connectors.Sdk.SharePointOnline.Models przestrzeni nazw.
Pełny przykład kodu, w tym infrastruktura i rejestracja wyzwalaczy, znajduje się w artykule SharePoint Online triggers for .NET.
Złącze bez silnie typowanego ładunku
Niektóre zdarzenia łączące nie mają jeszcze silnie wpisanego ładunku .NET. Poniższy przykład uruchamia się, gdy nowa wiadomość zostaje dodana do czatu lub kanału Microsoft Teams i wiąże ładunek dostring:
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);
}
}
Aby zidentyfikować operacje łączące, które nie mają jeszcze silnie typowanych ładunków, zobacz mapowanie sygnatur Operacje na Azure Functions.
Attributes
W izolowanej aplikacji roboczej .NET należy zastosować [ConnectorTrigger] parametr funkcji otrzymujący payload zdarzenia:
[Function("OnConnectorEvent")]
public void Run([ConnectorTrigger] string payload)
{
// Process the raw JSON payload.
}
Atrybut nie ConnectorTrigger posiada konfigurowalnych właściwości. Konfiguruj konektor, operację, parametry operacyjne, funkcję docelową oraz uwierzytelnianie callback w konfiguracji trigger w przestrzeni nazw Azure Connector.
Examples
Rozszerzenie Node.js connector zapewnia typowane konteksty dla operacji Office 365 Outlook, SharePoint Online oraz Microsoft Teams pokazane w tej sekcji. Te przykłady celowo rejestrują jedynie podstawowe informacje o ładunku, aby skupić się na definiowaniu funkcji wyzwalanych przez Connector. Zastąp logowanie logiką przetwarzania aplikacji.
Office 365 Outlook
Poniższy przykład pojawia się, gdy nowy e-mail pojawia się w skonfigurowanej skrzynce Office 365 Outlook:
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).`,
);
},
});
Typ EmailTriggerContext ten wyświetla wiadomości jako tablicę typową emails .
Pełny przykład kodu, w tym infrastruktura i rejestracja wyzwalaczy, znajduje się w Office 365 Outlook wyzwalaczach dla TypeScript.
SharePoint Online
Poniższy przykład uruchamia się, gdy plik zostanie utworzony w skonfigurowanej bibliotece dokumentów SharePoint Online:
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).`,
);
},
});
Typ FileTriggerContext ten ujawnia metadane pliku jako typowaną tablicę files .
Pełny przykład kodu, w tym infrastruktura i rejestracja wyzwalaczy, znajduje się w artykule SharePoint Online triggers for TypeScript.
Microsoft Teams
Poniższy przykład pojawia się, gdy do kanału Microsoft Teams dodaje się nową wiadomość:
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).`,
);
},
});
Typ ChannelMessageTriggerContext ten wyświetla wiadomości jako tablicę typową messages .
Pełny przykład kodu, w tym infrastruktura i rejestracja wyzwalaczy, znajduje się w Microsoft Teams triggers for TypeScript.
Registration
Użyj funkcji generycznej connectorTrigger dla operacji, która nie ma rejestracji specyficznej dla konektora:
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));
},
});
Rejestracja generyczna domyślnie przypisuje typ przedmiotu do .unknown Zweryfikowaj ładunek przed uzyskaniem dostępu do właściwości specyficznych dla operacji. Konfiguruj konektor, operację, parametry operacyjne, funkcję docelową oraz uwierzytelnianie callback w konfiguracji trigger w przestrzeni nazw Azure Connector.
Examples
Rozszerzenie Node.js connector dostarcza kontekstów specyficznych dla konektorów dla operacji Office 365 Outlook, SharePoint Online oraz Microsoft Teams pokazane w tej sekcji. Te przykłady celowo rejestrują jedynie podstawowe informacje o ładunku, aby skupić się na definiowaniu funkcji wyzwalanych przez Connector. Zastąp logowanie logiką przetwarzania aplikacji.
Office 365 Outlook
Poniższy przykład pojawia się, gdy nowy e-mail pojawia się w skonfigurowanej skrzynce Office 365 Outlook:
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).`,
);
},
});
Kontekst obsługi obsługiwa udostępnia wiadomości przez tablicę emails .
SharePoint Online
Poniższy przykład uruchamia się, gdy plik zostanie utworzony w skonfigurowanej bibliotece dokumentów SharePoint Online:
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).`,
);
},
});
Kontekst handlera udostępnia metadane pliku przez tablicę files .
Microsoft Teams
Poniższy przykład pojawia się, gdy do kanału Microsoft Teams dodaje się nową wiadomość:
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).`,
);
},
});
Kontekst obsługi obsługiwa udostępnia wiadomości przez tablicę messages .
Registration
Użyj funkcji generycznej connectorTrigger dla operacji, która nie ma rejestracji specyficznej dla konektora:
const {
connectorTrigger,
} = require('@azure/functions-extensions-connectors');
connectorTrigger('OnConnectorEvent', {
handler: async (context, invocationContext) => {
invocationContext.log(JSON.stringify(context.rawPayload));
},
});
Ogólna rejestracja normalizuje obwiednię callback, ale nie waliduje specyficznego dla operacji kształtu ładunku. Zweryfikowaj ładunek przed uzyskaniem dostępu do właściwości specyficznych dla operacji. Konfiguruj konektor, operację, parametry operacyjne, funkcję docelową oraz uwierzytelnianie callback w konfiguracji trigger w przestrzeni nazw Azure Connector.
Examples
Przykład Office 365 Outlook wykorzystuje silnie typowany ładunek zarejestrowany przez rozszerzenie Python connector. Przykłady SharePoint Online i Microsoft Teams wiążą się z str surowym JSON, ponieważ te operacje nie mają obecnie zarejestrowanych konwerterów Python z typem. Te przykłady celowo rejestrują jedynie podstawowe informacje o ładunku, aby skupić się na definiowaniu funkcji wyzwalanych przez Connector. Zastąp logowanie logiką przetwarzania aplikacji.
Office 365 Outlook
Poniższy przykład pojawia się, gdy nowy e-mail pojawia się w skonfigurowanej skrzynce Office 365 Outlook:
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),
)
Typ ClientReceiveMessage jest dostarczany przez azurefunctions-extensions-connectors i reprezentuje Office 365 Outlook wiadomości w partii.
Pełny przykład kodu, w tym infrastrukturę i rejestrację wyzwalaczy, można znaleźć w Office 365 Outlook wyzwalaczach dla Python.
SharePoint Online
Poniższy przykład uruchamia się, gdy plik zostanie utworzony w skonfigurowanej bibliotece dokumentów SharePoint Online:
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),
)
Pełny przykładowy kod, w tym infrastrukturę i rejestrację wyzwalaczy, można znaleźć w artykule SharePoint Online triggers for Python.
Złącze bez silnie typowanego ładunku
Poniższy przykład uruchamia się, gdy nowa wiadomość zostaje dodana do kanału Microsoft Teams i wiąże ładunek do :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),
)
Aby zidentyfikować operacje łączące, które nie mają jeszcze silnie typowanych payloadów Python, zobacz mapowanie sygnatur Operacje do Azure Functions.
Pełny przykład kodu, w tym infrastruktura i rejestracja wyzwalaczy, znajduje się w Microsoft Teams triggers for Python.
Decorators
Zastosowanie connector_trigger do funkcji, która otrzymuje ładunek zdarzenia:
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
Wartość ta arg_name identyfikuje parametr funkcji, który otrzymuje ładunek danych. Konfiguruj konektor, operację, parametry operacyjne, funkcję docelową oraz uwierzytelnianie callback w konfiguracji trigger w przestrzeni nazw Azure Connector.
Konfigurowanie wyzwalacza
Konfiguracja wyzwalacza w przestrzeni nazw Azure Connector kojarzy zewnętrzne zdarzenie usługi z callbackiem funkcji docelowej.
Wartości konfiguracji wyzwalacza
| Wartość konfiguracji | Description |
|---|---|
| Połączenie | Autoryzowane połączenie złącza zarządzanego, takie jak Office 365 Outlook lub SharePoint Online. |
| Nazwa operacji | Działanie wyzwalacza złącza, takie jak OnNewEmailV3 lub GetOnNewFileItems. |
| Parameters | Wartości wymagane przez operację, takie jak folder Outlook lub strona SharePoint i biblioteka dokumentów. |
| Adres URL wywołania zwrotnego | Rozszerzenie Connector, będące urządzeniem webhook dla funkcji docelowej. Zobacz Uwierzytelnij odwołania. |
| Nazwa funkcji | Zarejestrowana nazwa funkcji w kodzie aplikacji. |
| Authentication | Konfiguracja uwierzytelniania używana do wywoływania aplikacji funkcyjnej. |
Wartość functionName stringu zapytania w URL-owym callback konfiguracji wyzwalającej musi odpowiadać zarejestrowanej nazwie funkcji. Poprawne nazwy funkcji zawierają od 1 do 128 liter, cyfr, podkreśleń lub łączników.
Nazwa operacji jest definiowana przez zarządzany konektor. Wybierasz nazwę funkcji w kodzie, a konfiguracja wyzwalacza przypisuje operację do tej funkcji. Przykłady w tym artykule wykorzystują następujące odwzorowania:
| Zdarzenie łącznika | Nazwa operacji | Nazwa funkcji |
|---|---|---|
| Nowy Office 365 Outlook mail | OnNewEmailV3 |
OnNewEmail |
| Nowy plik SharePoint Online | GetOnNewFileItems |
OnNewFile |
| Nowy czat lub wiadomość kanałowa Microsoft Teams | WebhookNewMessageTrigger |
OnNewTeamsMessage |
| Zdarzenie łącznika | Nazwa operacji | Nazwa funkcji |
|---|---|---|
| Nowy Office 365 Outlook mail | OnNewEmailV3 |
OnNewEmail |
| Nowy plik SharePoint Online | GetOnNewFileItems |
OnSharepointNewFile |
| Nowa wiadomość kanału Microsoft Teams | WebhookNewMessageTrigger |
OnNewChannelMessage |
Stwórz konfigurację wyzwalacza
Stwórz konfigurację wyzwalacza za pomocą Azure CLI lub portalu Connector Namespace.
Zanim utworzysz konfigurację wyzwalacza, stwórz autoryzowane połączenie zarządzanego łącznika w przestrzeni nazw łącznika i wdroż aplikację funkcyjną zawierającą funkcję docelową.
Poniższy przykład Bash wykorzystuje Azure CLI oraz jq do utworzenia Office 365 Outlook wyzwalacza nowej wiadomości e-mailowej. Zamień wartości zastępcze dla zasobów i połączenia:
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
Wartość ta --parameters jest specyficzna dla działania złącza. W tym przykładzie wybiera folderPath folder Outlook do monitorowania. URL callback nie zawiera klucza systemowego. Obiekt notificationDetails.authentication dodaje klucz jako sekret zapytania w ciągu zapytania, gdy Connector Namespace wywołuje tę funkcję.
Użycie
Wyzwalacz wiąże ciało żądania JSON z dowolnym typem wiązania .NET obsługiwanym przez rozszerzenie.
Operacje łączące mogą zwracać jedno zdarzenie lub partię zdarzeń. Użyj modelu ładunku specyficznego dla operacji, ponieważ jego kształt odzwierciedla kontrakt odpowiedzi dla tej operacji łączącej.
Użycie
Rejestracja generyczna otrzymuje .ConnectorTriggerContext<T> Jego własność zawiera znormalizowaną kopertę callback, payloaditems zawiera elementy zdarzenia i rawPayload zachowuje oryginalne ciało żądania. Rejestracje specyficzne dla złącza zapewniają nazwane tablice typowe, takie jak emails, files, lub messages.
Dla operacji bez rejestracji specyficznej dla konektora, typ elementu domyślnie wynosi .unknown Zweryfikuj ładunek przed uzyskaniem dostępu do właściwości specyficznych dla operacji.
Użycie
Wyzwalacz może powiązać ciało żądania z str, dict, lub bytes. Gdy azurefunctions-extensions-connectors rejestruje konwerter dla adnotacji SDK funkcji, pracownik zamiast tego deserializuje ciało żądania do obsługiwanego typu specyficznego dla operacji.
Operacje łączące mogą zwracać jedno zdarzenie lub partię zdarzeń. Użyj typowej lub kolekcjowej adnotacji zidentyfikowanej dla operacji w mapowaniu sygnatury operacji.
Rozszerzenie akceptuje HTTP POST i PUT żądania o tym typie application/json treści. Niepuste ciało żądania musi zawierać prawidłowy JSON. Rozszerzenie odrzuca ciała żądań większe niż 10 MB.
Metadata
Obecnie wyzwalacz Connector nie ujawnia nagłówków callback ani innych metadanych żądań jako dane wiążące. Rozszerzenie definiuje pusty kontrakt danych wiązania, dzięki czemu funkcja otrzymuje tylko ciało żądania JSON w typie wiązania wspieranym przez wybrany język.