Enlaces de Microsoft Graph para Azure FunctionsMicrosoft Graph bindings for Azure Functions

En este artículo se explica cómo configurar y trabajar con desencadenadores de Microsoft Graph y enlaces de Azure Functions.This article explains how to configure and work with Microsoft Graph triggers and bindings in Azure Functions. Toda esta información le prepará para usar Azure Functions para trabajar con datos, información y eventos de Microsoft Graph.With these, you can use Azure Functions to work with data, insights, and events from the Microsoft Graph.

La extensión de Microsoft Graph proporciona los siguientes enlaces:The Microsoft Graph extension provides the following bindings:

Esta es la información de referencia para desarrolladores de Azure Functions.This is reference information for Azure Functions developers. Si está familiarizado con Azure Functions, comience con los siguientes recursos:If you're new to Azure Functions, start with the following resources:

Nota

Los enlaces de Microsoft Graph se encuentran actualmente en versión preliminar para Azure Functions, versión 2.x.Microsoft Graph bindings are currently in preview for Azure Functions version 2.x. No se admiten en la versión de Functions 1.x.They are not supported in Functions version 1.x.

PaquetesPackages

El enlace de entrada del token de autenticación se proporciona en el paquete NuGet Microsoft.Azure.WebJobs.Extensions.AuthTokens.The auth token input binding is provided in the Microsoft.Azure.WebJobs.Extensions.AuthTokens NuGet package. El resto de los enlaces de Microsoft Graph se proporcionan en el paquete Microsoft.Azure.WebJobs.Extensions.MicrosoftGraph.The other Microsoft Graph bindings are provided in the Microsoft.Azure.WebJobs.Extensions.MicrosoftGraph package. El código fuente para los paquetes está en el repositorio de GitHub azure-functions-microsoftgraph-extension.Source code for the packages is in the azure-functions-microsoftgraph-extension GitHub repository.

En la siguiente tabla se explica cómo agregar compatibilidad para este enlace en cada entorno de desarrollo.The following table tells how to add support for this binding in each development environment.

Entorno de desarrolloDevelopment environment Para agregar compatibilidad enTo add support in
Functions 2.xFunctions 2.x
Desarrollo local: biblioteca de clases C#Local development - C# class library Instalación del paqueteInstall the package
Desarrollo local: script de C#, JavaScript, F#, Java y PythonLocal development - C# script, JavaScript, F#, Java and Python Registro de la extensiónRegister the extension
Desarrollo con PortalPortal development Instalación al agregar el enlace de salidaInstall when adding output binding

Para saber cómo actualizar las extensiones de enlace existentes en el portal sin tener que volver a publicar su proyecto de aplicación de función, consulte Actualización de las extensiones.To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

Configuración de las extensionesSetting up the extensions

Los enlaces de Microsoft Graph están disponibles a través de las extensiones de enlace.Microsoft Graph bindings are available through binding extensions. Las extensiones de enlace son componentes opcionales del tiempo de ejecución de Azure Functions.Binding extensions are optional components to the Azure Functions runtime. En esta sección se muestra cómo configurar las extensiones del token de autenticación y Microsoft Graph.This section shows how to set up the Microsoft Graph and auth token extensions.

Habilitar la versión preliminar de Functions 2.0Enabling Functions 2.0 preview

Las extensiones de enlace solo están disponibles para la versión preliminar de Azure Functions 2.0.Binding extensions are available only for Azure Functions 2.0 preview.

Para obtener información acerca de cómo establecer una aplicación de función para usar la versión preliminar 2.0 del runtime de Functions, consulte Selección de destino de las versiones del runtime de Functions.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.

Instalación de la extensiónInstalling the extension

Para instalar una extensión desde Azure Portal, navegue a una plantilla o a un enlace que haga referencia a ella.To install an extension from the Azure portal, navigate to either a template or binding that references it. Cree una nueva función y, en la pantalla de selección de plantillas, elija el escenario de "Microsoft Graph".Create a new function, and while in the template selection screen, choose the "Microsoft Graph" scenario. Seleccione una de las plantillas de este escenario.Select one of the templates from this scenario. Como alternativa, puede navegar a la pestaña "Integrar" de una función existente y seleccionar uno de los enlaces que se tratan en este artículo.Alternatively, you can navigate to the "Integrate" tab of an existing function and select one of the bindings covered in this article.

En ambos casos, aparecerá una advertencia que especifica la extensión que se va a instalar.In both cases, a warning will appear which specifies the extension to be installed. Haga clic en Instalar para obtener la extensión.Click Install to obtain the extension. Cada extensión solo puede instalarse una vez por cada aplicación de la función.Each extension only needs to be installed once per function app.

Nota

El proceso de instalación en el portal puede tardar hasta 10 minutos en un plan de consumo.The in-portal installation process can take up to 10 minutes on a consumption plan.

Si utiliza Visual Studio, puede obtener las extensiones mediante la instalación de los paquetes NuGet enumerados anteriormente en este artículo.If you are using Visual Studio, you can get the extensions by installing the NuGet packages that are listed earlier in this article.

Configuración de autenticación o autorizaciónConfiguring Authentication / Authorization

Los enlaces que se describen en este artículo requieren una identidad para usarlos.The bindings outlined in this article require an identity to be used. Esto permite que Microsoft Graph aplique permisos y audite interacciones.This allows the Microsoft Graph to enforce permissions and audit interactions. La identidad puede ser el acceso de un usuario a la aplicación o la propia aplicación.The identity can be a user accessing your application or the application itself. Para configurar esta identidad, configure Autenticación o autorización de App Service con Azure Active Directory.To configure this identity, set up App Service Authentication / Authorization with Azure Active Directory. También deberá solicitar los permisos del recurso que requieren sus funciones.You will also need to request any resource permissions your functions require.

Nota

