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

This is awesome thank you for the feature and clear instructions!

Is it possible to also set the custom group when generating an invite, like you can from within the app?

That can be done by adding a group_names key to the Headers field. Its value should be set to a comma separated list of group names. I’ll add an example of this to the topic.

The basic approach that’s used in this topic will work for any API request to Discourse.

3 Me gusta

Awesome!! I think the dialog accepts a custom message too, guessing that can be done the same way?

1 me gusta

I tried setting this up this AM and was running into a 400 error. With a little bit of debugging, I found that the auth-related steps need to go in the headers section as instructed, but the actual form values (email, group name, and custom message) need to go in the data section as key/value sets.

Once I made that change, though, it worked perfectly!

1 me gusta

Thanks for that, @simon!

Are there any descriptions on meta about alternative ways to create an automated process for sending an invite email after the reader signed up to an offering and to which you could link here?

Thanks for testing that! What I’m finding is that when no custom_message or group_names are included in the request, passing the email in the Headers works. It’s not the correct way to pass the email address though. I’ve updated the guide to use the Data section for setting the email address, and have included examples for adding users to groups and including a custom message.

4 Me gusta

I’m not aware of other services that are similar to Zapier, but I’m sure there are some out there. You can make requests directly to the Discourse API without using a third party service. The main requirement for doing this is that you have an application to make the requests from. This can be something a simple as a WordPress site.

A good resource on Meta for getting started with the API is Reverse engineer the Discourse API. You can test API requests with CURL from your computer’s terminal, or with a service like Postman.

2 Me gusta

Thank you! Most of what you write I have no idea about… but I’ll check I’ll out your links and see if so can understand anything :smiley:

2 Me gusta

@simon

Quick question:

When I send an automated invite through Zapier, would this then be an already personalized link, or a link to the general login page to my forum (where someone can log in and also create an account)?

I would like to avoid that everybody and their dog who knows the login page creates an account. How can that best be avoided?

When you send an invite link through Zapier you are triggering exactly the same action as if you had clicked the ‘Send an Invite’ link from your account’s Invite page.

Creating an invite will send an email to invited user’s email address. That email contains a link to a page where the invited user can set their name and password, and login to their new account. The email address for the new account is set by the email address that you used for the invite.

Only users who have been sent an invite can create an account through this page. If you would like to only allow invited users to register for your site, go to the Login section of your Site Settings and select the invite only site setting.

The best way to get a sense of how invites work is to invite yourself to your site. You can use a throw-away gmail address for this. You will need to log out of the site before you will be able to accept your invite.

3 Me gusta

Ah, awesome info. Thanks!!

1 me gusta

Thanks for the great tutorial! Is there a way to add a topic id that the user gets redirected to after signing up like in the bulk invite feature?

It is possible to invite a new user to a topic with a similar approach to what is outlined above, but the URL that you setup in the Action step needs to point to the topic. For example, to invite a user to a topic with the id 123 you would add the URL https://forum.example.com/t/123/invite to the Action step. You would then add the email and the optional custom_message and group_names parameters in the same way as they are outlined in the guide.

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