Dispara una tarea de Zapier con webhooks de Discourse

¿Quieres usar los Webhooks de Discourse para activar una tarea mediante Zapier? ¡Comencemos!

:bulb: Consejo: Zapier ahora cuenta con una integración oficial de Discourse con desencadenantes y acciones integrados (por ejemplo, “Nueva publicación”, “Crear publicación”). Para casos de uso comunes, esto es más sencillo que configurar webhooks genéricos manualmente. La guía a continuación cubre el enfoque manual de webhook, que te ofrece mayor flexibilidad y acceso a todos los tipos de eventos de Discourse.

Zapier requiere un desencadenante (trigger) y una acción. En este tutorial, el desencadenante será un Webhook de Discourse y la acción será enviar un correo electrónico.

Enviar un correo electrónico en cualquier evento de usuario

Ahora configuraremos un Zap para enviar un correo electrónico en cualquier evento de usuario (por ejemplo, cuando se crea, aprueba, actualiza, inicia sesión, cierra sesión, suspende un usuario, y más). Para activar un evento de usuario específico, consulta Activar en un evento de usuario específico más abajo.

Crear un Webhook de Discourse

Crear un nuevo Zap

Busca este botón en el panel de control de Zapier:

Configurar el desencadenante

Configurar la acción en Zapier

Activar el Zap

Eso es todo, ahora recibirás un correo electrónico por cada evento de usuario. La lista completa de eventos de usuario que pueden activar un webhook es:

Nombre del evento Descripción
user_created Se crea una nueva cuenta de usuario
user_approved Se aprueba un usuario
user_updated Se actualiza el perfil de un usuario
user_logged_in Un usuario inicia sesión
user_logged_out Un usuario cierra sesión
user_confirmed_email Un usuario confirma su correo electrónico
user_destroyed Se elimina una cuenta de usuario
user_suspended Se suspende un usuario
user_unsuspended Se levanta la suspensión de un usuario
user_anonymized Se anonimizan los datos de una cuenta de usuario

:tada:


Activar en un evento de usuario específico

¿Quieres enviar correos electrónicos solo para un evento de usuario específico, quizás solo al crear una cuenta, pero no al actualizarla? Usa el desencadenante “Catch Raw Hook” (Capturar gancho sin procesar).

  1. Haz clic en “mostrar opciones menos comunes”
  2. Haz clic en “Catch Raw Hook”
  3. Sigue los pasos restantes para configurar el desencadenante normalmente.

Una vez configurado el desencadenante, agrega un filtro.

  1. Haz clic en “Agregar un paso”
  2. Haz clic en “Filtro”
  3. Haz clic en “Guardar y continuar”
  4. Selecciona “Headers Http X Discourse Event” en el primer menú desplegable.
  5. Selecciona “(Texto) Coincide exactamente” en el segundo menú desplegable.
  6. Ingresa el encabezado completo por el que deseas filtrar (por ejemplo, user_logged_out).
  7. Si quieres que Zapier se ejecute en varios encabezados, haz clic en “+OR” y agrégalos igual que el primero.
  8. Haz clic en “Probar y continuar”
  9. Revisa la prueba del filtro y luego haz clic en “Continuar”

Una vez configurado el filtro, configura la acción que prefieras.

Usar el encabezado completo del webhook

Para acceder al encabezado, sigue los pasos anteriores: selecciona “Catch Raw Hook” y luego agrega un filtro. Configura el filtro para continuar solo si Headers Http X Discourse Event coincide con el evento que buscas.

La dificultad aquí es que Catch Raw Hook pasa el cuerpo sin procesar del webhook. La acción final que estoy utilizando necesita datos analizados del cuerpo. Lo que me funciona es agregar una acción de Código después del filtro. En el modal de Acción de Código, selecciona “Ejecutar Javascript”:

Zapier creará un objeto inputData al que puedes agregar propiedades con nombre. Agrega un nombre para tu propiedad en la columna izquierda. En la columna derecha, selecciona “Catch Raw Hook” en el menú desplegable y luego selecciona “Raw Body” (Cuerpo sin procesar):

Desplázate hacia abajo en la página para ver una entrada de código:

Luego debes reemplazar el código de ejemplo con algún código que analice el Raw Body y devuelva un objeto que contenga los valores que necesitas para tu acción final. Aquí está el código que estoy usando. El objeto que devuelve lo está utilizando la integración con Salesforce. Salesforce requiere un apellido, por lo que si no existe un apellido, se devuelve un error:

const parsed = JSON.parse(inputData.raw);
if (parsed.user) {
  const user = parsed.user,
        name = user.name,
        userFields = user.user_fields;
  let firstName,
      lastName,
      company;
  
  if (name) {
    const splitName = name.split(' ');
    firstName = splitName[0];
    lastName = splitName[1]
    }
  if (userFields) {
    company = userFields['10'];
  }
  if (lastName) {
    return {id: user.id,
            username: user.username,
            lastName: lastName,
            firstName: firstName,
            email: user.email,
            company: company
           };
  } else {
    return {error: "Missing last name"}
  }
} else {
  return {error: "A user object was not returned"};
}

Para evitar realizar una solicitud fallida en la acción final, se puede agregar otro filtro de Zapier. Configura ese filtro para continuar solo si el campo de error devuelto por el javascript no existe:

Luego puedes agregar tu acción final. Para seleccionar los campos que se usarán en la acción final, utiliza las propiedades devueltas por la acción Ejecutar Javascript.

32 Me gusta