これについて考え、chat.postMessage Slack API ドキュメントを読んだ結果、私の長々とした説明をより単純なものに簡略化できると考えました。
現在、follow ではなく watch のみがスレッド応答を選択できる機能を持っていますが、その仕組みについてはまだ調査中です。あるいは、@david さん、優先順位を mute → thread → watch → follow とする新しい thread ルールフィルターを導入し、そのルールを trigger_notification に流してルールに応じた動作を実現するのはどうでしょうか?
-
watchがスレッド化するように設定されている場合(あるいはthreadルールが定義されている場合)、新しい投稿の通知を Slack チャンネルに送信する際、その投稿トピックに Slack のtsが関連付けられていれば、そのts値をthread_tsとして設定し、該当する Slack スレッドに投稿します。 -
新しい投稿の通知を Slack チャンネルに送信する際、その投稿トピックに
tsが関連付けられていない場合は、トピックに対して返されたレスポンスのtsを保存します(これにより、将来そのトピックへの投稿をwatchがスレッド化するように設定されている場合にスレッド化できます)。 -
post thread :thread_urlコマンドを使用する際、作成されるトピックにスレッドのtsを保存します。これはスレッド化されたwatchルールでのみ使用されます。
現在の考えと懸念点は以下の通りです:
-
ルールごとにスレッドへの投稿を決定する方法。現時点では新しいフィルターが最も簡単だと考えられますが、何か見落としているかもしれません。
-
元の Slack 投稿 URL とスレッド ID をトランスクリプトフローに渡す処理が、現在最も不明確です。これを実現するには、プロバイダーごとのスレッド ID をどこかに追加し、投稿を保存するまで保持する必要があるようです。現在は Slack の
tsに対してのみ実装しますが、スレッド機能を備えた他のチャット統合も想定されます。 -
投稿については、一般的な
DiscourseChatのカスタムスレッドフィールドではなく、Topic に Slack 固有のカスタムフィールドとして Slack のtsを保存する必要があると考えます。