Front App で Discourse API を使用する

こんにちは!現在、Front App と Discourse の連携に取り組んでいます。現時点では、Pipedream を使ってこれらを接続しています。

2 つのワークフローをセットアップできました:

  1. Discourse → Front App。Discourse で新しいメッセージが届くと、そのメッセージが Front に投稿されます。
  2. Front → Discourse。Front でインポートされた Discourse のメッセージに返信すると、Pipedream の Webhook が Front の新しい返信を監視し、Discourse API を使ってその返信を Discourse に投稿します。これはうまく機能しているのですが、Front 側を見ると、私の返信が表示されてしまいます(これはワークフロー 1、つまり Discourse で新しいメッセージが届いたときにトリガーされるためです)。その結果、受信トレイのスレッドに 2 つのメッセージが表示されてしまいます。Front から送信されたメッセージと、ワークフロー 1 によってインポートされた同じメッセージです。

最初のワークフローで取り込まれた Front からのメッセージを「除外」する方法をご存知でしょうか?Discourse API でこれは可能でしょうか?

よろしくお願いいたします!

こんにちは :wave: 、素晴らしい統合をされているのですね。

よりお手伝いできるよう、いくつか質問させてください。

  1. ルーティングは、Discourse の PM(プライベートメッセージ)の作成時に行っていますか、それとも新規トピックやトピックへの返信時に行っていますか?

新規トピックやトピックへの返信時にルーティングを行う場合……

  1. Discourse インスタンスでは、Front に新しいメッセージとして送信するために、すべてのトピックやトピックへの返信をルーティングしていますか?

  2. Front からメッセージに返信する際、元のトピックに返信するために API を使用していますか?

こんにちは、Jordan さん!

返信ありがとうございます。:blush:

ご質問への回答です:

  1. はい、Front へのトピックまたはトピックへの返信は「任意のトピック」です。
  2. 私が Front から返信すると、Pipedream で生成された URL を介して送信され、それが Discourse の POST API をトリガーして元のトピック(トピック ID で特定)に送信されます。

つまり、仕組みは以下の通りです:
私が Front で誰かに返信メッセージを送信します。
その後、Discourse API(ワークフロー 1)がフォーラムに新しいメッセージが届いたことを検知し、それを Front に新しいメッセージとして送信します。

重複したメッセージは避けたいのです。

少し混乱しやすい話かもしれないので、もし私の説明が不十分でしたらおっしゃってください。:sweat_smile: ご助言をいただければ大変助かります!

つまり、Discourse のトピックが作成された初回のみ Front へメッセージとしてプッシュし、それ以降は二度と行わない、と理解してよいでしょうか?

私の理解は正しいでしょうか?

  1. Discourse でトピックが作成される
    1a) そのトピックが Front のメッセージに変換される
  2. ユーザーが Front のメッセージに返信する
    2a) その Front のメッセージが、作成されたトピックへの返信として Discourse へプッシュされる

ここで、Discourse ユーザーが 2a の返信に対してさらに返信することはあるのでしょうか?それとも、この時点で会話は終了するのでしょうか?

私がこの点を確認したい理由は、Front から Discourse へトピックが作成される際、投稿 ID を確認する処理を検討する必要があるかもしれないからです。もし Front が post id#345 の作成を Discourse でトリガーした場合……

……その際、Discourse の投稿を Front の投稿に変換する Pipedream のコードでは、作成直後の Post Id と一致しないかを確認し、一致する場合は Front メッセージへ変換しないように設定できます。

これは Pipedream で可能でしょうか?私はその製品に詳しくありません。

はい、Discourse ユーザーは引き続き 2a に返信できます。この機能は正常に動作しています!コミュニティメンバーから新しい Discourse メッセージが送信されると、自動的に Front のスレッドに追加されます。

このスクリーンショットでより明確に説明できます:

ご覧の通り、Front 経由で「Just a test message from Front」と返信しました。このメッセージが Discourse に投稿されるため、Discourse API が新しいメッセージとして検知し、スレッドに新たなメッセージを送信します。

あなたの返信をきっかけに考えが浮かびました:thinking: Front の ID を検知して、Discourse の「メッセージ送信」API での送信を除外する機能を作成するのはどうでしょうか。試してみます。お手伝いいただきありがとうございます!:blush:

@jordan.vidrine さん、お手伝いいただきありがとうございます!このスレッドで一緒に話し合う中でアイデアが浮かび、今では問題が解決しました。:sparkles: 特に以下の部分です:

お尋ねしている理由は、フロントから来た際に投稿 ID を作成時に確認する必要があるかもしれないからです。Front が Discourse 上で投稿 ID#345 の作成をトリガーした場合

ありがとうございました!

それは素晴らしいですね!お役に立てて光栄です :+1: