Automatizza l'invio di email di invito a Discourse con Zapier

L’API di Discourse può essere utilizzata per automatizzare l’invio di email di invito dal tuo forum quando viene eseguita un’azione su un’applicazione esterna. Per molte applicazioni, puoi utilizzare Zapier per configurarlo senza dover scrivere codice.

Un caso d’uso comune per questo è invitare gli utenti sul tuo forum quando acquistano un prodotto o si iscrivono a un servizio esterno. Per l’esempio in questo argomento utilizzerò l’integrazione Zapier WordPress per attivare l’invio di un invito da Discourse quando un nuovo utente si iscrive a un sito WordPress.

Configura un passaggio di attivazione (trigger step) su Zapier

Vai alla tua dashboard di Zapier e cerca l’applicazione che desideri attivi l’email di invito. Nelle schermate seguenti, ho selezionato WordPress come attivatore (trigger).

L’unica configurazione richiesta per questo è collegare lo Zap di WordPress a un account WordPress e selezionare l’evento Nuovo Utente (New User) per attivare lo Zap.

Configura un passaggio di azione (action step) per inviare l’invito

Fai clic sul pulsante Aggiungi un passaggio (Add a Step) e quindi fai clic su Azione/Ricerca (Action/Search) dal menu a discesa.

Inserisci ‘webhook’ nel menu di ricerca e quindi seleziona Webhooks by Zapier dal menu delle azioni. Il passaggio di azione Webhook verrà aggiunto alla barra laterale del tuo Zap e si aprirà un modulo che ti consente di scegliere quale tipo di richiesta desideri che esegua il webhook.

Seleziona POST dal modulo e quindi fai clic su Continua (Continue).

Il modulo che si apre ti consente di configurare la richiesta POST che viene inviata a Discourse. Nel campo URL, inserisci l’URL di base del tuo forum, seguito da /invites. Ad esempio, l’URL di base del mio forum è https://demo.scossar.com, quindi il link completo alla rotta degli inviti è https://demo.scossar.com/invites

Ora devi configurare le sezioni Payload Type, Data e Headers del modulo. Tutte le altre sezioni del modulo possono essere lasciate con i loro valori predefiniti.

Il Payload Type indica a Zapier in quale formato inviare il payload. Dovrebbe essere impostato su Json.

La sezione Dati (Data) viene utilizzata per indicare a Discourse quale indirizzo email inviare l’invito e per impostare un elenco opzionale di nomi di gruppi e un messaggio personalizzato. Per invitare un utente senza aggiungerlo a gruppi o includere un messaggio personalizzato, inserisci il testo email come Chiave dati (Data Key) e quindi fai clic sull’icona ‘Inserisci un campo’ (Insert a Field) per aprire il menu a discesa del campo. Scorri l’elenco fino a quando non vedi il valore che è stato passato dalla tua app di attivazione che contiene l’email dell’utente. Quando si utilizza WordPress come app di attivazione, la sezione Dati completata dovrebbe apparire simile a questa:

Per aggiungere automaticamente gli utenti ai gruppi quando accettano l’invito, fai clic sull’icona :heavy_plus_sign: della sezione Dati per aggiungere un nuovo campo. Imposta la Chiave del campo su group_names. Imposta il Valore del campo su un elenco di nomi di gruppi separati da virgole che desideri vengano aggiunti gli utenti. Per includere un messaggio personalizzato nell’email di invito, crea un altro campo con la sua Chiave impostata su custom_message e il suo valore impostato sul messaggio che desideri inviare.

Nota: aggiungendo un passaggio di Codice (Code step) dopo il passaggio di attivazione del tuo Zap, dovrebbe essere possibile impostare dinamicamente i nomi dei gruppi e un messaggio personalizzato per utenti specifici.

La sezione Intestazioni (Headers) viene utilizzata per autenticare la tua richiesta. Per configurare il campo Headers, dovrai generare una chiave API sul tuo sito Discourse. Per farlo, vai alla pagina Amministrazione / API del tuo sito Discourse e fai clic sul pulsante “Nuova chiave API” (New API Key). Durante la creazione della chiave, assegnala a un utente dello staff e imposta l’ambito su Globale (Global), oppure utilizza un ambito Granulare (Granular) con la casella Inviti > Crea (Invites > Create) spuntata.

Ora, nella sezione Headers dello Zap, inserisci le seguenti coppie chiave/valore. Sostituisci qualsiasi valore che ho incluso tra parentesi quadre con valori appropriati per il tuo sito. La distinzione tra maiuscole e minuscole nei nomi delle chiavi è importante.

Api-Username: <l'username dello staff che vuoi invii gli inviti>
Api-Key: <la chiave API che hai generato>
Content-Type: application/json

Il modulo dovrebbe ora apparire simile allo screenshot seguente, ma con il tuo Api-Username e Api-Key:

Fai clic sul pulsante Continua (Continue).

Ora sarai in grado di testare l’integrazione facendo clic sul pulsante ‘Invia Test a Webhooks by Zapier’ (Send Test To Webhooks by Zapier). Il test verrà eseguito con i dati che hai impostato nel passaggio di attivazione. Vedrai un messaggio di successo se tutto è configurato correttamente e, se l’utente che hai impostato nel passaggio di attivazione non esiste ancora sul tuo forum Discourse, verrà inviata un’email di invito e vedrai un messaggio di successo su Zapier. Una volta che il passaggio di test ha successo, fai clic sul pulsante Termina (Finish) e attiva il tuo Zap.

Per dettagli su come eseguire altri tipi di richieste all’API di Discourse con Zapier, consulta Make requests to the Discourse API with Zapier.

25 Mi Piace

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 Mi Piace

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

1 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

@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 Mi Piace

Ah, awesome info. Thanks!!

1 Mi Piace

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 Mi Piace

Ciao Simon,

Grazie per il tuo post!

Ho due domande; se potessi aiutarmi, sarebbe fantastico :slight_smile:

Domanda 1/
Da parte mia, l’invito + messaggio funziona correttamente, ma indipendentemente dai group_names che aggiungo, ho accesso solo al gruppo pubblico predefinito quando mi unisco al forum.

Sai se qualcosa potrebbe “bloccare” l’invito a un gruppo privato specifico?

L’URL del nome del gruppo è così: https://forum.[mysito].com/c/cercle/33

Quindi ho: group_names /// PUBLIC,cercle

Ho anche provato a usare il “numero” invece del nome del gruppo (33) per questo gruppo, ma non funziona ancora.

Forse c’è una sorta di “restrizione” nelle impostazioni di amministrazione del forum che blocca l’invito ai gruppi privati?

Domanda 2/

Vorrei poter invitare persone non solo a un “gruppo privato”, ma anche a un “sottogruppo privato” (non so il nome corretto per questo).

Qui puoi vedere che ho il gruppo “RÉSERVÉ…”
E tutti i piccoli sottogruppi sotto di esso.

Vorrei invitare gli utenti a sottogruppi specifici.

Sai come posso farlo?

Grazie mille se puoi dedicare un po’ di tempo ad aiutarmi con questo! :slight_smile:

1 Mi Piace

Assicurati di utilizzare il nome del gruppo e non il nome della categoria a cui consenti l’accesso al gruppo. Puoi trovare il nome del gruppo nell’URL del gruppo o nel campo Nome del gruppo:

Se ciò non risolve il problema, assicurati che la chiave API di Discourse che aggiungi a Zapier sia una chiave API globale per tutti gli utenti. Inoltre, verifica che il nome utente API impostato su Zapier abbia il permesso di aggiungere utenti al gruppo. Qualsiasi nome utente amministratore sul tuo sito funzionerà per questo scopo.

Fammi sapere se questo non risolve il problema per te.

Puoi invitare l’utente in più gruppi aggiungendo un elenco di nomi di gruppo separati da virgole nel campo group_names su Zapier. Discourse non prevede il concetto di sottogruppi, quindi dovrai aggiungere il nome di ciascun gruppo a cui desideri invitare l’utente.

Dallo screenshot che hai fornito, sembra che tu stia cercando di concedere all’utente l’accesso a una categoria e a tutte le sue sottocategorie. Invece di creare un gruppo per ogni sottocategoria, puoi semplicemente consentire a un singolo gruppo di accedere alla categoria e a tutte le sue sottocategorie. Questa opzione è configurata nella sezione Sicurezza della pagina di modifica della categoria.

2 Mi Piace

Grazie per la risposta, Simon!

Per quanto riguarda l’API:

Avevo concesso l’accesso a un solo utente (l’amministratore), pensando che fosse sufficiente. Quindi ora ho creato una nuova API per dare accesso a tutti gli utenti.

Tuttavia, non ha ancora funzionato. Ma credo di aver capito il problema :slight_smile:

Sto cercando di aggiungere un nome di “categoria” nel campo “group_names”, quindi immagino che non possa funzionare :).

Ho frainteso la differenza tra nomi di gruppi, categorie e argomenti…

Nello screenshot puoi vedere un elenco di forse 15 sottocategorie: TB, MT, RD, MA…

Ad esempio, l’URL della prima sottocategoria è: https://forum.MYWEBSITE.com/c/question-formactions/TBD/14

Quindi immagino che voglia invitare automaticamente nuovi membri a certe sottocategorie private, e non a certi gruppi.

Nell’URL che ti ho fornito, vorrei concedere l’accesso solo alla sottocategoria “TBD”, per esempio.

E un altro utente avrà accesso solo a un’altra.

Sai se è possibile farlo?

Forse devo solo sostituire il campo “group_names” su Zapier con quello relativo alle categorie?

1 Mi Piace

I Gruppi e le Categorie sono fonte di molta confusione in Discourse!

  1. I Gruppi sono collezioni di persone.
  2. Le Categorie sono collezioni di argomenti. Non puoi invitare direttamente le persone in esse. Tuttavia, l’accesso a queste è controllato dai Gruppi.

Per ottenere ciò che desideri, crea un Gruppo. Nelle impostazioni di sicurezza della categoria rilevante, aggiungi l’accesso per quel Gruppo. Utilizza quel Gruppo per l’API degli inviti. Fatto.

3 Mi Piace

Grazie per la risposta, Nathan!

Proverò e pubblicherò qui il mio risultato :wink:

2 Mi Piace

La tua soluzione funziona bene, grazie! :smiley:

Ho un’altra domanda, forse tu (o @simon) potreste aiutarmi con questo:

Con Zapier, c’è un modo per concedere l’accesso a un nuovo gruppo a persone che sono già membri di Discourse?

In sostanza, ecco il mio flusso di lavoro:

1/ Un membro si iscrive a uno dei miei corsi

2/ Zapier preleva la sua email dalla mia piattaforma di apprendimento e gli invia un invito al mio Discourse, aggiungendolo automaticamente al gruppo giusto, relativo al corso a cui si è appena iscritto.

3/ A volte, qualche mese dopo, lo stesso membro si iscrive a un altro corso: quindi, con il mio attuale processo, Zapier gli invierà un nuovo invito a Discourse, anche se è già membro, quindi l’invito non funzionerà.

Avrei bisogno che Zapier gli desse accesso a un nuovo gruppo, se è già un membro del mio Discourse.

Vedi un modo per farlo?

1 Mi Piace