これは、https://{defaultHost}/invites/link.json API が本日機能しなくなったことに関連していますか?
わかりませんね。もしかしたらそうかもしれませんか?このエンドポイントには詳しくありません。
さて、私たちの自動化システムから数百件のメールが失敗するようになりました。以前は https://{defaultHost}/invites/link エンドポイントを使用していました。しかし、404 エラーが発生し始めました。ドキュメントを確認したところ、エンドポイントが https://{defaultHost}/invites/link.json(末尾に .json が追加)に変更されたことが記載されていました。しかし、この変更を行っても引き続き 404 エラーが発生します。
どのように修正すればよいか見当がつかない状況です。招待リンクを生成して自社のシステムを通じて送信する必要があります。本日まで正常に動作していたのですが。
また、そのアドレスに対して PUT を実行すると BAD REQUEST が返されますが、存在しないアドレスに対して PUT を実行すると NOT FOUND が返されます。これが、エンドポイントが存在しているが単に機能していないことを示唆しているのか、確信が持てません。
もしかしたら、https://d.strumenta.community/ で Discourse のインスタンスをホストしていることを明記すべきかもしれません。
メール招待とリンク招待を統合したため、当該 API エンドポイントは https://{defaultHost}/invites.json に移動しました。
わかりました、ドキュメントが最新ではないようです。
このエンドポイントは招待リンクを生成しますが、メールは送信しないのでしょうか?
ドキュメントによると、/invites.json と /invites/link.json の違いはメールの送信の有無だと記載されています。
また、/invites.json への POST リクエストが「BAD REQUEST」を返してしまいました→私のミスです。'ではなく"を使うべきでした
修正後、ユーザーにメールが送信されたという回答が返ってきましたが、これを防止したいです。
API の変更時に通知が届き、現在のドキュメントにアクセスできる機能が役立つと思います。そうでないと、突然機能が壊れても修正することができません。
可視化のためにここに追加します:
$ curl 'http://localhost:3000/invites.json' -X 'POST' \
-H "Api-Key: d5fc02c5f4efaafacc82e4ff3410ae283d1c5da68ac43430d5133aaf4785593f" \
-H "Api-Username: dan" \
-H "Content-Type: application/json" \
-d "{\"max_redemptions_allowed\":5}"
{"id":18,"link":"http://localhost:3000/invites/6f524dba4ced35ecae709a8614db3b05","redemption_count":0,"max_redemptions_allowed":5,"custom_message":null,"updated_at":"2021-03-10T15:44:44.259Z","expires_at":"2021-04-09T15:44:44.258Z","expired":false,"topics":[],"groups":[]}%
API ドキュメントを更新いたします。ご指摘いただきありがとうございます。ご迷惑をおかけして申し訳ございません。
同じユーザーからの招待リンクの場合、エラーをスローするのではなく既存の招待リンクを返すように create が動作すると嬉しいですね。422 エラーレスポンスは非常に一般的で、テストが失敗する理由を理解するのに長い時間を費やしてしまいました。
メールアドレスで既存の招待を取得するための PR を追加しました: FEATURE: Retrieve an existing link only invite by jessicah · Pull Request #12575 · discourse/discourse · GitHub
未公開のフラグ skip_email を発見しました。これによりメールの送信が防止され、リンクを取得するだけで済みます。本体にメールアドレスと一緒にこのフラグを渡せば問題なく動作します。
{
"email": "someone@test.com",
"skip_email": "true"
}
簡易的なテストを行いましたので注意点として申し上げますと、このフラグを使ってメールリンクを生成した場合、後から自動的にメールを送信することはできません。skip_email を使用すると、emailed は常に false を返します。
Discourse API Docs に、招待/取得に関する記述がないのは何か理由があるのでしょうか?それとも私が見落としているのでしょうか。
外部データベースに存在するメールアドレスを招待したいのですが、a) すでにアカウントを持っていない場合、かつ b) すでに招待されていない場合のみ招待したいと考えています(このプロセスは定期的に実行され、招待にすぐに応答しなかった人をスパムしたくありません)。invites/retrieve.json は、コミットの内容から判断すると、b) を確認するための適切な方法のようです。
APIドキュメントに記載がないのは、単なる見落としだと思われます。追加作業を進めます。
それらが現在のDiscourseコアによって生成されるか、少なくともテストされるといいですね。
仕様を実行してテストするための、それほど難しくない方法(おそらく私が信じたい1時間ではなく2日間の作業になるでしょう!)があるはずです。ああ、あるいは、https://redocly.com/ はそのためにあるのでしょうか?
私のユースケースにとって本当にありがたいのは、すべてのユーザーによって招待されたすべての招待を取得する方法です。もし「すべてのユーザーによって」が実現不可能な点であれば、私のユースケースでは(状態に関係なく)すべての招待を取得できれば問題ありません。
この方法では、テーブルに存在する可能性が低い1000件のメールアドレスであっても、すべての可能性をポーリングすることを強いられます。
How to get a password from database? - #3 by pfaffman は、データベースはデフォルトでは公開されていないことを示しているため、外部プロセスからコードを使用してDBにアクセスすることは、少なくとも私の現在の実装では直接はできません。また、いずれにしてもDBポートを公開するのは良い考えではないかもしれません。
外部データベースにあるメールアドレスの招待とグループメンバーシップを自動化しようとしています。
そして2回、データエクスプローラープラグインに言及がありましたが、これもここでの答えです。ただし、Run Data Explorer queries with the Discourse API でできることも知っておく必要があるかもしれません。
ああ、なるほど、それが私が欠けていた重要な点でした。教えてくれてありがとうございます。