La extensión de Microsoft Graph solo admite la autenticación de Azure AD.The Microsoft Graph extension only supports Azure AD authentication. Los usuarios deben iniciar sesión con una cuenta profesional o educativa.Users need to log in with a work or school account.

Si usa Azure Portal, verá una advertencia debajo del mensaje para instalar la extensión.If you're using the Azure portal, you'll see a warning below the prompt to install the extension. La advertencia le pedirá configurar la autenticación o autorización de App Service y solicitar cualquier permiso que requieran la plantilla o el enlace.The warning prompts you to configure App Service Authentication / Authorization and request any permissions the template or binding requires. Haga clic en Configurar Azure AD ahora o Agregar permisos ahora según corresponda.Click Configure Azure AD now or Add permissions now as appropriate.

Token de autenticaciónAuth token

Este enlace de entrada del token de autenticación obtiene un token de Azure AD para un recurso determinado y lo proporciona al código como una cadena.The auth token input binding gets an Azure AD token for a given resource and provides it to your code as a string. El recurso puede ser cualquiera para el que la aplicación tenga permisos.The resource can be any for which the application has permissions.

Esta sección contiene las siguientes subsecciones:This section contains the following subsections:

Token de autenticación: ejemploAuth token - example

Vea el ejemplo específico del lenguaje:See the language-specific example:

Token de autenticación: ejemplo de script de C#Auth token - C# script example

En el ejemplo siguiente se obtiene información sobre el perfil de usuario.The following example gets user profile information.

El archivo function.json define un desencadenador HTTP con un enlace de entrada de 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
}

El código de script de C# usa el token para realizar una llamada HTTP a Microsoft Graph y devuelve el 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 autenticación: ejemplo de JavaScriptAuth token - JavaScript example

En el ejemplo siguiente se obtiene información sobre el perfil de usuario.The following example gets user profile information.

El archivo function.json define un desencadenador HTTP con un enlace de entrada de 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
}

El código de JavaScript usa el token parea realizar una llamada HTTP a Microsoft Graph y devuelve el 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 autenticación: atributosAuth token - attributes

En las bibliotecas de clases de C#, use el atributo Token.In C# class libraries, use the Token attribute.

Token de autenticación: configuraciónAuth token - configuration

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo Token.The following table explains the binding configuration properties that you set in the function.json file and the Token attribute.

Propiedad de function.jsonfunction.json property Propiedad de atributoAttribute property DESCRIPCIÓNDescription
namename (Requerido): nombre de la variable que se usa en el código de función para el token de autenticación.Required - the variable name used in function code for the auth token. Consulte Uso de un enlace de entrada del token de autenticación desde el código.See Using an auth token input binding from code.
typetype Requerida: se debe establecer en token.Required - must be set to token.
directiondirection Requerida: se debe establecer en in.Required - must be set to in.
identityidentity IdentidadIdentity (Requerido): identidad que se usará para realizar la acción.Required - The identity that will be used to perform the action. Puede ser uno de los siguientes valores:Can be one of the following values:
  • userFromRequest: solo es válido con el desencadenador HTTP.userFromRequest - Only valid with HTTP trigger. Usa la identidad del usuario que realiza la llamada.Uses the identity of the calling user.
  • userFromId: usa la identidad de un usuario que inició sesión previamente con el identificador especificado.userFromId - Uses the identity of a previously logged-in user with the specified ID. Consulte la propiedad userId.See the userId property.
  • userFromToken: usa la identidad representada por el token especificado.userFromToken - Uses the identity represented by the specified token. Consulte la propiedad userToken.See the userToken property.
  • clientCredentials: usa la identidad de la aplicación de función.clientCredentials - Uses the identity of the function app.
userIduserId UserIdUserId Necesario si y solo si identity está establecido en userFromId.Needed if and only if identity is set to userFromId. Identificador de una entidad de seguridad de usuario asociado a un usuario que inició sesión previamente.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken Necesario si y solo si identity está establecido en userFromToken.Needed if and only if identity is set to userFromToken. Token válido para la aplicación de función.A token valid for the function app.
RecursoResource resourceresource Requerido: dirección URL de recursos de Azure AD para la que se solicita el token.Required - An Azure AD resource URL for which the token is being requested.

Token de autenticación: usoAuth token - usage

El enlace mismo no requiere ningún permiso de Azure AD, pero, según cómo se use el token, puede que necesite solicitar permisos adicionales.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. Compruebe los requisitos del recurso al que pretenda obtener acceso con el token.Check the requirements of the resource you intend to access with the token.

El token se presenta siempre al código como una cadena.The token is always presented to code as a string.

Nota

Al desarrollar localmente con las opciones userFromId, userFromToken o userFromRequest, se puede obtener manualmente el token necesario y especificarse en el encabezado de solicitud X-MS-TOKEN-AAD-ID-TOKEN desde una aplicación cliente que realiza la llamada.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 de ExcelExcel input

El enlace de entrada de la tabla de Excel lee el contenido de una tabla almacenada en OneDrive.The Excel table input binding reads the contents of an Excel table stored in OneDrive.

Esta sección contiene las siguientes subsecciones:This section contains the following subsections:

Entrada de Excel: ejemploExcel input - example

Vea el ejemplo específico del lenguaje:See the language-specific example:

Entrada de Excel: ejemplo de script de C#Excel input - C# script example

El archivo function.json siguiente define un desencadenador HTTP con un enlace de entrada de 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
}

El código de script de C# siguiente lee el contenido de la tabla especificada y lo devuelve al usuario: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 de Excel: ejemplo de JavaScriptExcel input - JavaScript example

El archivo function.json siguiente define un desencadenador HTTP con un enlace de entrada de 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
}

El código de script de JavaScript siguiente lee el contenido de la tabla especificada y lo devuelve al usuario.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 de Excel: atributosExcel input - attributes

