Associações do Microsoft Graph do Azure FunctionsMicrosoft Graph bindings for Azure Functions

Este artigo explica como configurar e trabalhar com gatilhos e associações do Microsoft Graph no Azure Functions.This article explains how to configure and work with Microsoft Graph triggers and bindings in Azure Functions. Com isso, você pode usar o Azure Functions para trabalhar com eventos, percepções e dados do Microsoft Graph.With these, you can use Azure Functions to work with data, insights, and events from the Microsoft Graph.

A extensão do Microsoft Graph oferece as seguintes associações:The Microsoft Graph extension provides the following bindings:

Essas são as informações de referência para desenvolvedores do Azure Functions.This is reference information for Azure Functions developers. Se for novo no Azure Functions, comece com os seguintes recursos:If you're new to Azure Functions, start with the following resources:

Observação

No momento, as associações de Microsoft Graph estão em visualização para Azure Functions versão 2. x e superior.Microsoft Graph bindings are currently in preview for Azure Functions version 2.x and higher. Eles não são suportados no Functions versão 1.x.They are not supported in Functions version 1.x.

PacotesPackages

A associação de entrada de token de autenticação é fornecida no pacote NuGet Microsoft.Azure.WebJobs.Extensions.AuthTokens.The auth token input binding is provided in the Microsoft.Azure.WebJobs.Extensions.AuthTokens NuGet package. As outras associações do Microsoft Graph são fornecidas no pacote Microsoft.Azure.WebJobs.Extensions.MicrosoftGraph.The other Microsoft Graph bindings are provided in the Microsoft.Azure.WebJobs.Extensions.MicrosoftGraph package. O código-fonte dos pacotes está no repositório GitHub azure-functions-microsoftgraph-extension.Source code for the packages is in the azure-functions-microsoftgraph-extension GitHub repository.

A tabela a seguir informa como adicionar suporte para essa associação em cada ambiente de desenvolvimento.The following table tells how to add support for this binding in each development environment.

Ambiente de desenvolvimentoDevelopment environment Para adicionar suporteTo add support
Desenvolvimento local - biblioteca de classes do C#Local development - C# class library Instalar o pacoteInstall the package
Desenvolvimento local - script do C#, JavaScript, F#, Java e PythonLocal development - C# script, JavaScript, F#, Java and Python Registrar a extensãoRegister the extension
Desenvolvimento de portalPortal development Instalar ao adicionar uma associação de saídaInstall when adding output binding

Para saber como atualizar as extensões de associação existentes no portal sem precisar republicar o projeto de aplicativo de funções, consulte Atualizar as extensões.To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

Como configurar as extensõesSetting up the extensions

As associações do Microsoft Graph estão disponíveis por meio de extensões de associação.Microsoft Graph bindings are available through binding extensions. Extensões de associação são componentes opcionais para o Azure Functions runtime.Binding extensions are optional components to the Azure Functions runtime. Esta seção mostra como configurar o Microsoft Graph e as extensões de token de autenticação.This section shows how to set up the Microsoft Graph and auth token extensions.

Habilitar versão prévia do Functions 2.0Enabling Functions 2.0 preview

Extensões de associação só estão disponíveis para versão prévia do Azure Functions 2.0.Binding extensions are available only for Azure Functions 2.0 preview.

Para obter informações sobre como configurar um aplicativo de funções para usar a versão prévia 2.0 do runtime do Functions, confira Como direcionar versões do Azure Functions runtime.For information about how to set a function app to use the preview 2.0 version of the Functions runtime, see How to target Azure Functions runtime versions.

Como instalar a extensãoInstalling the extension

Para instalar uma extensão do portal do Azure, navegue até um modelo ou associação que faça referência a ela.To install an extension from the Azure portal, navigate to either a template or binding that references it. Crie uma nova função e, enquanto estiver na tela de seleção de modelo, escolha o cenário "Microsoft Graph".Create a new function, and while in the template selection screen, choose the "Microsoft Graph" scenario. Selecione um dos modelos desse cenário.Select one of the templates from this scenario. Como alternativa, você pode navegar até a guia "Integração" de uma função existente e selecionar uma das associações abordadas neste artigo.Alternatively, you can navigate to the "Integrate" tab of an existing function and select one of the bindings covered in this article.

Em ambos os casos, um aviso será exibido especificando a extensão a ser instalada.In both cases, a warning will appear which specifies the extension to be installed. Clique em Instalar para obter a extensão.Click Install to obtain the extension. Cada extensão precisa ser instalada apenas uma vez por aplicativo de funções.Each extension only needs to be installed once per function app.

Observação

O processo de instalação no portal pode levar até 10 minutos em um plano de consumo.The in-portal installation process can take up to 10 minutes on a consumption plan.

Se você estiver usando o Visual Studio, poderá obter as extensões instalando os pacotes do NuGet que estão listados neste artigo.If you are using Visual Studio, you can get the extensions by installing the NuGet packages that are listed earlier in this article.

Configurando a Autenticação/AutorizaçãoConfiguring Authentication / Authorization

As associações descritas neste artigo exigem que uma identidade seja usada.The bindings outlined in this article require an identity to be used. Isso permite que o Microsoft Graph aplique permissões e interações de auditoria.This allows the Microsoft Graph to enforce permissions and audit interactions. A identidade pode ser um usuário acessando seu aplicativo ou o aplicativo em si.The identity can be a user accessing your application or the application itself. Para configurar essa identidade, configure Autenticação/Autorização do Serviço de Aplicativo com o Azure Active Directory.To configure this identity, set up App Service Authentication / Authorization with Azure Active Directory. Você também precisará solicitar quaisquer permissões de recurso que suas funções exijam.You will also need to request any resource permissions your functions require.

Observação

A extensão do Microsoft Graph tem suporte apenas para autenticação do Azure AD.The Microsoft Graph extension only supports Azure AD authentication. Os usuários precisam fazer logon com uma conta corporativa ou de estudante.Users need to log in with a work or school account.

Se estiver usando o portal do Azure, você verá um aviso abaixo do prompt para instalar a extensão.If you're using the Azure portal, you'll see a warning below the prompt to install the extension. O aviso que solicita que você configure a Autenticação/Autorização do Serviço de Aplicativo e solicita quaisquer permissões de que o modelo ou associação precise.The warning prompts you to configure App Service Authentication / Authorization and request any permissions the template or binding requires. Clique em Configurar Azure AD agora ou Adicionar permissões agora conforme apropriado.Click Configure Azure AD now or Add permissions now as appropriate.

Token de autenticaçãoAuth token

Essas associações de entrada do token de autenticação obtêm um token do Azure AD para um determinado recurso e fornece-o ao seu código como uma cadeia de caracteres.The auth token input binding gets an Azure AD token for a given resource and provides it to your code as a string. O recurso pode ser qualquer um para o qual o aplicativo tenha permissões.The resource can be any for which the application has permissions.

Essa seção contém os seguintes procedimentos:This section contains the following subsections:

Token de autenticação - exemploAuth token - example

Consulte o exemplo específico a um idioma:See the language-specific example:

Token de autenticação - exemplo de script C#Auth token - C# script example

O seguinte exemplo obtém informações do perfil do usuário.The following example gets user profile information.

O arquivo function.json define um gatilho HTTP com uma associação de entrada do token:The function.json file defines an HTTP trigger with a token input binding:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "token",
      "direction": "in",
      "name": "graphToken",
      "resource": "https://graph.microsoft.com",
      "identity": "userFromRequest"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

O código do script C# usa o token para fazer uma chamada HTTP para o Microsoft Graph e retorna o resultado:The C# script code uses the token to make an HTTP call to the Microsoft Graph and returns the result:

