Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Servicios de terceros

Configurar Webhooks de servicio

Importante

Servicios de terceros y notificaciones push obsoletos

Los servicios de terceros y las notificaciones push en App Services han quedado obsoletos en favor de la creación de puntos finales HTTP que usan dependencias externas en funciones.

Webhooks se han renombrado a HTTPS Endpoints sin cambios en el comportamiento. Debe migrar los Webhooks existentes.

Los servicios existentes continuarán funcionando hasta el de septiembre 30 2025de.

Dado que los servicios de terceros y las notificaciones push ya no se utilizan, se han eliminado de forma predeterminada de la interfaz de usuario de App Services. Si necesita administrar un servicio de terceros o una notificación push existente, puede volver a agregar las configuraciones a la interfaz de usuario siguiendo estos pasos:

  • En la navegación izquierda, debajo del Manage sección, haga clic en App Settings.

  • Habilite el interruptor junto a Temporarily Re-Enable 3rd Party Services y luego guarde los cambios.

Some external services allow you to create incoming webhooks that external clients can call over HTTP. You can create webhooks for these services from the App Services UI or with App Services CLI. Select the tab below that corresponds to the method you want to use.

1

Los webhooks entrantes se limitan a servicios individuales. Puedes crear y administrar un webhook desde su página de servicio asociada en la interfaz de usuario de App Services.

Para crear un webhook entrante:

  1. Haga clic en Services en el menú de navegación de la izquierda.

  2. Haga clic en el servicio para el cual desea agregar un webhook entrante.

  3. Seleccione la pestaña Incoming Webhooks para el servicio.

  4. Haga clic en Add Incoming Webhook. Servicios de aplicación te redirigirá a la pantalla Settings para el nuevo webhook.

2

Introduzca un nombre único e identificativo para el webhook en el campo Webhook Name. Este nombre debe ser distinto al de cualquier otro webhook que haya creado para el servicio.

3

Las funciones de Atlas, incluidos los webhooks, siempre se ejecutan en el contexto de un usuario específico de la aplicación o como usuario del sistema, lo que omite las reglas. Para configurar el usuario de ejecución del webhook, especifique el tipo de autenticación que App Services debe usar para el webhook.

Tipo de autenticación
Descripción

Autenticación de aplicaciones

Este tipo de autenticación configura un webhook para que se ejecute en el contexto de un usuario de la aplicación existente, especificado en cada solicitud entrante. Las solicitudes entrantes deben incluir las credenciales del proveedor de autenticación del usuario en el cuerpo o en los encabezados de la solicitud.

Los siguientes ejemplos muestran los nombres de campo y los valores para cada proveedor de autenticación compatible:

{
"email": "<User's Email Address>",
"password": "<User's Password>"
}
{
"api-key": "<User's API Key>"
}
{
"jwtTokenString": "<User's JWT Token>"
}

Importante

No utilice campos de encabezado y cuerpo al mismo tiempo

Si una solicitud incluye credenciales tanto en los encabezados como en el cuerpo de la solicitud, App Services arroja un error y no ejecuta la función.

Nota

Usuarios de la aplicación

Puede configurar un webhook que utilice la autenticación de la aplicación para realizar trabajo adicional relacionado con el usuario para cada solicitud:

  • Si Fetch Custom User Data habilita, App Services consulta los datos de usuario personalizados del usuario solicitante y, si existen, expone los datos como un objeto en el context.user.custom_data propiedad.

  • Si habilita Create User Upon Authentication, App Services creará automáticamente un nuevo usuario basado en las credenciales proporcionadas si no coinciden con las de un usuario ya existente. El proveedor de autenticación correspondiente a las credenciales debe estar habilitado al momento de la solicitud para crear un nuevo usuario.

Sistema

Este tipo de autenticación configura un webhook para que se ejecute como el usuario del sistema, que tiene acceso total a las APIs de MongoDB CRUD y Agregación y no está sujeto a reglas, roles ni permisos.

ID de usuario

Este tipo de autenticación configura un webhook para que siempre se ejecute como un usuario de aplicación específico.

Guión

Este tipo de autenticación configura un webhook para que se ejecute como un usuario específico de la aplicación, determinado por el resultado de una función personalizada que usted defina. La función debe devolver la cadena de un usuario específico id o puede especificar un usuario del sistema { "runAsSystem": true } devolviendo.

La entrada del tipo de autenticación del usuario en la interfaz de usuario
haga clic para ampliar
4

