Automatizar el envío de correos de invitación de Discourse con Zapier

La API de Discourse se puede utilizar para automatizar el envío de correos electrónicos de invitación desde su foro cuando se realiza una acción en una aplicación externa. Para muchas aplicaciones, puede usar Zapier para configurar esto sin tener que escribir ningún código.

Un caso de uso común para esto es invitar a usuarios a su foro cuando compran un producto o se registran en un servicio externo. Para el ejemplo en este tema, utilizaré la integración de Zapier con WordPress para activar el envío de una invitación desde Discourse cuando un nuevo usuario se registra en un sitio de WordPress.

Configurar un paso de activación en Zapier

Vaya a su panel de control de Zapier y busque la aplicación que desea que active el correo electrónico de invitación. En las capturas de pantalla a continuación, he seleccionado WordPress como el activador.

La única configuración requerida para esto es conectar el Zap de WordPress a una cuenta de WordPress y seleccionar el evento “New User” (Nuevo usuario) para activar el Zap.

Configurar un paso de acción para enviar la invitación

Haga clic en el botón “Add a Step” (Agregar un paso) y luego haga clic en “Action/Search” (Acción/Buscar) en el menú desplegable.

Escriba ‘webhook’ en el menú de búsqueda y luego seleccione “Webhooks by Zapier” del menú de acciones. El paso de acción Webhook se agregará a la barra lateral de su Zap, y se abrirá un formulario que le permitirá elegir qué tipo de solicitud desea que realice el webhook.

Seleccione POST del formulario y luego haga clic en “Continue” (Continuar).

El formulario que se abre le permite configurar la solicitud POST que se realiza a Discourse. En el campo URL, ingrese la URL base de su foro, seguida de /invites. Por ejemplo, la URL base de mi foro es https://demo.scossar.com, por lo que el enlace completo a la ruta de invitaciones es https://demo.scossar.com/invites.

Ahora necesita configurar las secciones Payload Type (Tipo de carga útil), Data (Datos) y Headers (Encabezados) del formulario. Todas las demás secciones del formulario se pueden dejar con sus valores predeterminados.

El Payload Type le dice a Zapier qué formato usar para enviar la carga útil. Debe establecerse en Json.

La sección Data se utiliza para indicarle a Discourse a qué dirección de correo electrónico enviar la invitación, y para establecer una lista opcional de nombres de grupos y un mensaje personalizado. Para invitar a un usuario sin agregarlo a grupos o incluir un mensaje personalizado, ingrese el texto email como una Clave de datos y luego haga clic en el ícono ‘Insert a Field’ (Insertar un campo) para abrir el menú desplegable del campo. Desplácese hacia abajo en la lista hasta que vea el valor que se ha pasado desde su aplicación de activación que contiene el correo electrónico del usuario. Cuando utiliza WordPress como aplicación de activación, la sección Data completa debe verse similar a esto:

Para agregar automáticamente usuarios a grupos cuando aceptan la invitación, haga clic en el ícono :heavy_plus_sign: de la sección Data para agregar un nuevo campo. Establezca la Clave del campo como group_names. Establezca el Valor del campo como una lista de nombres de grupos separados por comas a los que desea que se agreguen los usuarios. Para incluir un mensaje personalizado en el correo electrónico de invitación, cree otro campo con su Clave establecida en custom_message y su valor establecido en el mensaje que desea enviar.

Nota: al agregar un paso de Código después del paso de activación de su Zap, debería ser posible establecer dinámicamente nombres de grupos y un mensaje personalizado para usuarios específicos.

La sección Headers se utiliza para autenticar su solicitud. Para configurar el campo Headers, deberá generar una clave de API en su sitio de Discourse. Para hacerlo, vaya a la página Admin / API de su sitio de Discourse y haga clic en el botón “New API Key” (Nueva clave de API). Al crear la clave, asígnela a un usuario del personal y establezca el alcance en Global, o use un alcance Granular con la casilla Invites > Create marcada.

Ahora, en la sección Headers del Zap, ingrese los siguientes pares clave/valor. Reemplace cualquier valor que haya incluido entre corchetes con valores apropiados para su sitio. La capitalización de los nombres de las claves es importante.

Api-Username: <el nombre de usuario del personal al que desea enviar las invitaciones>
Api-Key: <la clave de API que generó>
Content-Type: application/json

El formulario ahora debería verse similar a la captura de pantalla a continuación, pero con su Api-Username y Api-Key:

Haga clic en el botón “Continue”.

Ahora podrá probar la integración haciendo clic en el botón ‘Send Test To Webhooks by Zapier’ (Enviar prueba a Webhooks por Zapier). La prueba se realizará con los datos que configuró en su paso de activación. Verá un mensaje de éxito si todo está configurado correctamente, y si el usuario que configuró en su paso de activación aún no existe en su foro de Discourse, se enviará un correo electrónico de invitación y verá un mensaje de Éxito en Zapier. Una vez que el paso de prueba sea aprobado, haga clic en el botón “Finish” (Finalizar) y active su Zap.