using System.Net; 
using System.Net.Http; 
using System.Net.Http.Headers;
using Microsoft.Extensions.Logging; 

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, string graphToken, ILogger log)
{
    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", graphToken);
    return await client.GetAsync("https://graph.microsoft.com/v1.0/me/");
}

Token de autenticação - exemplo de JavaScriptAuth token - JavaScript example

O seguinte exemplo obtém informações do perfil do usuário.The following example gets user profile information.

O arquivo function.json define um gatilho HTTP com uma associação de entrada do token:The function.json file defines an HTTP trigger with a token input binding:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "token",
      "direction": "in",
      "name": "graphToken",
      "resource": "https://graph.microsoft.com",
      "identity": "userFromRequest"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

O código do JavaScript usa o token para fazer uma chamada HTTP para o Microsoft Graph e retorna o resultado.The JavaScript code uses the token to make an HTTP call to the Microsoft Graph and returns the result.

const rp = require('request-promise');

module.exports = function (context, req) {
    let token = "Bearer " + context.bindings.graphToken;

    let options = {
        uri: 'https://graph.microsoft.com/v1.0/me/',
        headers: {
            'Authorization': token
        }
    };
    
    rp(options)
        .then(function(profile) {
            context.res = {
                body: profile
            };
            context.done();
        })
        .catch(function(err) {
            context.res = {
                status: 500,
                body: err
            };
            context.done();
        });
};

Token de autenticação - atributosAuth token - attributes

Em bibliotecas de classes do C#, use o atributo Token.In C# class libraries, use the Token attribute.

Token de autenticação - configuraçãoAuth token - configuration

A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json e no Token atributo.The following table explains the binding configuration properties that you set in the function.json file and the Token attribute.

Propriedade function.jsonfunction.json property Propriedade de atributoAttribute property DescriçãoDescription
namename Obrigatório – o nome da variável usada no código de função para o token de autenticação.Required - the variable name used in function code for the auth token. Consulte Como usar uma associação de entrada do token de autenticação do código.See Using an auth token input binding from code.
tipotype Obrigatório – deve ser definido como token.Required - must be set to token.
directiondirection Obrigatório – deve ser definido como in.Required - must be set to in.
identidadeidentity IdentidadeIdentity Obrigatório – a identidade que será usada para executar a ação.Required - The identity that will be used to perform the action. Pode ser um dos seguintes valores:Can be one of the following values:
  • userFromRequest – válida apenas com gatilho HTTP.userFromRequest - Only valid with HTTP trigger. Usa a identidade do usuário responsável pela chamada.Uses the identity of the calling user.
  • userFromId – usa a identidade de um usuário conectado anteriormente com a ID especificada.userFromId - Uses the identity of a previously logged-in user with the specified ID. Consulte a propriedade userId.See the userId property.
  • userFromToken – usa a identidade representada pelo token especificado.userFromToken - Uses the identity represented by the specified token. Consulte a propriedade userToken.See the userToken property.
  • clientCredentials – usa a identidade do aplicativo de funções.clientCredentials - Uses the identity of the function app.
userIduserId UserIdUserId Necessário se, e somente se, a identidade estiver definida como userFromId.Needed if and only if identity is set to userFromId. Uma ID de entidade de usuário associada a um usuário conectado anteriormente.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken Necessário se, e somente se, a identidade estiver definida como userFromToken.Needed if and only if identity is set to userFromToken. Um token válido para o aplicativo de função.A token valid for the function app.
RecursoResource recursoresource Obrigatório – uma URL de recurso do Azure AD para a qual o token está sendo solicitado.Required - An Azure AD resource URL for which the token is being requested.

Token de autenticação - usoAuth token - usage

A associação em si não requer permissões do Azure AD, mas, dependendo de como o token é usado, talvez seja necessário solicitar permissões adicionais.The binding itself does not require any Azure AD permissions, but depending on how the token is used, you may need to request additional permissions. Verifique os requisitos do recurso que você pretende acessar com o token.Check the requirements of the resource you intend to access with the token.

O token sempre é apresentado ao código como uma cadeia de caracteres.The token is always presented to code as a string.

Observação

Ao desenvolver localmente com qualquer opção de userFromId, userFromToken ou userFromRequest, o token necessário pode ser obtido manualmente e especificado no cabeçalho de solicitação X-MS-TOKEN-AAD-ID-TOKEN de um aplicativo de cliente de chamada.When developing locally with either of userFromId, userFromToken or userFromRequest options, required token can be obtained manually and specified in X-MS-TOKEN-AAD-ID-TOKEN request header from a calling client application.

Entrada do ExcelExcel input

Essa associação de entrada de tabela do Excel lê o conteúdo de uma tabela do Excel armazenada no OneDrive.The Excel table input binding reads the contents of an Excel table stored in OneDrive.

Essa seção contém os seguintes procedimentos:This section contains the following subsections:

Entrada do Excel - exemploExcel input - example

Consulte o exemplo específico a um idioma:See the language-specific example:

Entrada do Excel - exemplo de script C#Excel input - C# script example

O arquivo function.json a seguir define um gatilho HTTP com uma associação de entrada do Excel:The following function.json file defines an HTTP trigger with an Excel input binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "excel",
      "direction": "in",
      "name": "excelTableData",
      "path": "{query.workbook}",
      "identity": "UserFromRequest",
      "tableName": "{query.table}"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

O código do script C# a seguir lê o conteúdo da tabela especificada e retorna-o ao usuário:The following C# script code reads the contents of the specified table and returns them to the user:

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Microsoft.Extensions.Logging;

public static IActionResult Run(HttpRequest req, string[][] excelTableData, ILogger log)
{
    return new OkObjectResult(excelTableData);
}

Entrada do Excel - exemplo de JavaScriptExcel input - JavaScript example

O arquivo function.json a seguir define um gatilho HTTP com uma associação de entrada do Excel:The following function.json file defines an HTTP trigger with an Excel input binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "excel",
      "direction": "in",
      "name": "excelTableData",
      "path": "{query.workbook}",
      "identity": "UserFromRequest",
      "tableName": "{query.table}"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

O código do JavaScript a seguir lê o conteúdo da tabela especificada e retorna-o ao usuário.The following JavaScript code reads the contents of the specified table and returns them to the user.

module.exports = function (context, req) {
    context.res = {
        body: context.bindings.excelTableData
    };
    context.done();
};

Entrada do Excel - atributosExcel input - attributes

Em bibliotecas de classes do C#, use o atributo Excel.In C# class libraries, use the Excel attribute.

Entrada do Excel - configuraçãoExcel input - configuration

A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json e no Excel atributo.The following table explains the binding configuration properties that you set in the function.json file and the Excel attribute.

Propriedade function.jsonfunction.json property Propriedade de atributoAttribute property DescriçãoDescription
namename Obrigatório – o nome da variável usada no código de função para a tabela do Excel.Required - the variable name used in function code for the Excel table. Consulte Como usar uma associação de entrada de tabela do Excel do código.See Using an Excel table input binding from code.
tipotype Obrigatório – deve ser definido como excel.Required - must be set to excel.
directiondirection Obrigatório – deve ser definido como in.Required - must be set to in.
identidadeidentity IdentidadeIdentity Obrigatório – a identidade que será usada para executar a ação.Required - The identity that will be used to perform the action. Pode ser um dos seguintes valores:Can be one of the following values:
  • userFromRequest – válida apenas com gatilho HTTP.userFromRequest - Only valid with HTTP trigger. Usa a identidade do usuário responsável pela chamada.Uses the identity of the calling user.
  • userFromId – usa a identidade de um usuário conectado anteriormente com a ID especificada.userFromId - Uses the identity of a previously logged-in user with the specified ID. Consulte a propriedade userId.See the userId property.
  • userFromToken – usa a identidade representada pelo token especificado.userFromToken - Uses the identity represented by the specified token. Consulte a propriedade userToken.See the userToken property.
  • clientCredentials – usa a identidade do aplicativo de funções.clientCredentials - Uses the identity of the function app.