En las bibliotecas de clases de C#, use el atributo Excel.In C# class libraries, use the Excel attribute.

Entrada de Excel: configuraciónExcel input - configuration

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo Excel.The following table explains the binding configuration properties that you set in the function.json file and the Excel attribute.

Propiedad de function.jsonfunction.json property Propiedad de atributoAttribute property DESCRIPCIÓNDescription
namename (Requerido): nombre de la variable que se usa en el código de función para la tabla de Excel.Required - the variable name used in function code for the Excel table. Consulte Uso de un enlace de entrada de la tabla de Excel desde el código.See Using an Excel table input binding from code.
typetype Requerida: se debe establecer en excel.Required - must be set to excel.
directiondirection Requerida: se debe establecer en in.Required - must be set to in.
identityidentity IdentidadIdentity (Requerido): identidad que se usará para realizar la acción.Required - The identity that will be used to perform the action. Puede ser uno de los siguientes valores:Can be one of the following values:
  • userFromRequest: solo es válido con el desencadenador HTTP.userFromRequest - Only valid with HTTP trigger. Usa la identidad del usuario que realiza la llamada.Uses the identity of the calling user.
  • userFromId: usa la identidad de un usuario que inició sesión previamente con el identificador especificado.userFromId - Uses the identity of a previously logged-in user with the specified ID. Consulte la propiedad userId.See the userId property.
  • userFromToken: usa la identidad representada por el token especificado.userFromToken - Uses the identity represented by the specified token. Consulte la propiedad userToken.See the userToken property.
  • clientCredentials: usa la identidad de la aplicación de función.clientCredentials - Uses the identity of the function app.
userIduserId UserIdUserId Necesario si y solo si identity está establecido en userFromId.Needed if and only if identity is set to userFromId. Identificador de una entidad de seguridad de usuario asociado a un usuario que inició sesión previamente.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken Necesario si y solo si identity está establecido en userFromToken.Needed if and only if identity is set to userFromToken. Token válido para la aplicación de función.A token valid for the function app.
pathpath PathPath (Requerido): ruta de acceso de OneDrive al libro de Excel.Required - the path in OneDrive to the Excel workbook.
worksheetNameworksheetName WorksheetNameWorksheetName Hoja de cálculo en la que se encuentra la tabla.The worksheet in which the table is found.
tableNametableName TableNameTableName El nombre de la tabla.The name of the table. Si no se especifica, se usará el contenido de la hoja de cálculo.If not specified, the contents of the worksheet will be used.

Entrada de Excel: usoExcel input - usage

Este enlace requiere los siguientes permisos de Azure AD:This binding requires the following Azure AD permissions:

RecursoResource PermisoPermission
Microsoft GraphMicrosoft Graph Leer los archivos de usuarioRead user files

El enlace expone los siguientes tipos de funciones. NET:The binding exposes the following types to .NET functions:

  • string[][]string[][]
  • Microsoft.Graph.WorkbookTableMicrosoft.Graph.WorkbookTable
  • Tipos de objeto personalizado (con el enlace de modelos estructurales)Custom object types (using structural model binding)

Salida de ExcelExcel output

Este enlace de salida de Excel modifica el contenido de una tabla de Excel almacenada en OneDrive.The Excel output binding modifies the contents of an Excel table stored in OneDrive.

Esta sección contiene las siguientes subsecciones:This section contains the following subsections:

Salida de Excel: ejemploExcel output - example

Vea el ejemplo específico del lenguaje:See the language-specific example:

Salida de Excel: ejemplo de script de C#Excel output - C# script example

En el ejemplo siguiente se agregan filas a una tabla de Excel.The following example adds rows to an Excel table.

El archivo function.json define un desencadenador HTTP con un enlace de salida de 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
}

El código de script de C# agrega una nueva fila a la tabla (se supone que solo tiene una columna) basándose en la entrada desde la cadena 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;
}

Salida de Excel: ejemplo de JavaScriptExcel output - JavaScript example

En el ejemplo siguiente se agregan filas a una tabla de Excel.The following example adds rows to an Excel table.

El archivo function.json define un desencadenador HTTP con un enlace de salida de 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
}

El código de JavaScript siguiente agrega una nueva fila a la tabla (se supone que solo tiene una columna) basándose en la entrada desde la cadena 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();
};

Salida de Excel: atributosExcel output - attributes

En las bibliotecas de clases de C#, use el atributo Excel.In C# class libraries, use the Excel attribute.

Salida de Excel: configuraciónExcel output - configuration

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo Excel.The following table explains the binding configuration properties that you set in the function.json file and the Excel attribute.

Propiedad de function.jsonfunction.json property Propiedad de atributoAttribute property DESCRIPCIÓNDescription
namename (Requerido): nombre de la variable que se usa en el código de función para el token de autenticación.Required - the variable name used in function code for the auth token. Consulte Uso de un enlace de salida de la tabla de Excel desde el código.See Using an Excel table output binding from code.
typetype Requerida: se debe establecer en excel.Required - must be set to excel.
directiondirection Requerida: se debe establecer en out.Required - must be set to out.
identityidentity IdentidadIdentity (Requerido): identidad que se usará para realizar la acción.Required - The identity that will be used to perform the action. Puede ser uno de los siguientes valores:Can be one of the following values:
  • userFromRequest: solo es válido con el desencadenador HTTP.userFromRequest - Only valid with HTTP trigger. Usa la identidad del usuario que realiza la llamada.Uses the identity of the calling user.
  • userFromId: usa la identidad de un usuario que inició sesión previamente con el identificador especificado.userFromId - Uses the identity of a previously logged-in user with the specified ID. Consulte la propiedad userId.See the userId property.
  • userFromToken: usa la identidad representada por el token especificado.userFromToken - Uses the identity represented by the specified token. Consulte la propiedad userToken.See the userToken property.
  • clientCredentials: usa la identidad de la aplicación de función.clientCredentials - Uses the identity of the function app.
