Discourse-Benutzer aus einer Zapier-Anfrage erstellen

Ich versuche, einen aktiven Benutzer mit der API zu erstellen.

Dies funktioniert mit 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"

Wenn ich denselben Aufruf von Zapier aus mache (ich sehe, dass die Parameters in production.log gleich aussehen), steht Folgendes in den Protokollen:

Filter chain halted as :respond_to_suspicious_request rendered or redirected

Und es passiert nichts.

Gibt es eine Möglichkeit, dies zu umgehen?

  def suspicious?(params)
    return false if current_user && is_api? && current_user.admin?
    honeypot_or_challenge_fails?(params) || SiteSetting.invite_only?
  end
2 „Gefällt mir“

Ich vermute, es schlägt bei is_api? fehl. Wenn ich mir den Code ansehe, ist mir nicht klar, warum er bei der Anfrage von Zapier fehlschlagen würde, aber ich sehe keine andere Stelle, an der er fehlschlagen könnte.

Ich bin daran interessiert, weil mich vor ein paar Wochen jemand wegen desselben Problems bei der Erstellung von Benutzern über Zapier gefragt hat.

2 „Gefällt mir“

Mein anderer Gedanke ist, dass Zapier den API-Schlüssel nicht richtig übergibt, aber ich glaube, ich würde eine andere Fehlermeldung erhalten.

Ich vermute, es ist dieselbe Person. :slight_smile:

2 „Gefällt mir“

Ja. Ich bin überrascht, dass das nicht funktioniert, aber zumindest weiß ich jetzt, dass ich nicht der Einzige bin.

Ich betrachte diesen Ansatz, eine externe Datenbank und ein Automatisierungstool wie Zapier oder Make (ich erhielt ähnliche Fehler bei Make) als Proof of Concept für ein Pilotprogramm.

Ich kann kurzfristig in der Pilotphase ohne eines dieser Tools auskommen, aber langfristig wird Discourse ein Teil einer größeren Plattform sein, und ich muss definitiv Mitglieder in einer externen Datenbank in einem separaten Backend mit Mitgliederverwaltung und anderen Diensten verwalten.

1 „Gefällt mir“

Ich vermute, das Problem hängt damit zusammen, wie Sie die Anfrage in Zapier strukturieren. Verwenden Sie die Aktion “Webhooks by Zapier” und versuchen Sie Folgendes:

Wählen Sie “POST” als Ereignis. Dann:

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

Payload Type: “json”

Daten:

  • name: <vollständiger Name des Benutzers> (wird in der Dokumentation als erforderlich angezeigt, sollte aber weggelassen werden können)
  • username: Benutzername des Benutzers
  • email: E-Mail des Benutzers
  • password: Ein Passwort, das die Anforderungen Ihrer Website erfüllt
  • active: "true" (in Anführungszeichen)
  • approved: "true" (in Anführungszeichen)

Füllen Sie den Abschnitt “Header” aus, um Ihren Api-Key und Api-Username hinzuzufügen (ich habe dies nur mit system als Api-Username ausprobiert).

Verwenden Sie die Standardwerte für alle anderen Abschnitte.

Hier sind ein paar Screenshots mit gefälschten Daten:

Das funktioniert für mich. Wenn es nicht funktioniert, sollten Sie noch überprüfen, ob die Einstellung “nur Einladung” auf Ihrer Discourse-Website aktiviert ist.

Um zu sehen, ob es funktionieren würde, habe ich auch gerade eine benutzerdefinierte Integration mit dem Zapier CLI erstellt, die neue Benutzer erstellt. Wenn Discourse möchte, könnte diese Aktion zur offiziellen Discourse Zap hinzugefügt werden. Ich bin mir jedoch nicht sicher, ob das Hinzufügen einer Aktion zum Erstellen von Benutzern Priorität hat. Ich glaube nicht, dass dies so oft angefordert wurde wie Dinge wie das Erstellen einer Einladung oder das Suspendieren eines Benutzers.

Hinweise aus weiteren Tests:

  • Der Payload Type kann entweder auf “json” oder “form” gesetzt werden. Um benutzerdefinierte Felder mit der Anfrage zu setzen, muss der Payload Type auf “form” gesetzt werden.

  • Multiselect-Benutzerdefinierte Felder sind ein kleines Problem. Zapier erlaubt keine doppelten Schlüsselnamen im Datenabschnitt. Es sollte möglich sein, Multiselect-Benutzerdefinierte Felder mit der Zapier-Aktion “Benutzerdefinierte Anfrage” zu setzen.

  • Die Werte der Parameter active und approved müssen nicht in Anführungszeichen gesetzt werden.

2 „Gefällt mir“