userIduserId UserIdUserId Necessário se, e somente se, a identidade estiver definida como userFromId.Needed if and only if identity is set to userFromId. Uma ID de entidade de usuário associada a um usuário conectado anteriormente.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken Necessário se, e somente se, a identidade estiver definida como userFromToken.Needed if and only if identity is set to userFromToken. Um token válido para o aplicativo de função.A token valid for the function app.
pathpath CaminhoPath Obrigatório – o caminho no OneDrive para a pasta de trabalho do Excel.Required - the path in OneDrive to the Excel workbook.
worksheetNameworksheetName WorksheetNameWorksheetName A planilha em que a tabela é encontrada.The worksheet in which the table is found.
tableNametableName TableNameTableName O nome da tabela.The name of the table. Se não for especificado, o conteúdo da planilha será usado.If not specified, the contents of the worksheet will be used.

Entrada do Excel - usoExcel input - usage

Esta associação exige as seguintes permissões do Azure AD:This binding requires the following Azure AD permissions:

GruposResource PermissãoPermission
Microsoft GraphMicrosoft Graph Ler arquivos de usuárioRead user files

A associação expõe os seguintes tipos a funções .NET:The binding exposes the following types to .NET functions:

  • string[][]string[][]
  • Microsoft.Graph.WorkbookTableMicrosoft.Graph.WorkbookTable
  • Tipos de objetos personalizados (usando o model binding estrutural)Custom object types (using structural model binding)

Saída do ExcelExcel output

A associação de saída do Excel modifica o conteúdo de uma tabela do Excel armazenada no OneDrive.The Excel output binding modifies the contents of an Excel table stored in OneDrive.

Essa seção contém os seguintes procedimentos:This section contains the following subsections:

Saída do Excel - exemploExcel output - example

Consulte o exemplo específico a um idioma:See the language-specific example:

Saída do Excel - exemplo de script C#Excel output - C# script example

O exemplo a seguir adiciona linhas a uma tabela do Excel.The following example adds rows to an Excel table.

O arquivo function.json define um gatilho HTTP com uma associação de saída do Excel:The function.json file defines an HTTP trigger with an Excel output binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "newExcelRow",
      "type": "excel",
      "direction": "out",
      "identity": "userFromRequest",
      "updateType": "append",
      "path": "{query.workbook}",
      "tableName": "{query.table}"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

O código do script C# adiciona uma nova linha à tabela (presumidamente de uma única coluna) com base na entrada da cadeia de caracteres de consulta:The C# script code adds a new row to the table (assumed to be single-column) based on input from the query string:

using System.Net;
using System.Text;
using Microsoft.Extensions.Logging;

public static async Task Run(HttpRequest req, IAsyncCollector<object> newExcelRow, ILogger log)
{
    string input = req.Query
        .FirstOrDefault(q => string.Compare(q.Key, "text", true) == 0)
        .Value;
    await newExcelRow.AddAsync(new {
        Text = input
        // Add other properties for additional columns here
    });
    return;
}

Saída do Excel - exemplo de JavaScriptExcel output - JavaScript example

O exemplo a seguir adiciona linhas a uma tabela do Excel.The following example adds rows to an Excel table.

O arquivo function.json define um gatilho HTTP com uma associação de saída do Excel:The function.json file defines an HTTP trigger with an Excel output binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "newExcelRow",
      "type": "excel",
      "direction": "out",
      "identity": "userFromRequest",
      "updateType": "append",
      "path": "{query.workbook}",
      "tableName": "{query.table}"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

O código do JavaScript a seguir adiciona uma nova linha à tabela (presumidamente de uma única coluna) com base na entrada da cadeia de caracteres de consulta.The following JavaScript code adds a new row to the table (assumed to be single-column) based on input from the query string.

module.exports = function (context, req) {
    context.bindings.newExcelRow = {
        text: req.query.text
        // Add other properties for additional columns here
    }
    context.done();
};

Saída do Excel - atributosExcel output - attributes

Em bibliotecas de classes do C#, use o atributo Excel.In C# class libraries, use the Excel attribute.

Saída do Excel - configuraçãoExcel output - configuration

A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json e no Excel atributo.The following table explains the binding configuration properties that you set in the function.json file and the Excel attribute.

Propriedade function.jsonfunction.json property Propriedade de atributoAttribute property DescriçãoDescription
namename Obrigatório – o nome da variável usada no código de função para o token de autenticação.Required - the variable name used in function code for the auth token. Consulte Como usar uma associação de saída de tabela do Excel do código.See Using an Excel table output binding from code.
tipotype Obrigatório – deve ser definido como excel.Required - must be set to excel.
directiondirection Obrigatório – deve ser definido como out.Required - must be set to out.
identidadeidentity IdentidadeIdentity Obrigatório – a identidade que será usada para executar a ação.Required - The identity that will be used to perform the action. Pode ser um dos seguintes valores:Can be one of the following values:
  • userFromRequest – válida apenas com gatilho HTTP.userFromRequest - Only valid with HTTP trigger. Usa a identidade do usuário responsável pela chamada.Uses the identity of the calling user.
  • userFromId – usa a identidade de um usuário conectado anteriormente com a ID especificada.userFromId - Uses the identity of a previously logged-in user with the specified ID. Consulte a propriedade userId.See the userId property.
  • userFromToken – usa a identidade representada pelo token especificado.userFromToken - Uses the identity represented by the specified token. Consulte a propriedade userToken.See the userToken property.
  • clientCredentials – usa a identidade do aplicativo de funções.clientCredentials - Uses the identity of the function app.
UserIdUserId userIduserId Necessário se, e somente se, a identidade estiver definida como userFromId.Needed if and only if identity is set to userFromId. Uma ID de entidade de usuário associada a um usuário conectado anteriormente.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken Necessário se, e somente se, a identidade estiver definida como userFromToken.Needed if and only if identity is set to userFromToken. Um token válido para o aplicativo de função.A token valid for the function app.
pathpath CaminhoPath Obrigatório – o caminho no OneDrive para a pasta de trabalho do Excel.Required - the path in OneDrive to the Excel workbook.
worksheetNameworksheetName WorksheetNameWorksheetName A planilha em que a tabela é encontrada.The worksheet in which the table is found.
tableNametableName TableNameTableName O nome da tabela.The name of the table. Se não for especificado, o conteúdo da planilha será usado.If not specified, the contents of the worksheet will be used.
updateTypeupdateType UpdateTypeUpdateType Obrigatório – o tipo de alteração a fazer na tabela.Required - The type of change to make to the table. Pode ser um dos seguintes valores:Can be one of the following values:
  • update – substitui o conteúdo da tabela no OneDrive.update - Replaces the contents of the table in OneDrive.
  • append – adiciona a carga no final da tabela no OneDrive criando novas linhas.append - Adds the payload to the end of the table in OneDrive by creating new rows.

Saída do Excel - usoExcel output - usage

Esta associação exige as seguintes permissões do Azure AD:This binding requires the following Azure AD permissions:

GruposResource PermissãoPermission
Microsoft GraphMicrosoft Graph Ter acesso completo aos arquivos do usuárioHave full access to user files

A associação expõe os seguintes tipos a funções .NET:The binding exposes the following types to .NET functions:

  • string[][]string[][]
  • Newtonsoft.Json.Linq.JObjectNewtonsoft.Json.Linq.JObject
  • Microsoft.Graph.WorkbookTableMicrosoft.Graph.WorkbookTable
  • Tipos de objetos personalizados (usando o model binding estrutural)Custom object types (using structural model binding)