UserIdUserId userIduserId Necesario si y solo si identity está establecido en userFromId.Needed if and only if identity is set to userFromId. Identificador de una entidad de seguridad de usuario asociado a un usuario que inició sesión previamente.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken Necesario si y solo si identity está establecido en userFromToken.Needed if and only if identity is set to userFromToken. Token válido para la aplicación de función.A token valid for the function app.
pathpath PathPath (Requerido): ruta de acceso de OneDrive al libro de Excel.Required - the path in OneDrive to the Excel workbook.
worksheetNameworksheetName WorksheetNameWorksheetName Hoja de cálculo en la que se encuentra la tabla.The worksheet in which the table is found.
tableNametableName TableNameTableName El nombre de la tabla.The name of the table. Si no se especifica, se usará el contenido de la hoja de cálculo.If not specified, the contents of the worksheet will be used.
updateTypeupdateType UpdateTypeUpdateType (Requerido): tipo de cambio para realizar en la tabla.Required - The type of change to make to the table. Puede ser uno de los siguientes valores:Can be one of the following values:
  • update: reemplaza el contenido de la tabla en OneDrive.update - Replaces the contents of the table in OneDrive.
  • append: agrega la carga al final de la tabla de OneDrive mediante la creación de nuevas filas.append - Adds the payload to the end of the table in OneDrive by creating new rows.

Salida de Excel: usoExcel output - usage

Este enlace requiere los siguientes permisos de Azure AD:This binding requires the following Azure AD permissions:

RecursoResource PermisoPermission
Microsoft GraphMicrosoft Graph Tener acceso completo a los archivos del usuarioHave full access to user files

El enlace expone los siguientes tipos de funciones. 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 objeto personalizado (con el enlace de modelos estructurales)Custom object types (using structural model binding)

Entrada de archivoFile input

El enlace de entrada de archivo de OneDrive lee el contenido de un archivo almacenado en OneDrive.The OneDrive File input binding reads the contents of a file stored in OneDrive.

Esta sección contiene las siguientes subsecciones:This section contains the following subsections:

Entrada de archivo: ejemploFile input - example

Vea el ejemplo específico del lenguaje:See the language-specific example:

Entrada de archivo: ejemplo de script de C#File input - C# script example

El ejemplo siguiente lee un archivo que se almacena en OneDrive.The following example reads a file that is stored in OneDrive.

El archivo function.json define un desencadenador HTTP con un enlace de entrada de archivo de 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
}

El código de script de C# lee el archivo especificado en la cadena de consulta y registra su longitud: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 de archivo: ejemplo de JavaScriptFile input - JavaScript example

El ejemplo siguiente lee un archivo que se almacena en OneDrive.The following example reads a file that is stored in OneDrive.

El archivo function.json define un desencadenador HTTP con un enlace de entrada de archivo de 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
}

El código de JavaScript siguiente lee el archivo especificado en la cadena de consulta y devuelve su longitud.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 de archivo: atributosFile input - attributes

En las bibliotecas de clases de C#, use el atributo OneDrive.In C# class libraries, use the OneDrive attribute.

Entrada de archivo: configuraciónFile input - configuration

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo OneDrive.The following table explains the binding configuration properties that you set in the function.json file and the OneDrive attribute.

Propiedad de function.jsonfunction.json property Propiedad de atributoAttribute property DESCRIPCIÓNDescription
namename (Requerido): nombre de la variable que se usa en el código de función para el archivo.Required - the variable name used in function code for the file. Consulte Configuración de un enlace de entrada del archivo de OneDrive.See Using a OneDrive file input binding from code.
typetype Requerida: se debe establecer en onedrive.Required - must be set to onedrive.
directiondirection Requerida: se debe establecer en in.Required - must be set to in.
identityidentity IdentidadIdentity (Requerido): identidad que se usará para realizar la acción.Required - The identity that will be used to perform the action. Puede ser uno de los siguientes valores:Can be one of the following values:
  • userFromRequest: solo es válido con el desencadenador HTTP.userFromRequest - Only valid with HTTP trigger. Usa la identidad del usuario que realiza la llamada.Uses the identity of the calling user.
  • userFromId: usa la identidad de un usuario que inició sesión previamente con el identificador especificado.userFromId - Uses the identity of a previously logged-in user with the specified ID. Consulte la propiedad userId.See the userId property.
  • userFromToken: usa la identidad representada por el token especificado.userFromToken - Uses the identity represented by the specified token. Consulte la propiedad userToken.See the userToken property.
  • clientCredentials: usa la identidad de la aplicación de función.clientCredentials - Uses the identity of the function app.
userIduserId UserIdUserId Necesario si y solo si identity está establecido en userFromId.Needed if and only if identity is set to userFromId. Identificador de una entidad de seguridad de usuario asociado a un usuario que inició sesión previamente.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken Necesario si y solo si identity está establecido en userFromToken.Needed if and only if identity is set to userFromToken. Token válido para la aplicación de función.A token valid for the function app.
pathpath PathPath (Requerido): ruta de acceso de OneDrive al archivo.Required - the path in OneDrive to the file.

Entrada de archivo: usoFile input - usage

Este enlace requiere los siguientes permisos de Azure AD:This binding requires the following Azure AD permissions:

RecursoResource PermisoPermission
Microsoft GraphMicrosoft Graph Leer los archivos de usuarioRead user files

El enlace expone los siguientes tipos de funciones. NET:The binding exposes the following types to .NET functions:

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

Salida de archivoFile output

El enlace de salida de archivo de OneDrive modifica el contenido de un archivo almacenado en OneDrive.The OneDrive file output binding modifies the contents of a file stored in OneDrive.

