Connector trigger for Azure Functions (Preview)

Office 365, SharePoint, Dataverse, SMTP, Salesforce 등 다양한 서비스에서 이벤트가 발생했을 때 Connector 트리거를 사용해 함수를 실행할 수 있습니다. 트리거는 Azure Connector 네임스페이스 내 관리형 커넥터로부터 이벤트를 받습니다. 사용 가능한 관리형 커넥터를 탐색하려면 커넥터 참고 자료를 참조하세요.

확장 프로그램 설치, 지원되는 바인딩 유형, 콜백 인증, 앱 전체 구성에 관한 정보는 Connector 확장 개요를 참조하세요.

Important

커넥터 트리거는 현재 공개 미리보기 상태입니다. 기능, 구성 이름, 지원되는 커넥터는 일반 제공(GA) 전에 변경될 수 있습니다. 이 기능의 사용은 Microsoft Azure 미리보기 보충 이용 약관의 적용을 받습니다.

Note

현재 이 언어에서는 커넥터 트리거가 지원되지 않습니다.

Examples

Office 365 Outlook 및 SharePoint 온라인 예시는 Azure Connectors SDK에서 강하게 타입된 페이로드를 사용합니다. 아직 강타입 페이로드가 없는 커넥터 연산의 경우, 원시 JSON 페이로드를 받기 위해 에 string 결속하세요. 이 예시들은 의도적으로 기본 페이로드 정보만 기록하여 커넥터 트리거 함수 정의에 집중합니다. 로그를 애플리케이션의 처리 로직으로 대체하세요.

Office 365 Outlook

다음 예시는 새 이메일이 설정된 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);
    }
}

타입은 Office365OnNewEmailTriggerPayload 네임스페이스에서 Azure.Connectors.Sdk.Office365.Models 정의됩니다.

인프라 및 트리거 등록을 포함한 전체 코드 샘플은 .NET 트리거 Office 365 Outlook 참조.

SharePoint 온라인

다음 예시는 구성된 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);
    }
}

타입은 SharePointOnlineOnNewFileItemsTriggerPayload 네임스페이스에서 Azure.Connectors.Sdk.SharePointOnline.Models 정의됩니다.

인프라 및 트리거 등록을 포함한 전체 코드 샘플은 .NET용 SharePoint Online 트리거를 참조하세요.

강타입 페이로드가 없는 커넥터

일부 커넥터 이벤트는 아직 강타입 .NET 페이로드를 갖지 못합니다. 다음 예시는 Microsoft Teams 채팅 또는 채널에 새 메시지가 추가되어 페이로드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);
    }
}

아직 강타입 페이로드가 없는 커넥터 연산을 식별하려면 Operations-to Azure Functions signature mapping을 참조하세요.

Attributes

.NET 격리 워커 앱에서는 이벤트 페이로드를 받는 함수 매개변수에 적용 [ConnectorTrigger] 합니다:

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

속성에는 ConnectorTrigger 설정 가능한 속성이 없습니다. Azure 커넥터 네임스페이스의 트리거 설정에서 커넥터, 연산, 연산 매개변수, 목적지 함수, 콜백 인증을 설정하세요.

Examples

Node.js 커넥터 확장은 이 섹션에서 제시된 Office 365 Outlook, SharePoint Online, Microsoft Teams 연산에 대한 타입 문맥을 제공합니다. 이 예시들은 의도적으로 기본 페이로드 정보만 기록하여 커넥터 트리거 함수 정의에 집중합니다. 로그를 애플리케이션의 처리 로직으로 대체하세요.

Office 365 Outlook

다음 예시는 새 이메일이 설정된 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).`,
        );
    },
});

이 타입은 EmailTriggerContext 메시지를 타입이 있는 emails 배열로 노출합니다.

인프라 및 트리거 등록을 포함한 전체 코드 샘플은 TypeScript의 Office 365 Outlook 트리거를 참조하세요.

SharePoint 온라인

다음 예시는 구성된 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).`,
        );
    },
});

타입은 FileTriggerContext 파일 메타데이터를 타입이 있는 files 배열로 노출합니다.

인프라 및 트리거 등록을 포함한 전체 코드 샘플은 TypeScript용 SharePoint Online 트리거를 참조하세요.

Microsoft 팀