Entrada do arquivoFile input

Essa associação de entrada do Arquivo do OneDrive lê o conteúdo de um arquivo armazenado no OneDrive.The OneDrive File input binding reads the contents of a file stored in OneDrive.

Essa seção contém os seguintes procedimentos:This section contains the following subsections:

Entrada do Arquivo - exemploFile input - example

Consulte o exemplo específico a um idioma:See the language-specific example:

Entrada do Arquivo - exemplo de script C#File input - C# script example

O exemplo a seguir lê um arquivo que está armazenado no OneDrive.The following example reads a file that is stored in OneDrive.

O arquivo function.json define um gatilho HTTP com uma associação de entrada do arquivo do OneDrive:The function.json file defines an HTTP trigger with a OneDrive file input binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "myOneDriveFile",
      "type": "onedrive",
      "direction": "in",
      "path": "{query.filename}",
      "identity": "userFromRequest"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

O código do script C# lê o arquivo especificado na cadeia de caracteres de consulta e registra seu comprimento:The C# script code reads the file specified in the query string and logs its length:

using System.Net;
using Microsoft.Extensions.Logging;

public static void Run(HttpRequestMessage req, Stream myOneDriveFile, ILogger log)
{
    log.LogInformation(myOneDriveFile.Length.ToString());
}

Entrada do Arquivo - exemplo de JavaScriptFile input - JavaScript example

O exemplo a seguir lê um arquivo que está armazenado no OneDrive.The following example reads a file that is stored in OneDrive.

O arquivo function.json define um gatilho HTTP com uma associação de entrada do arquivo do OneDrive:The function.json file defines an HTTP trigger with a OneDrive file input binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "myOneDriveFile",
      "type": "onedrive",
      "direction": "in",
      "path": "{query.filename}",
      "identity": "userFromRequest"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

O código do JavaScript a seguir lê o arquivo especificado na cadeia de caracteres de consulta e registra seu comprimento.The following JavaScript code reads the file specified in the query string and returns its length.

module.exports = function (context, req) {
    context.res = {
        body: context.bindings.myOneDriveFile.length
    };
    context.done();
};

Entrada do arquivo - atributosFile input - attributes

Em bibliotecas de classes do C#, use o atributo OneDrive.In C# class libraries, use the OneDrive attribute.

Entrada do arquivo - configuraçãoFile input - configuration

A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json e no OneDrive atributo.The following table explains the binding configuration properties that you set in the function.json file and the OneDrive attribute.

Propriedade function.jsonfunction.json property Propriedade de atributoAttribute property DescriçãoDescription
namename Obrigatório – o nome da variável usada no código de função para o arquivo.Required - the variable name used in function code for the file. Consulte Como usar uma associação de entrada de arquivo do OneDrive do código.See Using a OneDrive file input binding from code.
tipotype Obrigatório – deve ser definido como onedrive.Required - must be set to onedrive.
directiondirection Obrigatório – deve ser definido como in.Required - must be set to in.
identidadeidentity IdentidadeIdentity Obrigatório – a identidade que será usada para executar a ação.Required - The identity that will be used to perform the action. Pode ser um dos seguintes valores:Can be one of the following values:
  • userFromRequest – válida apenas com gatilho HTTP.userFromRequest - Only valid with HTTP trigger. Usa a identidade do usuário responsável pela chamada.Uses the identity of the calling user.
  • userFromId – usa a identidade de um usuário conectado anteriormente com a ID especificada.userFromId - Uses the identity of a previously logged-in user with the specified ID. Consulte a propriedade userId.See the userId property.
  • userFromToken – usa a identidade representada pelo token especificado.userFromToken - Uses the identity represented by the specified token. Consulte a propriedade userToken.See the userToken property.
  • clientCredentials – usa a identidade do aplicativo de funções.clientCredentials - Uses the identity of the function app.
userIduserId UserIdUserId Necessário se, e somente se, a identidade estiver definida como userFromId.Needed if and only if identity is set to userFromId. Uma ID de entidade de usuário associada a um usuário conectado anteriormente.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken Necessário se, e somente se, a identidade estiver definida como userFromToken.Needed if and only if identity is set to userFromToken. Um token válido para o aplicativo de função.A token valid for the function app.
pathpath CaminhoPath Obrigatória – o caminho no OneDrive para o arquivo.Required - the path in OneDrive to the file.

Entrada do arquivo - usoFile input - usage

Esta associação exige as seguintes permissões do Azure AD:This binding requires the following Azure AD permissions:

GruposResource PermissãoPermission
Microsoft GraphMicrosoft Graph Ler arquivos de usuárioRead user files

A associação expõe os seguintes tipos a funções .NET:The binding exposes the following types to .NET functions:

  • byte[]byte[]
  • FluxoStream
  • stringstring
  • Microsoft.Graph.DriveItemMicrosoft.Graph.DriveItem

Saída do arquivoFile output

Essa associação de saída do arquivo do OneDrive modifica o conteúdo de um arquivo armazenado no OneDrive.The OneDrive file output binding modifies the contents of a file stored in OneDrive.

Essa seção contém os seguintes procedimentos:This section contains the following subsections:

Saída do arquivo - exemploFile output - example

Consulte o exemplo específico a um idioma:See the language-specific example:

Saída do arquivo - exemplo de script C#File output - C# script example

O exemplo a seguir grava um arquivo que está armazenado no OneDrive.The following example writes to a file that is stored in OneDrive.

O arquivo function.json define um gatilho HTTP com uma associação de saída do OneDrive:The function.json file defines an HTTP trigger with a OneDrive output binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "myOneDriveFile",
      "type": "onedrive",
      "direction": "out",
      "path": "FunctionsTest.txt",
      "identity": "userFromRequest"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

O código do script C# obtém o texto da cadeia de caracteres de consulta e grava-o em um arquivo de texto (FunctionsTest.txt conforme definido na configuração acima) na raiz do OneDrive do chamador:The C# script code gets text from the query string and writes it to a text file (FunctionsTest.txt as defined in the preceding example) at the root of the caller's OneDrive:

using System.Net;
using System.Text;
using Microsoft.Extensions.Logging;

public static async Task Run(HttpRequest req, ILogger log, Stream myOneDriveFile)
{
    string data = req.Query
        .FirstOrDefault(q => string.Compare(q.Key, "text", true) == 0)
        .Value;
    await myOneDriveFile.WriteAsync(Encoding.UTF8.GetBytes(data), 0, data.Length);
    myOneDriveFile.Close();
    return;
}

Saída do arquivo - exemplo de JavaScriptFile output - JavaScript example

O exemplo a seguir grava um arquivo que está armazenado no OneDrive.The following example writes to a file that is stored in OneDrive.

O arquivo function.json define um gatilho HTTP com uma associação de saída do OneDrive:The function.json file defines an HTTP trigger with a OneDrive output binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "myOneDriveFile",
      "type": "onedrive",
      "direction": "out",
      "path": "FunctionsTest.txt",
      "identity": "userFromRequest"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

O código do JavaScript obtém o texto da cadeia de caracteres de consulta e grava-o em um arquivo de texto (FunctionsTest.txt conforme definido na configuração acima) na raiz do OneDrive do chamador.The JavaScript code gets text from the query string and writes it to a text file (FunctionsTest.txt as defined in the config above) at the root of the caller's OneDrive.

module.exports = function (context, req) {
    context.bindings.myOneDriveFile = req.query.text;
    context.done();
};

Saída do arquivo - atributosFile output - attributes

Em bibliotecas de classes do C#, use o atributo OneDrive.In C# class libraries, use the OneDrive attribute.

Saída do arquivo - configuraçãoFile output - configuration