@simon Danke! Ich habe es zum Laufen gebracht! Dein Screenshot hat mir geholfen, die Probleme mit der Art und Weise zu lösen, wie Zapier die Datenfelder erstellt. Es hat einige seltsame Dinge getan, aber ich habe im Grunde nicht verstanden, wie die Daten für Airtable formatiert / zugeordnet werden müssen. Ich muss die End-to-End-Automatisierung zum Laufen bringen, aber die Benutzererstellung hat definitiv funktioniert.

Zu deiner Information @pfaffman

4 „Gefällt mir“

Hallo @simon – nochmals vielen Dank für die Hilfe bei der Formatierung. Jetzt versuche ich, einige benutzerdefinierte Felder zum Benutzerprofil hinzuzufügen und zu sehen, ob ich Zapier dazu bringen kann, diese in einem neuen Discourse-Benutzer zu befüllen. Es scheint, dass die gesamte Anfrage fehlschlägt und ich erhalte die Meldung „Sie haben nicht alle Benutzerfelder ausgefüllt“.

Ich habe diesen Beitrag gefunden, also habe ich versucht, ihn von JSON auf Formular umzustellen, aber das hat nicht funktioniert.

Haben Sie Ratschläge, wie benutzerdefinierte Profilfelder formatiert werden können? Danke!

1 „Gefällt mir“

Das Ändern des Payload-Typs auf “Formular” funktioniert für mich:

Außer, dass dieser Ansatz nicht mit Multiselect-Dropdown-Feldern funktioniert. Für diesen Feldtyp müssen Sie meiner Meinung nach die Aktion “Benutzerdefinierte Anfrage” verwenden. Es könnte etwas Bastelei erfordern, um es zum Laufen zu bringen.

1 „Gefällt mir“

Wow – Sie sind wirklich der Großmagier von Zapier + Discourse. Die Änderung des roten Pfeils hat beim ersten Versuch funktioniert. Ich hatte ihn als Namen des Feldes, aber das ergibt natürlich keinen Sinn, da er das nicht vorgelagert wissen würde. Also verwende ich für jedes neue Feld, das ich erstelle, einfach die [#] und es wird sie automatisch in der richtigen Reihenfolge zuordnen? Ich plane einige – vielleicht etwa 10. Außerdem schien es auch dann gut zu funktionieren, wenn mein Testfeld ein Dropdown ist – vielleicht, weil es einfach aus Airtable gezogen wird?

1 „Gefällt mir“

Tatsächlich habe ich keinen vollständigen End-to-End-Test durchgeführt. Ich habe nur den Zap getestet, aber er funktionierte bei einem Dropdown-Feld.

Ja, fügen Sie einfach die id des Feldes in die [] ein. Sie können die id des Feldes abrufen, indem Sie die JSON-Version Ihrer Seite Admin / Anpassen / Benutzerfelder (/admin/customize/user_fields.json) laden.

(Es ist einfacher zu lesen, wenn Sie eine Browsererweiterung haben, die JSON formatiert.)

Dropdown-Felder sollten in Ordnung sein. Nur Multi-Select-Felder werden Probleme bereiten. Zum Beispiel das Feld “hobbies” im Screenshot, das ich oben gepostet habe.

1 „Gefällt mir“

Ah Mehrfachauswahl – ja, den Teil habe ich übersehen. Ich habe im Moment nur Dropdowns mit Einzelauswahl.

Das ist großartig. Danke!!!

1 „Gefällt mir“

Ich frage mich, ob es in Ordnung ist, dies noch einmal zu öffnen und nach dem Erstellen von Gruppen zu fragen?

  • Ich kann Benutzer von Zapier ohne Probleme erstellen (auch wenn nur auf Einladung aktiviert ist) :white_check_mark:

Die Zapier-Oberfläche erlaubt einzelne API-Header, aber wenn sie ein Objekt verlangt (was das Erstellen einer Gruppe zu erfordern scheint) … bekomme ich dies, selbst wenn ich den Body manuell so formatiere, wie es die API-Dokumentation verlangt:

Erstellen einer benutzerdefinierten Aktion in Discourse fehlgeschlagen

Rohe Anfrage fehlgeschlagen. Problem bei der Ausführung Ihrer Anfrage: Fehlercode 400: Parameter fehlt oder der Wert ist leer: group

Gibt es eine Möglichkeit, dieses anfängliche Objekt group { zu senden und es mit Zaiper wieder zu schließen?

Jede Einsicht wäre erstaunlich und sehr willkommen!

Ich habe es gelöst – ich musste Zapier’s Webhooks im vollständig angepassten Modus verwenden, damit ich alle Header manuell eingeben konnte.

Dann habe ich einfach den Bereich Daten/Body eingefügt und es funktionierte … in keinem anderen Modus funktionierte es.

3 „Gefällt mir“