💪

トレーニング記録を簡単にするDify × Notionのワークフロー構築方法

2024/08/12に公開

はじめ

リングフィットアドベンチャーや、ジムのトレーニングマシーンなどでトレーニングしています。
トレーニング記録は通常、個々のゲーム、モバイルアプリに記録されます。
これを一つにまとめるため、
ゲーム、トレーニングマシンのトレーニング結果の画像をアップロードするとNotionに記録されるようにしました。
今回はDifyを利用したので、これを実現するためのワークフローの作り方を話していきます

https://youtu.be/OyFSFrVzo1I

構成

このシステムで必要な要素は以下の通りです。

  1. 画像から文字を読み取る
  2. 文字からトレーニング記録に必要な項目を抜き出し、jsonにする
  3. Notion APIでトレーニング記録をデータベースのアイテムとして追加する

Dify[1]で1〜3の全てが実現できるワークフローをDifyで構築しました。
ワークフローのDSLはGitHubとSUZURIで公開しています。
https://gist.github.com/yukyu30/e542fe962057277decd8e7abc62fa43e#file-image_to_notion-yml

https://suzuri.jp/yukyu30/digital_products/59812

1. Notion Integrationの追加

以下のプロパティをすべて持つデータベースを作成します。

DifyからNotionのデータ操作をするため、Notion Integrationを作成します。

  1. Integration管理ページから新しいインテグレーションをクリック

  2. 設定を入力し、保存

    • 関連ワークスペース: 操作をしたいデータベース等が存在するワークスペースを選択
    • 種類: 内部(Internal)
  3. 内部インテグレーションシークレット> 表示> コピーでコピーしたものは保存しておきます(後ほど使用します)

ユーザー機能に関して

メールアドレスを含むユーザー情報を読み取るがデフォルトですが、ユーザー情報なしでもOKです。

  1. 先ほど作成したデータベースを開き、三点メニュー > 接続先 > 先ほど作成したインテグレーション をクリック

  2. データベースのURLのうち、自分のワークスペースネーム以降の文字列がデータベースのIDになります。データベースIDもコピーして、保存しておきます
    https://www.notion.so/workspace_name/<ここの文字列>?v=dc12369c925843fb876a64d0c10fa1bf

以上でDifyからNotionのデータ操作する下準備が終わりました

2. Difyでのワークフローの構築

ワークフローのDSLは以下で公開しています。これをDSLをインポートした前提で説明をします。
https://gist.github.com/yukyu30/e542fe962057277decd8e7abc62fa43e#file-image_to_notion-yml

  1. インポートした後に
    Environment Variablesを設定します。
環境変数名
NOTION_VERSION 2022-06-28
NOTION_INTEGRATION_SECRET_KEY 1. Notion Integrationの追加でコピーしたインテグレーションシークレット
NOTION_DATABASE_ID 1. Notion Integrationの追加で保存したデータベースID
  1. 機能から画像をONにします

以上でワークフローの設定は完了です。
リングフィットアドベンチャーなどのリザルト画面を送信することで、Notionに記録されるようになりました!

以降ではワークフローのポイントのみを記載します。
各ノードの詳細設定は、DSLをインポートしてご覧ください。

JSONの構築

Notionのデータベースにアイテムを追加するために、Notionのデータベースに沿ったJSONを作成する必要があります。
最終的には以下のようなJOSNが必要となります。

{
  "parent": { "database_id": "{{ page_id }}" },
  "properties": {
    "Name": {
      "title": [
        {
          "text": {
            "content": "{{ time }}"
          }
        }
      ]
    },
    "kcal": {
      "number": {{ kcal }}
    },
    "minutes": {
      "number": {{ minutes }}
    },
    "km": {
      "number": {{ km }}
    }
  }
}

kcal、 minutes、 kmを画像から取得するところだけをLLMで行い、完全なJSONの作成はテンプレートノードで行います。

LLMノードでは、response_formatはjson_objectにします。

LLMノードの出力はStringとなっています。そこで、コードノードで、それぞれの値を取り出します。

テンプレートノードでNotion APIで送信するデータを作成します。

これにより、データベースにアイテムを追加するための完全なJSONが作成できました。

おわりに

Notionのデータベースにアイテムを追加する箇所だけ別のワークフローに切り出し、ツールとすることで、他のワークフローから呼び出せるようになります。

Notion Web Clipperでデータベースにアイテムを追加したら、makeからワークフローのAPIを実行して、クリップした記事の要約を要約カラムに追加するといった、Notion AI的な使い方もできます。

自分の記事ではないですが、領収書をOCRしてNotionで管理する記事も参考になるかと思います!
https://zenn.dev/acntechjp/articles/a018d81a790895

脚注
  1. オープンソースのLLMアプリ開発プラットフォーム (https://dify.ai より引用) ↩︎

Discussion