Esta sección contiene las siguientes subsecciones:This section contains the following subsections:

Salida de archivo: ejemploFile output - example

Vea el ejemplo específico del lenguaje:See the language-specific example:

Salida de archivo: ejemplo de script de C#File output - C# script example

El ejemplo siguiente escribe en un archivo que se almacena en OneDrive.The following example writes to a file that is stored in OneDrive.

El archivo function.json define un desencadenador HTTP con un enlace de salida de 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
}

El código de script de C# obtiene texto de la cadena de consulta y lo escribe en un archivo de texto (FunctionsText.txt tal como se define en el ejemplo anterior) en la raíz de OneDrive del llamador: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;
}

Salida de archivo: ejemplo de JavaScriptFile output - JavaScript example

El ejemplo siguiente escribe en un archivo que se almacena en OneDrive.The following example writes to a file that is stored in OneDrive.

El archivo function.json define un desencadenador HTTP con un enlace de salida de 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
}

El código de JavaScript obtiene texto de la cadena de consulta y lo escribe en un archivo de texto (FunctionsTest.txt tal como se define en la configuración anterior) en la raíz de OneDrive del llamador.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();
};

Salida de archivo: atributosFile output - attributes

En las bibliotecas de clases de C#, use el atributo OneDrive.In C# class libraries, use the OneDrive attribute.

Salida de archivo: configuraciónFile output - configuration

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo OneDrive.The following table explains the binding configuration properties that you set in the function.json file and the OneDrive attribute.

Propiedad de function.jsonfunction.json property Propiedad de atributoAttribute property DESCRIPCIÓNDescription
namename (Requerido): nombre de la variable que se usa en el código de función del archivo.Required - the variable name used in function code for file. Consulte Uso de un enlace de salida del archivo de OneDrive desde código.See Using a OneDrive file output binding from code.
typetype Requerida: se debe establecer en onedrive.Required - must be set to onedrive.
directiondirection Requerida: se debe establecer en out.Required - must be set to out.
identityidentity IdentidadIdentity (Requerido): identidad que se usará para realizar la acción.Required - The identity that will be used to perform the action. Puede ser uno de los siguientes valores:Can be one of the following values:
  • userFromRequest: solo es válido con el desencadenador HTTP.userFromRequest - Only valid with HTTP trigger. Usa la identidad del usuario que realiza la llamada.Uses the identity of the calling user.
  • userFromId: usa la identidad de un usuario que inició sesión previamente con el identificador especificado.userFromId - Uses the identity of a previously logged-in user with the specified ID. Consulte la propiedad userId.See the userId property.
  • userFromToken: usa la identidad representada por el token especificado.userFromToken - Uses the identity represented by the specified token. Consulte la propiedad userToken.See the userToken property.
  • clientCredentials: usa la identidad de la aplicación de función.clientCredentials - Uses the identity of the function app.
UserIdUserId userIduserId Necesario si y solo si identity está establecido en userFromId.Needed if and only if identity is set to userFromId. Identificador de una entidad de seguridad de usuario asociado a un usuario que inició sesión previamente.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken Necesario si y solo si identity está establecido en userFromToken.Needed if and only if identity is set to userFromToken. Token válido para la aplicación de función.A token valid for the function app.
pathpath PathPath (Requerido): ruta de acceso de OneDrive al archivo.Required - the path in OneDrive to the file.

Salida de archivo: usoFile output - usage

Este enlace requiere los siguientes permisos de Azure AD:This binding requires the following Azure AD permissions:

RecursoResource PermisoPermission
Microsoft GraphMicrosoft Graph Tener acceso completo a los archivos del usuarioHave full access to user files

El enlace expone los siguientes tipos de funciones. NET:The binding exposes the following types to .NET functions:

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

Salida de OutlookOutlook output

El enlace de salida de mensajes de Outlook envía un mensaje de correo electrónico a través de Outlook.The Outlook message output binding sends a mail message through Outlook.

Esta sección contiene las siguientes subsecciones:This section contains the following subsections:

Salida de Outlook: ejemploOutlook output - example

Vea el ejemplo específico del lenguaje:See the language-specific example:

Salida de Outlook: ejemplo de script de C#Outlook output - C# script example

El ejemplo siguiente envía un correo electrónico a través de Outlook.The following example sends an email through Outlook.

El archivo function.json define un desencadenador HTTP con un enlace de salida de mensajes de 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
}

El código de script de C# envía un correo desde el llamador a un destinatario especificado en la cadena 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;}
}

Salida de Outlook: ejemplo de JavaScriptOutlook output - JavaScript example

El ejemplo siguiente envía un correo electrónico a través de Outlook.The following example sends an email through Outlook.

El archivo function.json define un desencadenador HTTP con un enlace de salida de mensajes de 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
}

El código de script de JavaScript envía un correo desde el llamador a un destinatario especificado en la cadena 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();
};

Salida de Outlook: atributosOutlook output - attributes

En las bibliotecas de clases de C#, use el atributo Outlook.In C# class libraries, use the Outlook attribute.

Salida de Outlook: configuraciónOutlook output - configuration

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo Outlook.The following table explains the binding configuration properties that you set in the function.json file and the Outlook attribute.