Para obtener detalles sobre cómo realizar otro tipo de solicitudes a la API de Discourse con Zapier, consulte Make requests to the Discourse API with Zapier.

25 Me gusta

¡Esto es increíble, gracias por la función y las instrucciones claras!

¿Es posible también establecer el grupo personalizado al generar una invitación, como se puede hacer desde la aplicación?

Esto se puede hacer agregando una clave group_names al campo Headers. Su valor debe establecerse como una lista de nombres de grupo separados por comas. Agregaré un ejemplo de esto al tema.

El enfoque básico que se utiliza en este tema funcionará para cualquier solicitud de API a Discourse.

3 Me gusta

¡Genial! Creo que el diálogo también acepta un mensaje personalizado; supongo que se puede hacer de la misma manera, ¿no?

1 me gusta

Intenté configurarlo esta mañana y me encontré con un error 400. Tras un poco de depuración, descubrí que los pasos relacionados con la autenticación deben ir en la sección de encabezados, como se indica, pero los valores reales del formulario (correo electrónico, nombre del grupo y mensaje personalizado) deben ir en la sección data como pares clave/valor.

Una vez que hice ese cambio, ¡funcionó perfectamente!

1 me gusta

¡Gracias por eso, @simon!

¿Hay alguna descripción en meta sobre formas alternativas de crear un proceso automatizado para enviar un correo de invitación después de que el lector se registre en una oferta, y a las que podrías enlazar aquí?

¡Gracias por probarlo! Lo que estoy encontrando es que cuando no se incluyen custom_message o group_names en la solicitud, pasar el email en los encabezados funciona. Sin embargo, no es la forma correcta de pasar la dirección de correo electrónico. He actualizado la guía para usar la sección de Datos al establecer la dirección de correo electrónico e incluí ejemplos para agregar usuarios a grupos e incluir un mensaje personalizado.

4 Me gusta

No conozco otros servicios similares a Zapier, pero estoy seguro de que existen. Puedes hacer solicitudes directamente a la API de Discourse sin usar un servicio de terceros. El requisito principal para hacerlo es tener una aplicación desde la cual realizar las solicitudes. Esto puede ser algo tan sencillo como un sitio de WordPress.

Un buen recurso en Meta para comenzar con la API es Reverse engineer the Discourse API. Puedes probar las solicitudes de la API con CURL desde la terminal de tu computadora o con un servicio como Postman.

2 Me gusta

¡Gracias! La mayoría de lo que escribes no tengo idea… ¡pero revisaré tus enlaces y veré si puedo entender algo :D!

2 Me gusta

@simon

Pregunta rápida:

Cuando envío una invitación automatizada a través de Zapier, ¿será un enlace ya personalizado o un enlace a la página de inicio de sesión general de mi foro (donde alguien puede iniciar sesión y también crear una cuenta)?

Me gustaría evitar que cualquiera y su perro que conozca la página de inicio de sesión cree una cuenta. ¿Cuál es la mejor manera de evitarlo?

Cuando envías un enlace de invitación a través de Zapier, estás activando exactamente la misma acción que si hubieras hecho clic en el enlace ‘Enviar una invitación’ desde la página de Invitaciones de tu cuenta.

Crear una invitación enviará un correo electrónico a la dirección de correo del usuario invitado. Ese correo contiene un enlace a una página donde el usuario invitado puede establecer su nombre y contraseña, e iniciar sesión en su nueva cuenta. La dirección de correo para la nueva cuenta se define mediante la dirección de correo que utilizaste para la invitación.

Solo los usuarios que hayan recibido una invitación pueden crear una cuenta a través de esta página. Si deseas permitir únicamente que los usuarios invitados se registren en tu sitio, ve a la sección de Inicio de sesión de la Configuración de tu sitio y selecciona la configuración del sitio solo por invitación.

La mejor manera de entender cómo funcionan las invitaciones es invitarte a ti mismo a tu sitio. Para esto, puedes usar una dirección de Gmail temporal. Necesitarás cerrar sesión en el sitio antes de poder aceptar tu invitación.

3 Me gusta

¡Ah, información genial. Gracias!!

1 me gusta

¡Gracias por el excelente tutorial! ¿Hay alguna manera de agregar un ID de tema al que el usuario sea redirigido después de registrarse, como en la característica de invitación masiva?

Es posible invitar a un nuevo usuario a un tema con un enfoque similar al descrito anteriormente, pero la URL que configures en el paso de Acción debe apuntar al tema. Por ejemplo, para invitar a un usuario a un tema con el ID 123, agregarías la URL https://forum.example.com/t/123/invite en el paso de Acción. Luego, agregarías los parámetros email y, opcionalmente, custom_message y group_names de la misma manera en que se describen en la guía.

3 Me gusta

Hola Simon,

¡Gracias por tu publicación!

Tengo dos preguntas; si pudieras ayudarme, sería genial :slight_smile:

Pregunta 1/
En mi caso, la invitación y el mensaje funcionan correctamente, pero sin importar los group_names que agregue, solo tengo acceso al grupo público predeterminado cuando me uno al foro.