Puede exigir que las solicitudes entrantes utilicen un método específico Método HTTPo puede aceptar todos los métodos HTTP y manejar cada uno individualmente en la función webhook inspeccionando la httpMethod propiedad en el objeto context.request, como en la siguiente función de ejemplo:

exports = function(payload, response) {
switch(context.request.httpMethod) {
case "GET": { /* Handle GET requests */ }
case "POST": { /* Handle POST requests */ }
case "PUT": { /* Handle PUT requests */ }
case "DELETE": { /* Handle DELETE requests */ }
case "PATCH": { /* Handle PATCH requests */ }
default: {}
}
}
The HTTP method dropdown input in the UI
5

Puede enviar una respuesta HTTP configurable a servicios externos que llaman al webhook.

Si Respond With Result habilita, el webhook responderá a las solicitudes entrantes con una respuesta HTTP 200 básica que incluye el valor de retorno de la función del webhook como su body campo. Puede configurar una respuesta HTTP personalizada desde la función del webhook usando el response objeto que App Services pasa automáticamente como segundo argumento.

The respond with result toggle in the UI
haga clic para ampliar
6

Puedes autorizar solicitudes dinámicamente según el contenido de cada una definiendo una Can Evaluate expresión. App Services evalúa la expresión para cada solicitud entrante que recibe el webhook. Si no especificas una expresión, App Services autoriza automáticamente todas las solicitudes entrantes autenticadas.

La expresión puede expandir variables de expresión estándar, incluida la %%request expansión.

La entrada de expresión JSON del webhook puede evaluarse en la interfaz de usuario
haga clic para ampliar
7

Para validar que una solicitud de webhook se envió desde una fuente confiable, algunos servicios externos requieren que las solicitudes entrantes incorporen una cadena secreta de una de varias maneras prescritas. Otros servicios, como el servicio HTTP, permiten solicitar la validación de la solicitud de forma opcional.

Si su webhook requiere validación de solicitud:

  1. Seleccione el método de validación de la solicitud.

  2. Introduce una string Secret para usar en el proceso de validación de la solicitud.

La entrada secreta de validación de solicitud en la interfaz de usuario
haga clic para ampliar
8

Una vez configurado el webhook, solo queda escribir la función que se ejecuta al llamarlo. App Services pasa automáticamente dos objetos como argumentos de la función del webhook:

Argument
Descripción

payload

Una representación EJSON de la carga útil de la solicitud entrante. El contenido del documento del payload variará dependiendo del servicio y evento que haya causado la activación de un webhook. Para obtener una descripción del objeto payload para un servicio específico, consulta la página de referencia de ese servicio.

response

Un objeto de respuesta HTTP que configura la respuesta al cliente que llamó al webhook. Este objeto incluye métodos que permiten configurar los encabezados, el cuerpo y el código de estado de la respuesta. Llamar a cualquiera de estos métodos anula el comportamiento predeterminado de la respuesta.

Puede utilizar la siguiente función de webhook como base para su propio webhook:

exports = async function (payload, response) {
// Convert the webhook body from BSON to an EJSON object
const body = EJSON.parse(payload.body.text());
// Execute application logic, such as working with MongoDB
if (body.someField) {
const mdb = context.services.get("mongodb-atlas");
const requests = mdb.db("demo").collection("requests");
const { insertedId } = await requests.insertOne({
someField: body.someField,
});
// Respond with an affirmative result
response.setStatusCode(200);
response.setBody(`Successfully saved "someField" with _id: ${insertedId}.`);
} else {
// Respond with a malformed request error
response.setStatusCode(400);
response.setBody(`Could not find "someField" in the webhook request body.`);
}
// This return value does nothing because we already modified the response object.
// If you do not modify the response object and you enable *Respond with Result*,
// App Services will include this return value as the response body.
return { msg: "finished!" };
};

Nota

Si desea depurar una respuesta de función de webhook desde el editor de funciones, debe proporcionar manualmente el objeto de respuesta HTTP cuando ejecute la función.

exports(
{ body: "This document is the webhook payload" },
new HTTPResponse()
)
9

Debe guardar los cambios en su webhook antes de que surtan efecto. Para ello, haga clic en Save ya sea desde la ventana Settings, o desde el Function Editor.

Importante

Comprueba la versión de tu CLI

Este procedimiento utiliza la versión 2 de la CLI de Realm. Si tiene una versión anterior de realm-cli, actualice a la última versión o use el indicador --help para ver una lista de los comandos compatibles con su versión.

1

Para definir un webhook entrante con realm-cli, necesitas una copia local de los archivos de configuración de tu aplicación.