A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json e no OneDrive atributo.The following table explains the binding configuration properties that you set in the function.json file and the OneDrive attribute.

Propriedade function.jsonfunction.json property Propriedade de atributoAttribute property DescriçãoDescription
namename Obrigatório – o nome da variável usada no código de função para o arquivo.Required - the variable name used in function code for file. Consulte Como usar uma associação de saída de arquivo do OneDrive do código.See Using a OneDrive file output binding from code.
tipotype Obrigatório – deve ser definido como onedrive.Required - must be set to onedrive.
directiondirection Obrigatório – deve ser definido como out.Required - must be set to out.
identidadeidentity IdentidadeIdentity Obrigatório – a identidade que será usada para executar a ação.Required - The identity that will be used to perform the action. Pode ser um dos seguintes valores:Can be one of the following values:
  • userFromRequest – válida apenas com gatilho HTTP.userFromRequest - Only valid with HTTP trigger. Usa a identidade do usuário responsável pela chamada.Uses the identity of the calling user.
  • userFromId – usa a identidade de um usuário conectado anteriormente com a ID especificada.userFromId - Uses the identity of a previously logged-in user with the specified ID. Consulte a propriedade userId.See the userId property.
  • userFromToken – usa a identidade representada pelo token especificado.userFromToken - Uses the identity represented by the specified token. Consulte a propriedade userToken.See the userToken property.
  • clientCredentials – usa a identidade do aplicativo de funções.clientCredentials - Uses the identity of the function app.
UserIdUserId userIduserId Necessário se, e somente se, a identidade estiver definida como userFromId.Needed if and only if identity is set to userFromId. Uma ID de entidade de usuário associada a um usuário conectado anteriormente.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken Necessário se, e somente se, a identidade estiver definida como userFromToken.Needed if and only if identity is set to userFromToken. Um token válido para o aplicativo de função.A token valid for the function app.
pathpath CaminhoPath Obrigatória – o caminho no OneDrive para o arquivo.Required - the path in OneDrive to the file.

Saída do arquivo - usoFile output - usage

Esta associação exige as seguintes permissões do Azure AD:This binding requires the following Azure AD permissions:

GruposResource PermissãoPermission
Microsoft GraphMicrosoft Graph Ter acesso completo aos arquivos do usuárioHave full access to user files

A associação expõe os seguintes tipos a funções .NET:The binding exposes the following types to .NET functions:

  • byte[]byte[]
  • FluxoStream
  • stringstring
  • Microsoft.Graph.DriveItemMicrosoft.Graph.DriveItem

Saída de OutlookOutlook output

A associação de saída de mensagem do Outlook envia uma mensagem de email por meio do Outlook.The Outlook message output binding sends a mail message through Outlook.

Essa seção contém os seguintes procedimentos:This section contains the following subsections:

Saída do Outlook - exemploOutlook output - example

Consulte o exemplo específico a um idioma:See the language-specific example:

Saída do Outlook - exemplo de script C#Outlook output - C# script example

O exemplo a seguir envia um email pelo Outlook.The following example sends an email through Outlook.

O arquivo function.json define um gatilho HTTP com uma associação de saída de mensagem do Outlook:The function.json file defines an HTTP trigger with an Outlook message output binding:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "message",
      "type": "outlook",
      "direction": "out",
      "identity": "userFromRequest"
    }
  ],
  "disabled": false
}

O código do script C# envia um email do chamador para um destinatário especificado na cadeia de caracteres de consulta:The C# script code sends a mail from the caller to a recipient specified in the query string:

using System.Net;
using Microsoft.Extensions.Logging;

public static void Run(HttpRequest req, out Message message, ILogger log)
{ 
    string emailAddress = req.Query["to"];
    message = new Message(){
        subject = "Greetings",
        body = "Sent from Azure Functions",
        recipient = new Recipient() {
            address = emailAddress
        }
    };
}

public class Message {
    public String subject {get; set;}
    public String body {get; set;}
    public Recipient recipient {get; set;}
}

public class Recipient {
    public String address {get; set;}
    public String name {get; set;}
}

Saída do Outlook - exemplo de JavaScriptOutlook output - JavaScript example

O exemplo a seguir envia um email pelo Outlook.The following example sends an email through Outlook.

O arquivo function.json define um gatilho HTTP com uma associação de saída de mensagem do Outlook:The function.json file defines an HTTP trigger with an Outlook message output binding:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "message",
      "type": "outlook",
      "direction": "out",
      "identity": "userFromRequest"
    }
  ],
  "disabled": false
}

O código do JavaScript envia um email do chamador para um destinatário especificado na cadeia de caracteres de consulta:The JavaScript code sends a mail from the caller to a recipient specified in the query string:

module.exports = function (context, req) {
    context.bindings.message = {
        subject: "Greetings",
        body: "Sent from Azure Functions with JavaScript",
        recipient: {
            address: req.query.to 
        } 
    };
    context.done();
};

Saída do Outlook - atributosOutlook output - attributes

Em bibliotecas de classes do C#, use o atributo Outlook.In C# class libraries, use the Outlook attribute.

Saída do Outlook - configuraçãoOutlook output - configuration

A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json e no Outlook atributo.The following table explains the binding configuration properties that you set in the function.json file and the Outlook attribute.

Propriedade function.jsonfunction.json property Propriedade de atributoAttribute property DescriçãoDescription
namename Obrigatória – o nome da variável usada no código de função para a mensagem de email.Required - the variable name used in function code for the mail message. Consulte Como usar uma associação de saída da mensagem do Outlook do código.See Using an Outlook message output binding from code.
tipotype Obrigatório – deve ser definido como outlook.Required - must be set to outlook.
directiondirection Obrigatório – deve ser definido como out.Required - must be set to out.
identidadeidentity IdentidadeIdentity Obrigatório – a identidade que será usada para executar a ação.Required - The identity that will be used to perform the action. Pode ser um dos seguintes valores:Can be one of the following values:
  • userFromRequest – válida apenas com gatilho HTTP.userFromRequest - Only valid with HTTP trigger. Usa a identidade do usuário responsável pela chamada.Uses the identity of the calling user.
  • userFromId – usa a identidade de um usuário conectado anteriormente com a ID especificada.userFromId - Uses the identity of a previously logged-in user with the specified ID. Consulte a propriedade userId.See the userId property.
  • userFromToken – usa a identidade representada pelo token especificado.userFromToken - Uses the identity represented by the specified token. Consulte a propriedade userToken.See the userToken property.
  • clientCredentials – usa a identidade do aplicativo de funções.clientCredentials - Uses the identity of the function app.
userIduserId UserIdUserId Necessário se, e somente se, a identidade estiver definida como userFromId.Needed if and only if identity is set to userFromId. Uma ID de entidade de usuário associada a um usuário conectado anteriormente.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken Necessário se, e somente se, a identidade estiver definida como userFromToken.Needed if and only if identity is set to userFromToken. Um token válido para o aplicativo de função.A token valid for the function app.

Saída de Outlook - usoOutlook output - usage

Esta associação exige as seguintes permissões do Azure AD:This binding requires the following Azure AD permissions:

GruposResource PermissãoPermission
Microsoft GraphMicrosoft Graph Enviar email como usuárioSend mail as user

A associação expõe os seguintes tipos a funções .NET:The binding exposes the following types to .NET functions:

  • Microsoft.Graph.MessageMicrosoft.Graph.Message
  • Newtonsoft.Json.Linq.JObjectNewtonsoft.Json.Linq.JObject
  • stringstring
  • Tipos de objetos personalizados (usando o model binding estrutural)Custom object types (using structural model binding)

WebhooksWebhooks

