Difyを使ってslackのやりとりをまとめてnotionに保存するアプリを作ってみる
事前準備としては以下をやっておくこと
【Slack】slack appを作る - UGA Boxxx
【Slack】チャンネルのスレッドのやり取りを取得する - UGA Boxxx
【Notion】APIを使ってNotionDBにデータを保存する - UGA Boxxx
まず、Difyで新しくワークフローを作成する
開始ブロックでは以下をinputにする
- slack_url
- notion_db_url
それぞれ、こんな感じのURLを想定している
https://xxxxxxxxx.slack.com/archives/<チャンネルID>/p123456789012345?thread_ts=<スレッドID>&cid=<チャンネルID>https://www.notion.so/myworkspace/<データベースID>?v=<ビューID>
次に、slack_url からgpt-4oを使って thread_ts と cid を抽出するブロックを作る

その2つパラメータを使って、SlackAPIでスレッド情報を取得するHTTPリクエストブロックを作る

返ってくる情報のうち、userとtext以外不要なので、その2つを抽出するブロックを作る
この時、返ってくる情報はコメントの配列なので、抽出した2つのプロパティだけを持つオブジェクトの配列がこのブロックの出力(commentList)となる

userは画面に表示されるユーザー名ではなく、slack内部で持つユーザーID なので誰なのかが特定できない
そこで、userからユーザー名を取得するAPIを使って、ユーザー名に変換する
その前に、リクエスト数を減らすため、userの重複をなくすスクリプトを実行するブロックを作成する

次にイテレーションブロックで、userリスト一個一個の要素に対して、ユーザー名を取得してIDとマッピングするワークフローを作る
idとnameは <ユーザーID>,@<ユーザー名>という文字列を返すようにした

イテレーションを出ると、<ユーザーID>,@<ユーザー名>の配列が出力になるので、これを元に
{ [<ユーザーID>]: "@<ユーザー名>" }
となるようなオブジェクトに変換するブロックを作る
[
このオブジェクトと、前に作った commentList を使って、ユーザー名とテキストをカンマ区切りで繋げた文字列の配列を作る

この配列を結合して、一つのcsvデータにしたらこれを元にLLMに以下をお願いするブロックをそれぞれ作る
- タイトルを考えて!
- 会話をまとめて!
ここはプロンプト力がすごく必要となる
最後にNotion DBに保存するHTTPリクエストを送って終わりなのだが、その準備としてnotion_db_urlからdatabaseIdを抽出するブロックを作る

最後にNotion DBに保存するHTTPリクエストブロックを作って終わり

実行するとNotionの保存されていた