다음 예시는 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).`,
        );
    },
});

이 타입은 ChannelMessageTriggerContext 메시지를 타입이 있는 messages 배열로 노출합니다.

인프라 및 트리거 등록을 포함한 전체 코드 샘플은 TypeScript용 Microsoft Teams 트리거를 참조하세요.

Registration

커넥터별 등록이 없는 연산에는 제네릭 connectorTrigger 함수를 사용하세요:

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));
    },
});

일반 등록은 아이템 유형을 기본값으로 unknown설정합니다. 작업별 속성에 접근하기 전에 페이로드를 검증하세요. Azure 커넥터 네임스페이스의 트리거 설정에서 커넥터, 연산, 연산 매개변수, 목적지 함수, 콜백 인증을 설정하세요.

Examples

Node.js 커넥터 확장은 이 섹션에서 제시된 Office 365 Outlook, SharePoint 온라인, Microsoft Teams 작업에 대한 커넥터별 컨텍스트를 제공합니다. 이 예시들은 의도적으로 기본 페이로드 정보만 기록하여 커넥터 트리거 함수 정의에 집중합니다. 로그를 애플리케이션의 처리 로직으로 대체하세요.

Office 365 Outlook

다음 예시는 새 이메일이 설정된 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).`,
        );
    },
});

핸들러 컨텍스트는 배열을 통해 emails 메시지를 노출합니다.

SharePoint 온라인

다음 예시는 구성된 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).`,
        );
    },
});

핸들러 컨텍스트는 배열을 통해 files 파일 메타데이터를 노출합니다.

Microsoft 팀

다음 예시는 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).`,
        );
    },
});

핸들러 컨텍스트는 배열을 통해 messages 메시지를 노출합니다.

Registration

커넥터별 등록이 없는 연산에는 제네릭 connectorTrigger 함수를 사용하세요:

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

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

일반 등록은 콜백 엔벨로프를 정규화하지만, 작업별 페이로드 형태는 검증하지 않습니다. 작업별 속성에 접근하기 전에 페이로드를 검증하세요. Azure 커넥터 네임스페이스의 트리거 설정에서 커넥터, 연산, 연산 매개변수, 목적지 함수, 콜백 인증을 설정하세요.

Examples

Office 365 Outlook 예시는 Python 커넥터 확장으로 등록된 강타입 페이로드를 사용합니다. SharePoint Online과 Microsoft Teams 예제는 원본 JSON에 str 바인딩하고 파싱하는 방식인데, 이는 현재 등록된 타입 Python 변환기가 없기 때문입니다. 이 예시들은 의도적으로 기본 페이로드 정보만 기록하여 커넥터 트리거 함수 정의에 집중합니다. 로그를 애플리케이션의 처리 로직으로 대체하세요.

Office 365 Outlook

다음 예시는 새 이메일이 설정된 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),
    )

이 타입은 ClientReceiveMessage 배치 azurefunctions-extensions-connectors 내 Office 365 Outlook 메시지를 나타내며 제공된다.

인프라와 트리거 등록을 포함한 전체 코드 샘플은 Python 트리거 Office 365 Outlook를 참조하세요.

SharePoint 온라인

다음 예시는 구성된 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),
    )

인프라 및 트리거 등록을 포함한 전체 코드 샘플은 Python용 SharePoint Online 트리거를 참조하세요.

강타입 페이로드가 없는 커넥터

다음 예시는 Microsoft Teams 채널에 새 메시지가 추가되어 페이로드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),
    )

아직 강력한 타입이 Python 페이로드가 없는 커넥터 연산을 식별하려면 Operation to Azure Functions signature mapping을 참조하세요.

인프라 및 트리거 등록을 포함한 전체 코드 샘플은 Python용 Microsoft Teams 트리거를 참조하세요.

Decorators

이벤트 페이로드를 받는 함수에 적용합니다 connector_trigger :

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

이 값은 arg_name 페이로드를 받는 함수 매개변수를 나타냅니다. Azure 커넥터 네임스페이스의 트리거 설정에서 커넥터, 연산, 연산 매개변수, 목적지 함수, 콜백 인증을 설정하세요.

트리거 구성

Azure Connector Namespace의 트리거 구성은 목적지 함수 콜백과 외부 서비스 이벤트를 연관시킵니다.

트리거 구성 값

구성 값 Description
연결 Office 365 Outlook 또는 SharePoint Online과 같은 승인된 관리 커넥터 연결.
작업 이름 커넥터 트리거 동작, 예를 들어 OnNewEmailV3GetOnNewFileItems또는 .
Parameters Outlook 폴더나 SharePoint 사이트 및 문서 라이브러리와 같은 연산에 필요한 값들입니다.
콜백 URL 목적지 함수를 위한 커넥터 확장 웹훅 엔드포인트입니다. 확인 콜백을 참조하세요.
함수 이름 앱 코드에 등록된 기능 이름입니다.
Authentication 기능 앱을 호출하는 데 사용된 인증 설정입니다.