¿Sabes si algo podría estar “bloqueando” la invitación a un grupo privado específico?

La URL del nombre del grupo es así: https://forum.[miwebsite].com/c/cercle/33

Así que tengo: group_names /// PUBLIC,cercle

También intenté usar un “número” en lugar del nombre del grupo (33) para este grupo, pero sigue sin funcionar.

¿Quizás haya algún tipo de “restricción” en la configuración de administración del foro que bloquee la invitación a grupos privados?

Pregunta 2/

Me gustaría poder invitar a personas no solo a un “grupo privado”, sino a un “subgrupo privado” (no sé cuál es el nombre correcto para eso).

Aquí puedes ver que tengo el grupo “RÉSERVÉ…” y todos los pequeños subgrupos debajo de él.

Me gustaría invitar a usuarios a subgrupos específicos.

¿Sabes cómo puedo hacer eso?

¡Muchas gracias si puedes tomarte un tiempo para ayudarme con esto! :slight_smile:

1 me gusta

Asegúrate de que estás utilizando el nombre del grupo y no el nombre de la categoría a la que permites que el grupo acceda. Puedes encontrar el nombre del grupo en la URL del grupo o en el campo “Nombre” del grupo:

Si eso no resuelve el problema, verifica que la clave de API de Discourse que agregas en Zapier sea una clave de API global para “Todos los usuarios”. Además, asegúrate de que el nombre de usuario de la API configurado en Zapier tenga permiso para agregar usuarios al grupo. Cualquier nombre de usuario de administrador en tu sitio funcionará para esto.

Avísame si esto no resuelve el problema para ti.

Puedes invitar al usuario a varios grupos añadiendo una lista de nombres de grupos separados por comas en el campo group_names de Zapier. Discourse no tiene el concepto de subgrupos, por lo que deberás agregar el nombre de cada grupo al que quieras invitar al usuario.

Por la captura de pantalla que has proporcionado, parece que estás intentando otorgar al usuario acceso a una categoría y a todas sus subcategorías. En lugar de crear un grupo para cada subcategoría, podrías simplemente permitir que un solo grupo acceda a la categoría y a todas sus subcategorías. Esto se configura en la sección de Seguridad de la página de edición de la categoría.

2 Me gusta

¡Gracias por tu respuesta, Simon!

En cuanto a la API:

Antes otorgué acceso solo a un usuario (el administrador), pensando que era suficiente. Así que ahora he creado una nueva API para dar acceso a todos los usuarios.

Sin embargo, aún no funciona. Pero creo que he entendido el problema :slight_smile:

Estoy intentando agregar un nombre de “categoría” en el campo “group_names”, así que supongo que no funcionará :).

Me equivoqué con los nombres de grupos/categorías/temas…

En la captura de pantalla puedes ver una lista de quizás 15 subcategorías: TB, MT, RD, MA, etc.

Por ejemplo, la URL de la primera subcategoría es: https://forum.MYWEBSITE.com/c/question-formactions/TBD/14

Así que creo que lo que quiero es invitar automáticamente a nuevos miembros a ciertas subcategorías privadas, y no a un grupo.

En la URL que te proporcioné, me gustaría otorgar acceso solo a la subcategoría “TBD”, por ejemplo.

Y otro usuario tendría acceso solo a otra subcategoría diferente.

¿Sabes si es posible hacer esto?

¿Quizás solo necesito reemplazar el campo “group_names” en Zapier por el correspondiente a las categorías?

1 me gusta

¡Los Grupos y las Categorías son una fuente de mucha confusión en Discourse!

  1. Los Grupos son colecciones de personas.
  2. Las Categorías son colecciones de temas. No puedes invitar a personas a ellas en sí mismas. Pero el acceso a estas se controla mediante grupos.

Para lograr lo que deseas, crea un grupo. En la configuración de seguridad de la categoría relevante, agrega acceso para ese grupo. Usa ese grupo para la API de invitaciones. Hecho.

3 Me gusta

¡Gracias por tu respuesta, Nathan!

Lo probaré y publicaré aquí el resultado :wink:

2 Me gusta

¡Tu solución funciona perfectamente, gracias! :smiley:

Tengo otra pregunta, quizás tú (o @simon) puedan ayudarme con esto:

Con Zapier, ¿hay alguna manera de otorgar acceso a un nuevo grupo a personas que ya son miembros de Discourse?

Básicamente, este es mi flujo de trabajo:

1/ Un miembro se inscribe en uno de mis cursos.

2/ Zapier obtiene su correo electrónico de mi plataforma de aprendizaje, le envía una invitación a mi Discourse y lo agrega automáticamente al grupo correcto, relacionado con el curso que acaba de unirse.

3/ A veces, unos meses después, ese mismo miembro se inscribe en otro curso: por lo tanto, con mi proceso actual, Zapier le enviará una nueva invitación a Discourse, aunque ya sea miembro, por lo que la invitación no funcionará.

Necesito que Zapier le otorgue acceso a un nuevo grupo si ya es miembro de mi Discourse.

¿Ves alguna forma de hacer eso?

1 me gusta