Para extraer una copia local de la última versión de su aplicación, ejecute lo siguiente:

realm-cli pull --remote="<Your App ID>"

Tip

También puedes descargar una copia de los archivos de configuración de tu aplicación desde la pantalla Deploy > Export App en la Interfaz de usuario Realm.

2

Create a new subdirectory with the same name as the webhook in /http_endpoints/<service>/incoming_webhooks/:

mkdir -p http_endpoints/<service>/incoming_webhooks/<webhook name>
3

Agregue un archivo de configuración de webhook config.json entrante llamado al nuevo directorio de webhook.

El archivo de configuración debe tener el siguiente formato:

http_endpoints/<Service Name>/incoming_webhooks/<Webhook Name>/config.json
{
"name": "<Webhook Name>",
"can_evaluate": { <JSON Expression> },
"run_as_authed_user": <Boolean>,
"run_as_user_id": "<App Services User ID>",
"run_as_user_id_script_source": "<Function Source Code>",
"respond_result": <Boolean>,
"fetch_custom_user_data": <Boolean>,
"create_user_on_auth": <Boolean>,
"options": {
"httpMethod": "<HTTP Method>",
"validationMethod": "<Webhook Validation Method>",
"secret": "<Webhook Secret>"
}
}
4

Introduzca un nombre para el webhook en el campo name del archivo de configuración. Este nombre debe ser distinto al de cualquier otro webhook que haya creado para el servicio.

{
"name": "<Unique Webhook Name>"
}
5

Especifique el tipo de autenticación que App Services debe usar para el webhook. App Services admite los siguientes métodos de autenticación de webhook:

Método de autenticación
Descripción

Autenticación de aplicaciones

Este tipo de autenticación configura un webhook para que se ejecute en el contexto de un usuario de la aplicación existente, especificado en cada solicitud entrante. Las solicitudes entrantes deben incluir las credenciales del proveedor de autenticación del usuario en el cuerpo o en los encabezados de la solicitud.

Para configurar un webhook para usar la autenticación de la aplicación, establece el valor de run_as_authed_user en true:

{
"run_as_authed_user": true,
"run_as_user_id": "",
"run_as_user_id_script_source": "",
}

Ejemplo

The following examples demonstrate the field names and values that incoming requests should include as body or header fields for each supported authentication provider:

{
"email": "<User's Email Address>",
"password": "<User's Password>"
}
{
"api-key": "<User's API Key>"
}
{
"jwtTokenString": "<User's JWT Token>"
}

Importante

No utilice campos de encabezado y cuerpo al mismo tiempo

Si una solicitud incluye credenciales tanto en los encabezados como en el cuerpo de la solicitud, App Services arroja un error y no ejecuta la función.

Sistema

Este tipo de autenticación configura un webhook para que se ejecute como el usuario del sistema, que tiene acceso total a las APIs de MongoDB CRUD y Agregación y no está sujeto a reglas, roles ni permisos.

Para configurar un webhook para que se ejecute como un usuario del sistema, no configure ningún otro campo de autenticación:

{
"run_as_authed_user": false,
"run_as_user_id": "",
"run_as_user_id_script_source": "",
}

ID de usuario

Este tipo de autenticación configura un webhook para que siempre se ejecute como un usuario de aplicación específico.

Para configurar un webhook para que siempre se ejecute como un usuario específico, configure run_as_user_id en el ID del usuario:

{
"run_as_authed_user": false,
"run_as_user_id": "<App Services User ID>",
"run_as_user_id_script_source": "",
}

Guión

This type of authentication configures a webhook to run as a specific application user determined based on the result of a custom function that you define. The function must return a specific user's id string or can specify a system user by returning { "runAsSystem": true}.

Para configurar un webhook para que se ejecute como un usuario determinado por una función, configure run_as_user_id_script_source en el código de función en cadena:

{
"run_as_authed_user": false,
"run_as_user_id": "",
"run_as_user_id_script_source": "<Stringified Function>",
}
6

Puede requerir que las solicitudes entrantes utilicen un método HTTP específico o puede aceptar todos los métodos HTTP y manejar cada uno individualmente en la función webhook inspeccionando la httpMethod propiedad en el objeto context.request, como en la siguiente función de ejemplo:

exports = function(payload, response) {
switch(context.request.httpMethod) {
case "GET": { /* Handle GET requests */ }
case "POST": { /* Handle POST requests */ }
case "PUT": { /* Handle PUT requests */ }
case "DELETE": { /* Handle DELETE requests */ }
case "PATCH": { /* Handle PATCH requests */ }
default: {}
}
}