Webhooks permitem reagir a eventos no Microsoft Graph.Webhooks allow you to react to events in the Microsoft Graph. Para dar suporte a webhooks, são necessárias funções para criar, atualizar e reagir a assinaturas de webhook.To support webhooks, functions are needed to create, refresh, and react to webhook subscriptions. Uma solução completa de webhook exige uma combinação das seguintes associações:A complete webhook solution requires a combination of the following bindings:

As associações em si não exigem permissões do Azure AD, mas você precisa solicitar permissões relevantes para o tipo de recurso ao qual você deseja reagir.The bindings themselves do not require any Azure AD permissions, but you need to request permissions relevant to the resource type you wish to react to. Para obter uma lista de quais permissões são necessárias para cada tipo de recurso, consulte permissões de assinatura.For a list of which permissions are needed for each resource type, see subscription permissions.

Para obter mais informações sobre webhooks, confira Como trabalhar com webhooks no Microsoft Graph.For more information about webhooks, see Working with webhooks in Microsoft Graph.

Gatilho de webhookWebhook trigger

O gatilho de webhook do Microsoft Graph permite que uma função reaja a um webhook de entrada do Microsoft Graph.The Microsoft Graph webhook trigger allows a function to react to an incoming webhook from the Microsoft Graph. Cada instância deste gatilho pode reagir a um tipo de recurso do Microsoft Graph.Each instance of this trigger can react to one Microsoft Graph resource type.

Essa seção contém os seguintes procedimentos:This section contains the following subsections:

Gatilho de webhook - exemploWebhook trigger - example

Consulte o exemplo específico a um idioma:See the language-specific example:

Gatilho de webhook - exemplo de script C#Webhook trigger - C# script example

O exemplo a seguir manipula webhooks de mensagens de entrada do Outlook.The following example handles webhooks for incoming Outlook messages. Para usar um gatilho de webhook, crie uma assinatura e poderá atualizar a assinatura para impedir a expiração.To use a webhook trigger you create a subscription, and you can refresh the subscription to prevent it from expiring.

O arquivo function.json define um gatilho de webhook:The function.json file defines a webhook trigger:

{
  "bindings": [
    {
      "name": "msg",
      "type": "GraphWebhookTrigger",
      "direction": "in",
      "resourceType": "#Microsoft.Graph.Message"
    }
  ],
  "disabled": false
}

O código do script C# reage a mensagens de email de entrada e registra o corpo daquelas enviadas pelo destinatário e que contêm "Azure Functions" no assunto:The C# script code reacts to incoming mail messages and logs the body of those sent by the recipient and containing "Azure Functions" in the subject:

#r "Microsoft.Graph"
using Microsoft.Graph;
using System.Net;
using Microsoft.Extensions.Logging;

public static async Task Run(Message msg, ILogger log)  
{
    log.LogInformation("Microsoft Graph webhook trigger function processed a request.");

    // Testable by sending oneself an email with the subject "Azure Functions" and some text body
    if (msg.Subject.Contains("Azure Functions") && msg.From.Equals(msg.Sender)) {
        log.LogInformation($"Processed email: {msg.BodyPreview}");
    }
}

Gatilho de webhook - exemplo de JavaScriptWebhook trigger - JavaScript example

O exemplo a seguir manipula webhooks de mensagens de entrada do Outlook.The following example handles webhooks for incoming Outlook messages. Para usar um gatilho de webhook, crie uma assinatura e poderá atualizar a assinatura para impedir a expiração.To use a webhook trigger you create a subscription, and you can refresh the subscription to prevent it from expiring.

O arquivo function.json define um gatilho de webhook:The function.json file defines a webhook trigger:

{
  "bindings": [
    {
      "name": "msg",
      "type": "GraphWebhookTrigger",
      "direction": "in",
      "resourceType": "#Microsoft.Graph.Message"
    }
  ],
  "disabled": false
}

O código do JavaScript reage a mensagens de email de entrada e registra o corpo daquelas enviadas pelo destinatário e que contêm "Azure Functions" no assunto:The JavaScript code reacts to incoming mail messages and logs the body of those sent by the recipient and containing "Azure Functions" in the subject:

module.exports = function (context) {
    context.log("Microsoft Graph webhook trigger function processed a request.");
    const msg = context.bindings.msg
    // Testable by sending oneself an email with the subject "Azure Functions" and some text body
    if((msg.subject.indexOf("Azure Functions") > -1) && (msg.from === msg.sender) ) {
      context.log(`Processed email: ${msg.bodyPreview}`);
    }
    context.done();
};

Gatilho de webhook - atributosWebhook trigger - attributes

Em C# bibliotecas de classes, use o atributo GraphWebhookTrigger .In C# class libraries, use the GraphWebhookTrigger attribute.

Gatilho de webhook - configuraçãoWebhook trigger - configuration

A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json e no GraphWebhookTrigger atributo.The following table explains the binding configuration properties that you set in the function.json file and the GraphWebhookTrigger attribute.

Propriedade function.jsonfunction.json property Propriedade de atributoAttribute property DescriçãoDescription
namename Obrigatória – o nome da variável usada no código de função para a mensagem de email.Required - the variable name used in function code for the mail message. Consulte Como usar uma associação de saída da mensagem do Outlook do código.See Using an Outlook message output binding from code.
tipotype Obrigatório – deve ser definido como graphWebhook.Required - must be set to graphWebhook.
directiondirection Obrigatório – deve ser definido como trigger.Required - must be set to trigger.
resourceTyperesourceType ResourceTypeResourceType Obrigatório – o recurso de grafo para o qual essa função deve responder a webhooks.Required - the graph resource for which this function should respond to webhooks. Pode ser um dos seguintes valores:Can be one of the following values:
  • #Microsoft.Graph.Message – alterações feitas em mensagens do Outlook.#Microsoft.Graph.Message - changes made to Outlook messages.
  • #Microsoft.Graph.DriveItem – alterações feitas aos itens de raiz do OneDrive.#Microsoft.Graph.DriveItem - changes made to OneDrive root items.
  • #Microsoft.Graph.Contact - as alterações feitas nos contatos pessoais do Outlook.#Microsoft.Graph.Contact - changes made to personal contacts in Outlook.
  • #Microsoft.Graph.Event - as alterações feitas em itens de calendário do Outlook.#Microsoft.Graph.Event - changes made to Outlook calendar items.

Observação

Um aplicativo de funções só pode ter uma função que esteja registrada em relação a um determinado valor de resourceType.A function app can only have one function that is registered against a given resourceType value.

Gatilho de webhook - usoWebhook trigger - usage

A associação expõe os seguintes tipos a funções .NET:The binding exposes the following types to .NET functions:

  • Tipos de SDK do Microsoft Graph relevantes ao tipo de recurso, por exemplo, Microsoft.Graph.Message ou Microsoft.Graph.DriveItem.Microsoft Graph SDK types relevant to the resource type, such as Microsoft.Graph.Message or Microsoft.Graph.DriveItem.
  • Tipos de objetos personalizados (usando o model binding estrutural)Custom object types (using structural model binding)

Entrada do webhookWebhook input

A associação da entrada do webhook do Microsoft Graph permite recuperar a lista de assinaturas gerenciadas por este aplicativo de funções.The Microsoft Graph webhook input binding allows you to retrieve the list of subscriptions managed by this function app. A associação lê do armazenamento do aplicativo de funções e, assim, não reflete outras assinaturas criadas de fora do aplicativo.The binding reads from function app storage, so it does not reflect other subscriptions created from outside the app.

Essa seção contém os seguintes procedimentos:This section contains the following subsections:

Entrada de webhook - exemploWebhook input - example

Consulte o exemplo específico a um idioma:See the language-specific example:

Entrada de webhook - exemplo de script C#Webhook input - C# script example

O exemplo a seguir obtém todas as assinaturas para o usuário que está chamando e as exclui.The following example gets all subscriptions for the calling user and deletes them.

