pfaffman
(Jay Pfaffman)
1
API を使用してアクティブなユーザーを作成しようとしています。
これは 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"
Zapier から同じ呼び出しを行うと ( production.log の Parameters が同じように見えることを確認しました)、ログに次のようなメッセージが表示されます。
Filter chain halted as :respond_to_suspicious_request rendered or redirected
そして何も起こりません。
これに対する回避策はありますか?
def suspicious?(params)
return false if current_user && is_api? && current_user.admin?
honeypot_or_challenge_fails?(params) || SiteSetting.invite_only?
end
「いいね!」 2
simon
2
is_api? で失敗していると推測します。コードを見ると、Zapier からのリクエストでそれが失敗する理由は明らかではありませんが、他に失敗する箇所は見当たりません。
数週間前に、Zapier を介したユーザー作成に関する同じ問題について誰かに尋ねられたため、これに興味があります。
「いいね!」 2
pfaffman
(Jay Pfaffman)
3
もう一つの考えは、ZapierがAPIキーを正しく渡していないということですが、それは別のエラーになると思います。
同じ人だと思います。
「いいね!」 2
bedgarsf
(Brian Edgar)
4
はい。これが機能しないことに驚きましたが、少なくとも自分だけではないことがわかりました。
パイロットプログラムの概念実証として、外部データベースとZapierやMakeのような自動化ツール(Makeでも同様のエラーが発生していました)を使用するアプローチを検討しています。
短期的なパイロットフェーズでは、これらのツールのいずれかを使用せずに済ませることができますが、長期的にはDiscourseはより大きなプラットフォームの一部となり、メンバー管理やその他のサービスを備えた別のバックエンドで外部データベースのメンバーを管理する必要が確実にあります。
「いいね!」 1
simon
5
Zapierでのリクエストの構造が原因である可能性があります。ZapierのWebhooksアクションを使用して、次のように試してください。
「イベント」として「POST」を選択します。次に:
URL:https://forum.example.com/users.json
ペイロードタイプ:「json」
データ:
name:<ユーザーのフルネーム>(ドキュメントでは必須と表示されていますが、省略しても問題ないはずです)
username:ユーザーのユーザー名
email:ユーザーのメールアドレス
password:サイトの要件を満たすパスワード
active:「true」(引用符付き)
approved:「true」(引用符付き)
ヘッダーセクションにApi-KeyとApi-Usernameを追加します(私はsystemをApi-Usernameとしてのみ試しました)。
他のすべてのセクションはデフォルト値を使用してください。
以下に、偽のデータを使用したスクリーンショットをいくつか示します。
これで動作するはずです。動作しない場合は、Discourseサイトで「招待のみ」設定が有効になっていないことを確認してください。
動作するかどうかを確認するために、Zapier CLIを使用して新しいユーザーを作成するカスタムインテグレーションも作成しました。Discourseが望むなら、そのアクションを公式のDiscourse Zapに追加することも可能です。ただし、ユーザー作成アクションを追加することが優先事項かどうかはわかりません。招待の作成やユーザーの停止などのリクエストほど頻繁にはリクエストされていないと思います。
さらなるテストからのメモ:
-
ペイロードタイプは「json」または「form」のいずれかに設定できます。リクエストでカスタムフィールドを設定するには、ペイロードタイプを「form」に設定する必要があります。
-
マルチセレクトカスタムフィールドは少し問題があります。Zapierはデータセクションで重複したキー名を許可しません。Zapierの「カスタムリクエスト」アクションを使用して、マルチセレクトカスタムフィールドを設定できるはずです。
-
activeおよびapprovedパラメータの値は、引用符で囲む必要はありません。
「いいね!」 2
bedgarsf
(Brian Edgar)
6
@simon ありがとう!うまくいきました!Zapier がデータフィールドを作成する方法に関する問題を、あなたのスクリーンショットが解決するのに役立ちました。少し奇妙な動作をしていましたが、私は基本的に Airtable へのデータのフォーマット/マッピング方法を理解していませんでした。エンドツーエンドの自動化を機能させる必要がありますが、ユーザー作成は間違いなく機能しました。
参考までに @pfaffman
「いいね!」 4
bedgarsf
(Brian Edgar)
7
こんにちは、@simon さん。フォーマットの件、改めてありがとうございました。
現在、ユーザープロファイルにカスタムフィールドを追加し、Zapier を使用して新しい Discourse ユーザーにそれらを投入しようとしています。どうやらリクエスト全体が失敗し、「ユーザーの全フィールドが入力されていません」というメッセージが表示されるようです。
この投稿を見つけたので、JSON から form に切り替えてみましたが、うまくいきませんでした。
カスタムプロファイルフィールドのフォーマットについて、何かアドバイスはありますか?よろしくお願いします!
「いいね!」 1
simon
8
ペイロードタイプを「form」に変更すると機能します。
ただし、このアプローチはマルチセレクトドロップダウンフィールドでは機能しません。このタイプのフィールドについては、「カスタムリクエスト」アクションを使用する必要があると思います。機能させるには、少し試行錯誤が必要になるかもしれません。
「いいね!」 1
bedgarsf
(Brian Edgar)
9
すごい!あなたはまさにZapierとDiscourseのグランドウィザードですね。赤い矢印を変更したら、一発でうまくいきました。フィールド名にしてしまっていましたが、もちろん、それは上流ではわからないので意味がありません。ですから、新しく作成するフィールドはすべて[#]を使用すれば、自動的に順番にマッピングされるのでしょうか?たくさん、10個くらい作成する予定です。また、テストフィールドがドロップダウンであっても問題なく動作したようですが、それはAirtableから取得しているだけだからでしょうか?
「いいね!」 1
bedgarsf
(Brian Edgar)
10
実際には、エンドツーエンドのテストは行っていません。Zapはテストしましたが、ドロップダウンフィールドでは機能しました。
simon
11
はい、フィールドの id を [] に入れるだけです。フィールドの ID は、管理 / カスタマイズ / ユーザーフィールドページの JSON バージョン(/admin/customize/user_fields.json)を読み込むことで取得できます。
(JSON をフォーマットするブラウザ拡張機能があると、読みやすくなります。)
ドロップダウンフィールドは問題ありません。問題が発生するのはマルチセレクトフィールドのみです。例えば、上記のスクリーンショットの「趣味」フィールドです。
「いいね!」 1
bedgarsf
(Brian Edgar)
12
マルチセレクトですね、その部分を見落としていました。今はシングルセレクトのドロップダウンしかありません。
これは素晴らしいです。ありがとうございます!!!
「いいね!」 1
グループの作成について、もう一度お伺いしてもよろしいでしょうか?
- Zapierからユーザーを作成することは問題なくできます(「招待のみ」がオンになっていても)

Zapierのインターフェースでは個別のAPIヘッダーを指定できますが、オブジェクト(groupの作成に必要と思われるもの)を要求されると、APIドキュメントの要求どおりに手動でフォーマットを編集した場合でも、以下のエラーが発生します。
Discourseでカスタムアクションの作成に失敗しました
Raw request failed. Problem executing your request: Error code 400: param is missing or the value is empty: group
Zapierを使用して、最初のオブジェクト group { を送信し、それを閉じることは可能でしょうか?
何かご存知でしたら、ぜひ教えていただけると幸いです!
JamesNorth
(James North)
14
解決しました。ZapierのWebhooksを完全にカスタマイズされたモードで使用する必要がありました。これにより、すべてのヘッダーを手動で入力することができました。
次に、データ/本文エリアに貼り付けただけで、機能しました。他のどのモードでも機能しませんでした。
「いいね!」 3