To specify a webhook method, set the options.httpMethod field to the name of the method using all capital letters or "ANY".

{
"options": {
"httpMethod": "POST"
}
}
7

Puede enviar una respuesta HTTP configurable a los servicios externos que llaman al webhook. Para configurar el webhook y que envíe una respuesta a las solicitudes entrantes,respond_result configure true en.

Si Respond With Result habilita, el webhook responderá a las solicitudes entrantes con una respuesta HTTP 200 básica que incluye el valor de retorno de la función del webhook como su body campo. Puede configurar una respuesta HTTP personalizada desde la función del webhook usando el response objeto que App Services pasa automáticamente como segundo argumento.

8

Puede autorizar solicitudes dinámicamente según el contenido de cada solicitud al definir una Can Evaluate expresión. App Services evalúa la expresión para cada solicitud entrante que recibe el webhook. La expresión puede expandir variables de expresión estándar, incluida la expansión %%request.

To define an authorization expression, set the value of the can_evaluate field to the expression. If you do not specify an expression then App Services automatically authorizes all authenticated incoming requests.

Ejemplo

The following expression only authorizes incoming requests if the sender's IP address is not included in the list of addresses.

{
"%%request.remoteIPAddress": {
"$nin": [
"248.88.57.58",
"19.241.23.116",
"147.64.232.1"
]
}
}
9

Para validar que una solicitud de webhook se envió desde una fuente confiable, algunos servicios externos requieren que las solicitudes entrantes incorporen una cadena secreta de una de varias maneras prescritas. Otros servicios, como el servicio HTTP, permiten solicitar la validación de la solicitud de forma opcional.

You can configure a webhook's request authorization method in the options document of the webhook configuration. App Services supports the following request validation methods:

Método
Descripción

Sin autorización adicional

Las solicitudes de webhook entrantes no requieren autorización adicional.

{
"validationMethod": "NO_VALIDATION"
}

Verificar la firma de la carga útil

Incoming webhook requests must include a hashed signature of the request body and a secret value. For details, refer to Payload Signature Verification.

{
"validationMethod": "VERIFY_PAYLOAD",
"secret": "<Secret Value>"
}

Requerir secreto

Las solicitudes entrantes de webhooks deben incluir un valor secreto en forma de string como el parámetro de consulta secret en la URL del webhook. Para más detalles, consulta Secreto como parámetro de query.

{
"validationMethod": "SECRET_AS_QUERY_PARAM",
"secret": "<Secret Value>"
}
10

Add a file named source.js to the new webhook directory. The file should contain a valid function that will execute when the webhook is called.

App Services pasa automáticamente dos objetos como argumentos de la función webhook:

Argument
Descripción

payload

Una representación EJSON de la carga útil de la solicitud entrante. El contenido del documento del payload variará dependiendo del servicio y evento que haya causado la activación de un webhook. Para obtener una descripción del objeto payload para un servicio específico, consulta la página de referencia de ese servicio.

response

Un objeto de respuesta HTTP que configura la respuesta al cliente que llamó al webhook. Este objeto incluye métodos que permiten configurar los encabezados, el cuerpo y el código de estado de la respuesta. Llamar a cualquiera de estos métodos anula el comportamiento predeterminado de la respuesta.

Puede utilizar la siguiente función de webhook como base para su propio webhook:

exports = async function (payload, response) {
// Convert the webhook body from BSON to an EJSON object
const body = EJSON.parse(payload.body.text());
// Execute application logic, such as working with MongoDB
if (body.someField) {
const mdb = context.services.get("mongodb-atlas");
const requests = mdb.db("demo").collection("requests");
const { insertedId } = await requests.insertOne({
someField: body.someField,
});
// Respond with an affirmative result
response.setStatusCode(200);
response.setBody(`Successfully saved "someField" with _id: ${insertedId}.`);
} else {
// Respond with a malformed request error
response.setStatusCode(400);
response.setBody(`Could not find "someField" in the webhook request body.`);
}
// This return value does nothing because we already modified the response object.
// If you do not modify the response object and you enable *Respond with Result*,
// App Services will include this return value as the response body.
return { msg: "finished!" };
};
11

Una vez que haya configurado la preferencia de lectura para el clúster en config.json, puede enviar la configuración a su aplicación remota. La CLI de App Services implementa la actualización inmediatamente al enviarla.

realm-cli push --remote="<Your App ID>"

Volver

Configurar servicios de terceros

En esta página