Crea un utente Discourse da una richiesta Zapier

Sto cercando di creare un utente attivo con l’API.

Questo funziona da curl:

curl -X POST "https://community.co/users.json" -H "Api-Key: $API_KEY" -H "Api-Username: system" -H "Content-Type: multipart/form-data" -F "name=XXXXApp Tester" -F "email=XXXapptester2@example.com" -F "username=XXXapptester21" -F "active=true" -F "approved=true" -F "password=simplepass"

Quando faccio la stessa chiamata da Zapier (vedo che i Parameters in production.log sembrano gli stessi), nei log c’è questo:

Filter chain halted as :respond_to_suspicious_request rendered or redirected

E non succede nulla.

C’è un modo per aggirare questo problema?

  def suspicious?(params)
    return false if current_user && is_api? && current_user.admin?
    honeypot_or_challenge_fails?(params) || SiteSetting.invite_only?
  end
2 Mi Piace

Sto ipotizzando che stia fallendo su is_api?. Guardando il codice, non mi è chiaro perché dovrebbe fallire con la richiesta di Zapier, ma non vedo nessun altro punto in cui potrebbe fallire.

Sono interessato a questo perché qualcuno mi ha chiesto la stessa cosa riguardo alla creazione di utenti tramite Zapier qualche settimana fa.

2 Mi Piace

Il mio altro pensiero è che Zapier non stia passando correttamente la chiave API, ma credo che otterrei un errore diverso.

Scommetto che è la stessa persona. :slight_smile:

2 Mi Piace

Sì. Sono sorpreso che non funzioni, ma almeno ora so che non sono solo io.

Sto valutando questo approccio di utilizzo di un database esterno e di uno strumento di automazione come Zapier o Make (stavo riscontrando errori simili su Make) come POC per un programma pilota.

Posso fare a meno di utilizzare uno di questi strumenti nella fase pilota a breve termine, ma a lungo termine Discourse farà parte di una piattaforma più ampia e avrò sicuramente bisogno di gestire i membri in un database esterno in un backend separato con gestione dei membri e altri servizi.

1 Mi Piace

Sospetto che il problema sia correlato a come stai strutturando la richiesta su Zapier. Utilizzando l’azione Webhooks di Zapier, prova questo:

Seleziona “POST” come Evento. Poi:

URL: <https://forum.example.com/users.json>

Payload Type: “json”

Dati:

  • name: <nome completo dell'utente> (mostrato come richiesto nella documentazione, ma dovrebbe andare bene ometterlo)
  • username: nome utente dell’utente
  • email: email dell’utente
  • password: una password che soddisfa i requisiti del tuo sito
  • active: "true" (tra virgolette)
  • approved: "true" (tra virgolette)

Compila la sezione Headers per aggiungere la tua Api-Key e Api-Username (ho provato solo con system come Api-Username).

Utilizza i valori predefiniti per tutte le altre sezioni.

Ecco un paio di screenshot con dati fittizi:

Questo sta funzionando per me. Se non funziona, l’altra cosa da controllare è assicurarsi che l’impostazione invite only non sia abilitata sul tuo sito Discourse.

Per vedere se avrebbe funzionato, ho anche appena creato un’integrazione personalizzata con la Zapier CLI che crea nuovi utenti. Se Discourse lo desidera, quell’azione potrebbe essere aggiunta alla Zap ufficiale di Discourse. Non sono sicuro che l’aggiunta di un’azione per creare utenti sia una priorità, però. Non credo sia stata richiesta tanto quanto cose come la creazione di un invito o la sospensione di un utente.

Note da ulteriori test:

  • il Payload Type può essere impostato su “json” o “form”. Per impostare campi personalizzati con la richiesta, il payload type deve essere impostato su “form”.

  • I campi personalizzati Multiselect sono un po’ un problema. Zapier non consente nomi di chiave duplicati nella sezione Dati. Dovrebbe essere possibile impostare campi personalizzati Multiselect con l’azione “Custom Request” di Zapier.

  • i valori dei parametri active e approved non devono essere racchiusi tra virgolette.