O arquivo function.json define um gatilho HTTP com uma associação de entrada de assinatura e uma associação de saída de assinatura que usa a ação de excluir:The function.json file defines an HTTP trigger with a subscription input binding and a subscription output binding that uses the delete action:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in",
      "filter": "userFromRequest"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "subscriptionsToDelete",
      "direction": "out",
      "action": "delete",
      "identity": "userFromRequest"
    },
    {
      "type": "http",
      "name": "res",
      "direction": "out"
    }
  ],
  "disabled": false
}

O código do script C# obtém as assinaturas e as exclui:The C# script code gets the subscriptions and deletes them:

using System.Net;
using Microsoft.Extensions.Logging;

public static async Task Run(HttpRequest req, string[] existingSubscriptions, IAsyncCollector<string> subscriptionsToDelete, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");
    foreach (var subscription in existingSubscriptions)
    {
        log.LogInformation($"Deleting subscription {subscription}");
        await subscriptionsToDelete.AddAsync(subscription);
    }
}

Entrada de webhook - exemplo de JavaScriptWebhook input - JavaScript example

O exemplo a seguir obtém todas as assinaturas para o usuário que está chamando e as exclui.The following example gets all subscriptions for the calling user and deletes them.

O arquivo function.json define um gatilho HTTP com uma associação de entrada de assinatura e uma associação de saída de assinatura que usa a ação de excluir:The function.json file defines an HTTP trigger with a subscription input binding and a subscription output binding that uses the delete action:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in",
      "filter": "userFromRequest"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "subscriptionsToDelete",
      "direction": "out",
      "action": "delete",
      "identity": "userFromRequest"
    },
    {
      "type": "http",
      "name": "res",
      "direction": "out"
    }
  ],
  "disabled": false
}

O código do JavaScript obtém as assinaturas e as exclui:The JavaScript code gets the subscriptions and deletes them:

module.exports = function (context, req) {
    const existing = context.bindings.existingSubscriptions;
    var toDelete = [];
    for (var i = 0; i < existing.length; i++) {
        context.log(`Deleting subscription ${existing[i]}`);
        todelete.push(existing[i]);
    }
    context.bindings.subscriptionsToDelete = toDelete;
    context.done();
};

Entrada de webhook - atributosWebhook input - attributes

Em C# bibliotecas de classes, use o atributo GraphWebhookSubscription .In C# class libraries, use the GraphWebhookSubscription attribute.

Entrada de webhook - configuraçãoWebhook input - configuration

A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json e no GraphWebhookSubscription atributo.The following table explains the binding configuration properties that you set in the function.json file and the GraphWebhookSubscription attribute.

Propriedade function.jsonfunction.json property Propriedade de atributoAttribute property DescriçãoDescription
namename Obrigatória – o nome da variável usada no código de função para a mensagem de email.Required - the variable name used in function code for the mail message. Consulte Como usar uma associação de saída da mensagem do Outlook do código.See Using an Outlook message output binding from code.
tipotype Obrigatório – deve ser definido como graphWebhookSubscription.Required - must be set to graphWebhookSubscription.
directiondirection Obrigatório – deve ser definido como in.Required - must be set to in.
filterfilter FilterFilter Se definido como userFromRequest, a associação apenas recuperará assinaturas pertencentes ao usuário que está chamando (válido somente com gatilho HTTP).If set to userFromRequest, then the binding will only retrieve subscriptions owned by the calling user (valid only with HTTP trigger).

Entrada de webhook - usoWebhook input - usage

A associação expõe os seguintes tipos a funções .NET:The binding exposes the following types to .NET functions:

  • string[]string[]
  • Matrizes de tipo de objeto personalizadoCustom object type arrays
  • Newtonsoft.Json.Linq.JObject[]Newtonsoft.Json.Linq.JObject[]
  • Microsoft.Graph.Subscription[]Microsoft.Graph.Subscription[]

Saída de webhookWebhook output

Essa associação de saída de assinatura de webhook permite que você crie, exclua e atualize as assinaturas de webhook no Microsoft Graph.The webhook subscription output binding allows you to create, delete, and refresh webhook subscriptions in the Microsoft Graph.

Essa seção contém os seguintes procedimentos:This section contains the following subsections:

Saída de webhook - exemploWebhook output - example

Consulte o exemplo específico a um idioma:See the language-specific example:

Saída de webhook - exemplo de script C#Webhook output - C# script example

O exemplo a seguir cria uma assinatura.The following example creates a subscription. Você pode atualizar uma assinatura para impedir que ela expire.You can refresh the subscription to prevent it from expiring.

O arquivo function.json define um gatilho HTTP com uma associação de saída de assinatura usando a ação de criar:The function.json file defines an HTTP trigger with a subscription output binding using the create action:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "clientState",
      "direction": "out",
      "action": "create",
      "subscriptionResource": "me/mailFolders('Inbox')/messages",
      "changeTypes": [
        "created"
      ],
      "identity": "userFromRequest"
    },
    {
      "type": "http",
      "name": "$return",
      "direction": "out"
    }
  ],
  "disabled": false
}

O código do script C# registra um webhook que notificará esse aplicativo de funções quando o usuário que está chamando receber uma mensagem do Outlook:The C# script code registers a webhook that will notify this function app when the calling user receives an Outlook message:

using System;
using System.Net;
using Microsoft.Extensions.Logging;

public static HttpResponseMessage run(HttpRequestMessage req, out string clientState, ILogger log)
{
  log.LogInformation("C# HTTP trigger function processed a request.");
    clientState = Guid.NewGuid().ToString();
    return new HttpResponseMessage(HttpStatusCode.OK);
}

Saída de webhook - exemplo de JavaScriptWebhook output - JavaScript example

O exemplo a seguir cria uma assinatura.The following example creates a subscription. Você pode atualizar uma assinatura para impedir que ela expire.You can refresh the subscription to prevent it from expiring.

O arquivo function.json define um gatilho HTTP com uma associação de saída de assinatura usando a ação de criar:The function.json file defines an HTTP trigger with a subscription output binding using the create action:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "clientState",
      "direction": "out",
      "action": "create",
      "subscriptionResource": "me/mailFolders('Inbox')/messages",
      "changeTypes": [
        "created"
      ],
      "identity": "userFromRequest"
    },
    {
      "type": "http",
      "name": "$return",
      "direction": "out"
    }
  ],
  "disabled": false
}

O código do JavaScript registra um webhook que notificará esse aplicativo de funções quando o usuário que está chamando receber uma mensagem do Outlook:The JavaScript code registers a webhook that will notify this function app when the calling user receives an Outlook message:

const uuidv4 = require('uuid/v4');

module.exports = function (context, req) {
    context.bindings.clientState = uuidv4();
    context.done();
};

Saída de webhook - atributosWebhook output - attributes

Em C# bibliotecas de classes, use o atributo GraphWebhookSubscription .In C# class libraries, use the GraphWebhookSubscription attribute.

Saída de webhook - configuraçãoWebhook output - configuration

A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json e no GraphWebhookSubscription atributo.The following table explains the binding configuration properties that you set in the function.json file and the GraphWebhookSubscription attribute.