Propiedad de function.jsonfunction.json property Propiedad de atributoAttribute property DESCRIPCIÓNDescription
namename (Requerido): nombre de la variable que se usa en el código de función del mensaje de correo.Required - the variable name used in function code for the mail message. Consulte Configuración de un enlace de salida del archivo de OneDrive.See Using an Outlook message output binding from code.
typetype Requerida: se debe establecer en outlook.Required - must be set to outlook.
directiondirection Requerida: se debe establecer en out.Required - must be set to out.
identityidentity IdentidadIdentity (Requerido): identidad que se usará para realizar la acción.Required - The identity that will be used to perform the action. Puede ser uno de los siguientes valores:Can be one of the following values:
  • userFromRequest: solo es válido con el desencadenador HTTP.userFromRequest - Only valid with HTTP trigger. Usa la identidad del usuario que realiza la llamada.Uses the identity of the calling user.
  • userFromId: usa la identidad de un usuario que inició sesión previamente con el identificador especificado.userFromId - Uses the identity of a previously logged-in user with the specified ID. Consulte la propiedad userId.See the userId property.
  • userFromToken: usa la identidad representada por el token especificado.userFromToken - Uses the identity represented by the specified token. Consulte la propiedad userToken.See the userToken property.
  • clientCredentials: usa la identidad de la aplicación de función.clientCredentials - Uses the identity of the function app.
userIduserId UserIdUserId Necesario si y solo si identity está establecido en userFromId.Needed if and only if identity is set to userFromId. Identificador de una entidad de seguridad de usuario asociado a un usuario que inició sesión previamente.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken Necesario si y solo si identity está establecido en userFromToken.Needed if and only if identity is set to userFromToken. Token válido para la aplicación de función.A token valid for the function app.

Salida de Outlook: usoOutlook output - usage

Este enlace requiere los siguientes permisos de Azure AD:This binding requires the following Azure AD permissions:

RecursoResource PermisoPermission
Microsoft GraphMicrosoft Graph Enviar correo como usuarioSend mail as user

El enlace expone los siguientes tipos de funciones. 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 objeto personalizado (con el enlace de modelos estructurales)Custom object types (using structural model binding)

webhooksWebhooks

Los webhooks le permiten reaccionar antes los eventos de Microsoft Graph.Webhooks allow you to react to events in the Microsoft Graph. Para admitir webhooks, las funciones son necesarias para crear suscripciones de weebhook, actualizarlas y reaccionar ante ellas.To support webhooks, functions are needed to create, refresh, and react to webhook subscriptions. Una solución de webhook completa requiere una combinación de los enlaces siguientes:A complete webhook solution requires a combination of the following bindings:

Los enlaces en sí mismos no requieren ningún permiso de Azure AD, pero es necesario solicitar permisos relevantes para el tipo de recurso ante el que va a reaccionar.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 obtener una lista de los permisos necesarios para cada tipo de recurso, consulte permisos de suscripción.For a list of which permissions are needed for each resource type, see subscription permissions.

Para más información sobre los webhooks, consulte Trabajar con Intune en Microsoft Graph.For more information about webhooks, see Working with webhooks in Microsoft Graph.

Desencadenador de webhookWebhook trigger

El desencadenador de webhook de Microsoft Graph permite que una función reaccione ante un webhook entrante desde Microsoft Graph.The Microsoft Graph webhook trigger allows a function to react to an incoming webhook from the Microsoft Graph. Cada instancia de este desencadenador puede reaccionar a un tipo de recurso de Microsoft Graph.Each instance of this trigger can react to one Microsoft Graph resource type.

Esta sección contiene las siguientes subsecciones:This section contains the following subsections:

Desencadenador de webhook: ejemploWebhook trigger - example

Vea el ejemplo específico del lenguaje:See the language-specific example:

Desencadenador de webhook: ejemplo de script de C#Webhook trigger - C# script example

En el ejemplo siguiente se controlan los webhooks para los mensajes de Outlook entrantes.The following example handles webhooks for incoming Outlook messages. Para usar un desencadenador de webhook, debe crear una suscripción y puede actualizar la suscripción para evitar que expire.To use a webhook trigger you create a subscription, and you can refresh the subscription to prevent it from expiring.

El archivo function.json define un desencadenador de webhook:The function.json file defines a webhook trigger:

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

El código de script de C# reacciona ante los mensajes de correo entrantes y registra el cuerpo de los enviados por el destinatario que contienen "Azure Functions" en el asunto: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}");
    }
}

Desencadenador de webhook: ejemplo de JavaScriptWebhook trigger - JavaScript example

En el ejemplo siguiente se controlan los webhooks para los mensajes de Outlook entrantes.The following example handles webhooks for incoming Outlook messages. Para usar un desencadenador de webhook, debe crear una suscripción y puede actualizar la suscripción para evitar que expire.To use a webhook trigger you create a subscription, and you can refresh the subscription to prevent it from expiring.

El archivo function.json define un desencadenador de webhook:The function.json file defines a webhook trigger:

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

El código de JavaScript reacciona ante los mensajes de correo entrantes y registra el cuerpo de los enviados por el destinatario que contienen "Azure Functions" en el asunto: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();
};

Desencadenador de webhook: atributosWebhook trigger - attributes

En las bibliotecas de clases de C#, use el atributo GraphWebHookTrigger.In C# class libraries, use the GraphWebHookTrigger attribute.

Desencadenador de webhook: configuraciónWebhook trigger - configuration

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo GraphWebHookTrigger.The following table explains the binding configuration properties that you set in the function.json file and the GraphWebHookTrigger attribute.

Propiedad de function.jsonfunction.json property Propiedad de atributoAttribute property DESCRIPCIÓNDescription
namename (Requerido): nombre de la variable que se usa en el código de función del mensaje de correo.Required - the variable name used in function code for the mail message. Consulte Configuración de un enlace de salida del archivo de OneDrive.See Using an Outlook message output binding from code.
typetype Requerida: se debe establecer en graphWebhook.Required - must be set to graphWebhook.
directiondirection Requerida: se debe establecer en trigger.Required - must be set to trigger.
resourceTyperesourceType ResourceTypeResourceType (Requerido): recurso de Graph por el que esta función debería responder a webhooks.Required - the graph resource for which this function should respond to webhooks. Puede ser uno de los siguientes valores:Can be one of the following values:
  • #Microsoft.Graph.Message: cambios realizados en los mensajes de Outlook.#Microsoft.Graph.Message - changes made to Outlook messages.
  • #Microsoft.Graph.DriveItem: cambios realizados en elementos raíz de OneDrive.#Microsoft.Graph.DriveItem - changes made to OneDrive root items.
  • #Microsoft.Graph.Contact : cambios realizados en los contactos personales de Outlook.#Microsoft.Graph.Contact - changes made to personal contacts in Outlook.
  • #Microsoft.Graph.Event: cambios realizados en los elementos de calendario de Outlook.#Microsoft.Graph.Event - changes made to Outlook calendar items.