2 Mi Piace

@simon Grazie! Ci sono riuscito! Il tuo screenshot mi ha aiutato a risolvere i problemi con il modo in cui Zapier crea i campi dati. Stava facendo cose strane, ma fondamentalmente non capivo come formattare / mappare i dati su Airtable. Devo far funzionare l’automazione end-to-end, ma la creazione dell’utente ha sicuramente funzionato.

A scopo informativo @pfaffman

4 Mi Piace

Ciao @simon - grazie ancora per l’aiuto con la formattazione. Ora sto cercando di aggiungere alcuni campi personalizzati al profilo utente e vedere se riesco a farli popolare da Zapier in un nuovo utente Discourse. Sembra che stia causando il fallimento dell’intera richiesta e sto ricevendo il messaggio “non hai completato tutti i campi utente”.

Ho trovato questo post quindi ho provato a passare da json a form, ma non ha funzionato.

Qualche consiglio su come formattare i campi del profilo personalizzati? Grazie!

1 Mi Piace

Cambiare il tipo di payload in “form” funziona per me:

Tranne che quell’approccio non funzionerà con i campi a discesa multi-selezione. Per quel tipo di campo penso che dovrai usare l’azione “Richiesta personalizzata”. Potrebbe richiedere un po’ di tentativi per farlo funzionare.

1 Mi Piace

Wow: sei veramente il gran mago di Zapier + Discourse. Cambiare la freccia rossa e ha funzionato al primo tentativo. L’avevo impostata come nome del campo, ma ovviamente non aveva senso dato che non lo avrei saputo a monte. Quindi, per ogni nuovo campo che creo, uso solo [#] e li mapperà automaticamente in ordine? Ne ho in programma un po’, forse circa 10. Inoltre, sembrava funzionare bene anche se il mio campo di test è un menu a discesa, forse perché lo sta semplicemente estraendo da Airtable?

1 Mi Piace

In realtà, non ho eseguito un test end-to-end completo. Ho solo testato lo zap, ma ha funzionato su un campo a discesa.

Sì, basta inserire l’id del campo tra parentesi quadre []. Puoi ottenere l’id del campo caricando la versione JSON della tua pagina Admin / Customize / User Fields (/admin/customize/user_fields.json)

(È più facile da leggere se hai un’estensione del browser che formatta il JSON.)

I campi a discesa dovrebbero andare bene. Solo i campi Multi-select avranno problemi. Ad esempio, il campo “hobbies” nello screenshot che ho pubblicato sopra.

1 Mi Piace

Ah multiselect, sì, mi è sfuggita quella parte. Per ora ho solo un menu a discesa a selezione singola.

Questo è fantastico. Grazie!!!

1 Mi Piace

Mi chiedo se vada bene riaprire questo argomento e chiedere informazioni sulla creazione di gruppi?

  • Posso creare utenti da Zapier senza problemi (anche quando è attivato l’invito) :white_check_mark:

L’interfaccia di Zapier consente singoli header API ma quando richiede un oggetto (che la creazione di un gruppo sembra richiedere)… ottengo questo, anche se modifico manualmente il corpo per formattarlo come richiesto dalla documentazione API:

Impossibile creare azioni personalizzate in Discourse

Richiesta grezza fallita. Problema nell’esecuzione della richiesta: codice di errore 400: parametro mancante o valore vuoto: gruppo

C’è un modo per inviare quell’oggetto iniziale group { e chiuderlo di nuovo usando Zapier?

Qualsiasi intuizione sarebbe fantastica e molto apprezzata!

L’ho risolto: ho dovuto usare le Webhook di Zapier in modalità completamente personalizzata per poter inserire manualmente tutte le intestazioni.

Poi ho semplicemente incollato nell’area dati/corpo e ha funzionato… semplicemente non funzionava in nessun’altra modalità.

3 Mi Piace