Propriedade function.jsonfunction.json property Propriedade de atributoAttribute property DescriçãoDescription
namename Obrigatória – o nome da variável usada no código de função para a mensagem de email.Required - the variable name used in function code for the mail message. Consulte Como usar uma associação de saída da mensagem do Outlook do código.See Using an Outlook message output binding from code.
tipotype Obrigatório – deve ser definido como graphWebhookSubscription.Required - must be set to graphWebhookSubscription.
directiondirection Obrigatório – deve ser definido como out.Required - must be set to out.
identidadeidentity IdentidadeIdentity Obrigatório – a identidade que será usada para executar a ação.Required - The identity that will be used to perform the action. Pode ser um dos seguintes valores:Can be one of the following values:
  • userFromRequest – válida apenas com gatilho HTTP.userFromRequest - Only valid with HTTP trigger. Usa a identidade do usuário responsável pela chamada.Uses the identity of the calling user.
  • userFromId – usa a identidade de um usuário conectado anteriormente com a ID especificada.userFromId - Uses the identity of a previously logged-in user with the specified ID. Consulte a propriedade userId.See the userId property.
  • userFromToken – usa a identidade representada pelo token especificado.userFromToken - Uses the identity represented by the specified token. Consulte a propriedade userToken.See the userToken property.
  • clientCredentials – usa a identidade do aplicativo de funções.clientCredentials - Uses the identity of the function app.
userIduserId UserIdUserId Necessário se, e somente se, a identidade estiver definida como userFromId.Needed if and only if identity is set to userFromId. Uma ID de entidade de usuário associada a um usuário conectado anteriormente.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken Necessário se, e somente se, a identidade estiver definida como userFromToken.Needed if and only if identity is set to userFromToken. Um token válido para o aplicativo de função.A token valid for the function app.
actionaction AçãoAction Obrigatório – especifica a ação que a associação deve executar.Required - specifies the action the binding should perform. Pode ser um dos seguintes valores:Can be one of the following values:
  • create – registrar uma nova assinatura.create - Registers a new subscription.
  • delete – exclui uma assinatura especificada.delete - Deletes a specified subscription.
  • refresh – atualiza uma assinatura especificada para impedir que ela expire.refresh - Refreshes a specified subscription to keep it from expiring.
subscriptionResourcesubscriptionResource SubscriptionResourceSubscriptionResource Necessário se e somente se a ação estiver definida como create.Needed if and only if the action is set to create. Especifica o recurso Microsoft Graph que será monitorado quanto a alterações.Specifies the Microsoft Graph resource that will be monitored for changes. Consulte Como trabalhar com webhooks no Microsoft Graph.See Working with webhooks in Microsoft Graph.
changeTypechangeType ChangeTypeChangeType Necessário se e somente se a ação estiver definida como create.Needed if and only if the action is set to create. Indica o tipo de alteração no recurso assinado que gerará uma notificação.Indicates the type of change in the subscribed resource that will raise a notification. Os valores com suporte são: created, updated, deleted.The supported values are: created, updated, deleted. Você pode combinar diversos valores usando uma lista separada por vírgulas.Multiple values can be combined using a comma-separated list.

Saída de webhook - usoWebhook output - usage

A associação expõe os seguintes tipos a funções .NET:The binding exposes the following types to .NET functions:

  • stringstring
  • Microsoft.Graph.SubscriptionMicrosoft.Graph.Subscription

Atualização de assinatura de webhookWebhook subscription refresh

Há duas abordagens para atualizar assinaturas:There are two approaches to refreshing subscriptions:

  • Use a identidade do aplicativo para lidar com todas as assinaturas.Use the application identity to deal with all subscriptions. Isso exigirá o consentimento de um administrador Azure Active Directory. Isso pode ser usado por todos os idiomas com suporte pelo Azure Functions.This will require consent from an Azure Active Directory admin. This can be used by all languages supported by Azure Functions.
  • Use a identidade associada a cada assinatura associando manualmente cada ID de usuário.Use the identity associated with each subscription by manually binding each user ID. Isso exigirá algum código personalizado para executar a associação.This will require some custom code to perform the binding. Isso pode ser usado somente por funções .NET.This can only be used by .NET functions.

Esta seção contém um exemplo para cada uma destas abordagens:This section contains an example for each of these approaches:

Atualização de assinatura de Webhook - exemplo de identidade de aplicativoWebhook Subscription refresh - app identity example

Consulte o exemplo específico a um idioma:See the language-specific example:

Atualização de identidade de aplicativo - exemplo de script C#App identity refresh - C# script example

O exemplo a seguir usa a identidade do aplicativo para atualizar uma assinatura.The following example uses the application identity to refresh a subscription.

O arquivo function.json define um gatilho de temporizador com uma associação de entrada de assinatura e uma associação de saída de assinatura:The function.json defines a timer trigger with a subscription input binding and a subscription output binding:

{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 * * */2 * *"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "subscriptionsToRefresh",
      "direction": "out",
      "action": "refresh",
      "identity": "clientCredentials"
    }
  ],
  "disabled": false
}

O código do script C# atualiza as assinaturas:The C# script code refreshes the subscriptions:

using System;
using Microsoft.Extensions.Logging;

public static void Run(TimerInfo myTimer, string[] existingSubscriptions, ICollector<string> subscriptionsToRefresh, ILogger log)
{
    // This template uses application permissions and requires consent from an Azure Active Directory admin.
    // See https://go.microsoft.com/fwlink/?linkid=858780
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    foreach (var subscription in existingSubscriptions)
    {
      log.LogInformation($"Refreshing subscription {subscription}");
      subscriptionsToRefresh.Add(subscription);
    }
}

Atualização de identidade de aplicativo - exemplo de script C#App identity refresh - C# script example

O exemplo a seguir usa a identidade do aplicativo para atualizar uma assinatura.The following example uses the application identity to refresh a subscription.

O arquivo function.json define um gatilho de temporizador com uma associação de entrada de assinatura e uma associação de saída de assinatura:The function.json defines a timer trigger with a subscription input binding and a subscription output binding:

{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 * * */2 * *"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "subscriptionsToRefresh",
      "direction": "out",
      "action": "refresh",
      "identity": "clientCredentials"
    }
  ],
  "disabled": false
}

O código do JavaScript atualiza as assinaturas:The JavaScript code refreshes the subscriptions:

// This template uses application permissions and requires consent from an Azure Active Directory admin.
// See https://go.microsoft.com/fwlink/?linkid=858780

module.exports = function (context) {
    const existing = context.bindings.existingSubscriptions;
    var toRefresh = [];
    for (var i = 0; i < existing.length; i++) {
        context.log(`Refreshing subscription ${existing[i]}`);
        toRefresh.push(existing[i]);
    }
    context.bindings.subscriptionsToRefresh = toRefresh;
    context.done();
};

Atualização de assinatura de Webhook - exemplo de identidade de usuárioWebhook Subscription refresh - user identity example

O exemplo a seguir utiliza a identidade do usuário para atualizar uma assinatura.The following example uses the user identity to refresh a subscription.

O arquivo function.json define um gatilho de temporizador e adia a associação de entrada de assinatura para o código de função:The function.json file defines a timer trigger and defers the subscription input binding to the function code:

{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 * * */2 * *"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in"
    }
  ],
  "disabled": false
}

O código do script C# atualiza as assinaturas e cria a associação de saída no código usando a identidade de cada usuário:The C# script code refreshes the subscriptions and creates the output binding in code, using each user's identity:

using System;
using Microsoft.Extensions.Logging;

public static async Task Run(TimerInfo myTimer, UserSubscription[] existingSubscriptions, IBinder binder, ILogger log)
{
  log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    foreach (var subscription in existingSubscriptions)
    {
        // binding in code to allow dynamic identity
        using (var subscriptionsToRefresh = await binder.BindAsync<IAsyncCollector<string>>(
            new GraphWebhookSubscriptionAttribute() {
                Action = "refresh",
                Identity = "userFromId",
                UserId = subscription.UserId
            }
        ))
        {
            log.LogInformation($"Refreshing subscription {subscription}");
            await subscriptionsToRefresh.AddAsync(subscription);
        }

    }
}

public class UserSubscription {
    public string UserId {get; set;}
    public string Id {get; set;}
}

Próximos passosNext steps