Nota

Una aplicación de función solo puede tener una función registrada en un determinado valor resourceType.A function app can only have one function that is registered against a given resourceType value.

Desencadenador de webhook: usoWebhook trigger - usage

El enlace expone los siguientes tipos de funciones. NET:The binding exposes the following types to .NET functions:

  • Tipos de SDK de Microsoft Graph relacionados con el tipo de recurso, como Microsoft.Graph.Message o Microsoft.Graph.DriveItem.Microsoft Graph SDK types relevant to the resource type, such as Microsoft.Graph.Message or Microsoft.Graph.DriveItem.
  • Tipos de objeto personalizado (con el enlace de modelos estructurales)Custom object types (using structural model binding)

Entrada de webhookWebhook input

El enlace de entrada de webhook de Microsoft Graph le permite recuperar la lista de suscripciones que administra esta aplicación de función.The Microsoft Graph webhook input binding allows you to retrieve the list of subscriptions managed by this function app. El enlace lee desde el almacenamiento de la aplicación de función, por lo que no refleja el resto de suscripciones que se crean desde fuera de la aplicación.The binding reads from function app storage, so it does not reflect other subscriptions created from outside the app.

Esta sección contiene las siguientes subsecciones:This section contains the following subsections:

Entrada de webhook: ejemploWebhook input - example

Vea el ejemplo específico del lenguaje:See the language-specific example:

Entrada de webhook: ejemplo de script de C#Webhook input - C# script example

El ejemplo siguiente obtiene todas las suscripciones del usuario que realiza la llamada y las elimina.The following example gets all subscriptions for the calling user and deletes them.

El archivo function.json define un desencadenador HTTP con un enlace de entrada de suscripción y un enlace de salida de suscripción que usa la acción de eliminación: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
}

El código de script de C# obtiene las suscripciones y las elimina: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: ejemplo de JavaScriptWebhook input - JavaScript example

El ejemplo siguiente obtiene todas las suscripciones del usuario que realiza la llamada y las elimina.The following example gets all subscriptions for the calling user and deletes them.

El archivo function.json define un desencadenador HTTP con un enlace de entrada de suscripción y un enlace de salida de suscripción que usa la acción de eliminación: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
}

El código de JavaScript obtiene las suscripciones y las elimina: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

En las bibliotecas de clases de C#, use el atributo GraphWebHookSubscription.In C# class libraries, use the GraphWebHookSubscription attribute.

Entrada de webhook: configuraciónWebhook input - configuration

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo GraphWebHookSubscription.The following table explains the binding configuration properties that you set in the function.json file and the GraphWebHookSubscription attribute.

Propiedad de function.jsonfunction.json property Propiedad de atributoAttribute property DESCRIPCIÓNDescription
namename (Requerido): nombre de la variable que se usa en el código de función del mensaje de correo.Required - the variable name used in function code for the mail message. Consulte Configuración de un enlace de salida del archivo de OneDrive.See Using an Outlook message output binding from code.
typetype Requerida: se debe establecer en graphWebhookSubscription.Required - must be set to graphWebhookSubscription.
directiondirection Requerida: se debe establecer en in.Required - must be set to in.
filterfilter FilterFilter Si se establece en userFromRequest, el enlace solo recuperará las suscripciones propiedad del usuario que realiza la llamada (válido únicamente con desencadenador 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

El enlace expone los siguientes tipos de funciones. NET:The binding exposes the following types to .NET functions:

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

Salida de webhookWebhook output

El enlace de salida de suscripción de webhook le permite crear, eliminar y actualizar las suscripciones de webhook en Microsoft Graph.The webhook subscription output binding allows you to create, delete, and refresh webhook subscriptions in the Microsoft Graph.

Esta sección contiene las siguientes subsecciones:This section contains the following subsections:

Salida de webhook: ejemploWebhook output - example

Vea el ejemplo específico del lenguaje:See the language-specific example:

Salida de webhook: ejemplo de script de C#Webhook output - C# script example

El ejemplo siguiente crea una suscripción.The following example creates a subscription. Puede actualizar la suscripción para evitar que expire.You can refresh the subscription to prevent it from expiring.

El archivo function.json define un desencadenador HTTP con un enlace de salida de suscripción y que usa una acción de creación: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
}

El código de script de C# siguiente registra un webhook que enviará una notificación a esta aplicación de función cuando el usuario que realiza la llamada reciba un mensaje de 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);
}

Salida de webhook: ejemplo de JavaScriptWebhook output - JavaScript example

El ejemplo siguiente crea una suscripción.The following example creates a subscription. Puede actualizar la suscripción para evitar que expire.You can refresh the subscription to prevent it from expiring.

El archivo function.json define un desencadenador HTTP con un enlace de salida de suscripción y que usa una acción de creación: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
}

El código de JavaScript registra un webhook que enviará una notificación a esta aplicación de función cuando el usuario que realiza la llamada reciba un mensaje de 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();
};

Salida de webhook: atributosWebhook output - attributes

En las bibliotecas de clases de C#, use el atributo GraphWebHookSubscription.In C# class libraries, use the GraphWebHookSubscription attribute.