functionName 트리거 구성의 콜백 URL에 있는 쿼리 문자열 값은 등록된 함수 이름과 일치해야 합니다. 유효한 함수명은 1에서 128개의 문자, 숫자, 밑줄, 또는 하이픈으로 구성됩니다.

연산명은 관리되는 커넥터에 의해 정의됩니다. 코드에서 함수 이름을 선택하고, 트리거 구성이 연산을 그 함수에 매핑합니다. 이 글의 예시들은 다음과 같은 매핑을 사용합니다:

커넥터 이벤트 작업 이름 함수 이름
새 Office 365 Outlook 이메일 OnNewEmailV3 OnNewEmail
새로운 SharePoint Online 파일 GetOnNewFileItems OnNewFile
새로운 Microsoft Teams 채팅 또는 채널 메시지 WebhookNewMessageTrigger OnNewTeamsMessage
커넥터 이벤트 작업 이름 함수 이름
새 Office 365 Outlook 이메일 OnNewEmailV3 OnNewEmail
새로운 SharePoint Online 파일 GetOnNewFileItems OnSharepointNewFile
새로운 Microsoft Teams 채널 메시지 WebhookNewMessageTrigger OnNewChannelMessage

트리거 구성 생성

Azure CLI나 Connector Namespace 포털을 사용하여 트리거 구성을 만듭니다.

트리거 구성을 만들기 전에 커넥터 네임스페이스에 권한이 있는 관리 커넥터 연결을 생성하고, 목적지 함수가 포함된 함수 앱을 배포하세요.

다음 Bash 예시는 Azure CLI 와 jq 를 사용하여 Office 365 Outlook 새 이메일 트리거를 생성합니다. 리소스와 연결의 임시 값을 교체하세요:

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

이 값은 --parameters 커넥터 동작에 따라 다릅니다. 이 예시 folderPath 에서 모니터링할 Outlook 폴더를 선택합니다. 콜백 URL에는 시스템 키가 포함되어 있지 않습니다. 객체는 notificationDetails.authentication 커넥터 네임스페이스가 함수를 호출할 때 쿼리 문자열 비밀로 키를 추가합니다.

사용법

트리거는 JSON 요청 본문을 확장에서 지원하는 .NET 바인딩 타입 중 임의로 바인딩합니다.

커넥터 작업은 하나의 이벤트 또는 여러 이벤트를 반환할 수 있습니다. 연산별 페이로드 모델을 사용하는데, 그 형태는 해당 커넥터 연산의 응답 계약을 나타내기 때문입니다.

사용법

일반 등록 ConnectorTriggerContext<T>은 . 이 특성은 payload 정규화된 콜백 엔벨로프를 포함하고, items 이벤트 항목을 포함하며 rawPayload , 원래 요청 본문을 보존합니다. 커넥터별 등록은 , , files, 와 messages같은 emails명명된 타입 배열을 제공합니다.

커넥터별 등록이 없는 연산의 경우, 항목 유형은 기본값입니다 unknown. 운영에 특화된 속성에 접근하기 전에 페이로드를 검증하세요.

사용법

트리거는 요청 본체 str를 , , dict또는 bytes에 바인딩할 수 있습니다. 함수의 SDK 주석을 위한 변환기를 등록할 때 azurefunctions-extensions-connectors , 작업자는 요청 몸체를 지원되는 연산별 타입으로 디직렬라이즈합니다.

커넥터 작업은 하나의 이벤트 또는 여러 이벤트를 반환할 수 있습니다. 연산의 타입 또는 컬렉션 주석을 연 산 서명 매핑에서 사용하세요.

확장 프로그램은 HTTP POST 및 PUT 콘텐츠 타입 요청을 application/json 받습니다. 비어 있지 않은 요청 본체는 유효한 JSON을 포함해야 합니다. 확장 프로그램은 10MB 이상의 요청 본체를 거부합니다.

Metadata

현재 커넥터 트리거는 콜백 헤더나 기타 요청 메타데이터를 바인딩 데이터로 노출하지 않습니다. 확장은 빈 바인딩 데이터 계약을 정의하여, 해당 함수는 선택한 언어가 지원하는 바인딩 타입의 JSON 요청 본문만 받습니다.

다음 단계