Salida de webhook: configuraciónWebhook output - configuration

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo GraphWebHookSubscription.The following table explains the binding configuration properties that you set in the function.json file and the GraphWebHookSubscription attribute.

Propiedad de function.jsonfunction.json property Propiedad de atributoAttribute property DESCRIPCIÓNDescription
namename (Requerido): nombre de la variable que se usa en el código de función del mensaje de correo.Required - the variable name used in function code for the mail message. Consulte Configuración de un enlace de salida del archivo de OneDrive.See Using an Outlook message output binding from code.
typetype Requerida: se debe establecer en graphWebhookSubscription.Required - must be set to graphWebhookSubscription.
directiondirection Requerida: se debe establecer en out.Required - must be set to out.
identityidentity IdentidadIdentity (Requerido): identidad que se usará para realizar la acción.Required - The identity that will be used to perform the action. Puede ser uno de los siguientes valores:Can be one of the following values:
  • userFromRequest: solo es válido con el desencadenador HTTP.userFromRequest - Only valid with HTTP trigger. Usa la identidad del usuario que realiza la llamada.Uses the identity of the calling user.
  • userFromId: usa la identidad de un usuario que inició sesión previamente con el identificador especificado.userFromId - Uses the identity of a previously logged-in user with the specified ID. Consulte la propiedad userId.See the userId property.
  • userFromToken: usa la identidad representada por el token especificado.userFromToken - Uses the identity represented by the specified token. Consulte la propiedad userToken.See the userToken property.
  • clientCredentials: usa la identidad de la aplicación de función.clientCredentials - Uses the identity of the function app.
userIduserId UserIdUserId Necesario si y solo si identity está establecido en userFromId.Needed if and only if identity is set to userFromId. Identificador de una entidad de seguridad de usuario asociado a un usuario que inició sesión previamente.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken Necesario si y solo si identity está establecido en userFromToken.Needed if and only if identity is set to userFromToken. Token válido para la aplicación de función.A token valid for the function app.
actionaction AcciónAction (Requerido): especifica la acción que debe realizar el enlace.Required - specifies the action the binding should perform. Puede ser uno de los siguientes valores:Can be one of the following values:
  • create: registra una suscripción nueva.create - Registers a new subscription.
  • delete: elimina una determinada suscripción.delete - Deletes a specified subscription.
  • refresh: actualiza una determinada suscripción para impedir que expire.refresh - Refreshes a specified subscription to keep it from expiring.
subscriptionResourcesubscriptionResource SubscriptionResourceSubscriptionResource Necesario si y solo si action está establecido en create.Needed if and only if the action is set to create. Especifica el recurso de Microsoft Graph que se va a supervisar para los cambios.Specifies the Microsoft Graph resource that will be monitored for changes. Consulte Trabajar con Intune en Microsoft Graph.See Working with webhooks in Microsoft Graph.
changeTypechangeType ChangeTypeChangeType Necesario si y solo si action está establecido en create.Needed if and only if the action is set to create. Indica el tipo de cambio en el recurso suscrito que generará una notificación.Indicates the type of change in the subscribed resource that will raise a notification. Los valores admitidos son: created, updated y deleted.The supported values are: created, updated, deleted. Pueden combinarse varios valores mediante una lista separada por comas.Multiple values can be combined using a comma-separated list.

Salida de webhook: usoWebhook output - usage

El enlace expone los siguientes tipos de funciones. NET:The binding exposes the following types to .NET functions:

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

Actualización de suscripción de webhookWebhook subscription refresh

Existen dos enfoques para la actualización de las suscripciones:There are two approaches to refreshing subscriptions:

  • Use la identidad de la aplicación para tratar todas las suscripciones.Use the application identity to deal with all subscriptions. Esto requerirá el consentimiento de un administrador de Azure Active Directory. Esto puede usarse por todos los idiomas admitidos por Azure Functions.This will require consent from an Azure Active Directory admin. This can be used by all languages supported by Azure Functions.
  • Use la identidad asociada con cada suscripción enlazando manualmente cada identificador de usuario.Use the identity associated with each subscription by manually binding each user ID. Será necesario código personalizado para realizar el enlace.This will require some custom code to perform the binding. Solo pueden usarlo funciones. NET.This can only be used by .NET functions.

En esta sección se incluye un ejemplo de cada uno de estos enfoques:This section contains an example for each of these approaches:

Actualización de suscripción de webhook: ejemplo de identidad de aplicaciónWebhook Subscription refresh - app identity example

Vea el ejemplo específico del lenguaje:See the language-specific example:

Actualización de identidad de aplicación: ejemplo de script de C#App identity refresh - C# script example

En el ejemplo siguiente se usa la identidad de aplicación para actualizar una suscripción.The following example uses the application identity to refresh a subscription.

El archivo function.json define un desencadenador de temporizador con un enlace de entrada de suscripción y un enlace de salida de suscripción: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
}

El código de script de C# actualiza las suscripciones: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);
    }
}

Actualización de identidad de aplicación: ejemplo de script de C#App identity refresh - C# script example

En el ejemplo siguiente se usa la identidad de aplicación para actualizar una suscripción.The following example uses the application identity to refresh a subscription.

El archivo function.json define un desencadenador de temporizador con un enlace de entrada de suscripción y un enlace de salida de suscripción: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
}

El código de JavaScript actualiza las suscripciones: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();
};

Actualización de suscripción de webhook: ejemplo de identidad de usuarioWebhook Subscription refresh - user identity example

En el ejemplo siguiente se usa la identidad de usuario para actualizar una suscripción.The following example uses the user identity to refresh a subscription.

El archivo function.json define un desencadenador de temporizador y difiere el enlace de entrada de suscripción al código de función: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
}

El código de script de C# actualiza las suscripciones y crea el enlace de salida en el código, usando la identidad de cada usuario: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;}
}

Pasos siguientesNext steps