メモ・タスク管理ツールにNotionを使っています。

一部、仕事のプロジェクト用(私は税理士をしているので、お客様ごとの情報を集約)

として活用しているのですが、

 

普段利用しているGmailの直近のやり取りを

お客様ごとに集約できれば楽だよな〜

 

と思い、Notion API(Notionと外部アプリを連携する仕組み)で、

Gmailの一覧をNotionのデータベースに転記するGAS(Google Apps Script)を作ってみたので、

シェアします。

 

大まかな流れ

Gmailから直接Notionに転記するのは難しそうだったので、

Gmailからスレッドを取得

Spreadsheetに転記

Notionのデータベースに転記

と、一旦Spreadsheetを通す流れにしました。

 

手順1 NotionのAPIキーを取得する

Notion APIを利用するためのAPIキーを取得します。

こちらのサイトから、取得できます。

https://www.notion.so/my-integrations/

 

+新しいインテグレーションボタンを押し、

基本情報に名前を適当につけて送信すれば、

APIキーが発行されます(後ほど使います)。

手順2 NotionにGmail一覧用のデータベースを作る

次に、転記するためのデータベースをNotionに作っておきます。

  • 差出人(Sender:プロパティはタイトル)
  • 受信日付(Date:プロパティは日付)
  • 件名(Subject:プロパティはテキスト)
  • 内容(content:プロパティはテキスト)

の5つにしました。

 

手順3 データベースIDを取得する

手順2で作ったデータベースのID(GASを書くときに利用します)

を取得します。

データベースの右上の3つの点マークから「ビューのリンクをコピー」をクリック、

どこかに貼り付けて、so/と?の間にある英数字(32文字)コピーします。こちらがデータベースIDとなります。

 

手順4 GmailをSpreadsheetに書き出すGASを書く

それでは、いよいよGASを書いていきます。

Spreadsheetを新規作成して、拡張機能→Apps Scriptを開きます。

 

今回書いたGmailのリストをSpreadsheetに書き出すGASコードは、以下のとおりです。

/function gmailToNotion() {

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var specificSender = '*******'; // 抽出したい特定の差出人のアドレス
  var startDate = new Date('2023-**-**'); // 検索開始日
  var endDate = new Date('2023-**-**'); // 検索終了日
  var query = 'from:' + specificSender + ' after:' + formatDate(startDate) + ' before:' + formatDate(endDate); 
  var threads = GmailApp.search(query, 0, 50); // クエリに基づいてメールスレッドを検索
  var data = [];

  threads.forEach(function(thread) {
    var messages = thread.getMessages();
    messages.forEach(function(message) {
      var from = message.getFrom(); // 差出人
      var date = message.getDate(); // 日付
      var subject = message.getSubject(); // 件名
      var body = message.getPlainBody(); // 内容

      data.push([from, date, subject, body]);
    });
  });

  if (data.length > 0) {
    sheet.getRange(sheet.getLastRow() + 1, 1, data.length, 4).setValues(data);
  }


// 日付をGmailの検索フォーマットに変換する関数
function formatDate(date) {
  return Utilities.formatDate(date, Session.getScriptTimeZone(), 'yyyy/MM/dd');
}/

このコードでは、

  • 差出人アドレスをあらかじめ抽出
  • 検索する期間を指定
  • メールスレッドは50まで

と条件をつけています(もしご利用の場合には該当部分を書き換えてみてください)。

実行すると、条件に合うGmailのデータが↓のようにSpreadsheetにデータ転記されます。

 

手順5 SpreadsheetからNotionのデータベースに転記するGASを書く

続けて、SpreadsheetからNotionのデータベースに転記するGASを書きます。

今回書いたGASは以下のとおりです。

/var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('test'); // シート名を適宜変更
  var range = sheet.getDataRange();
  var values = range.getValues();

  var notionApiKey = '******'; // Notion APIキー
  var databaseId = '******'; // NotionデータベースID

  values.forEach(function(row) {
    var sender = row[0]; // 1列目:差出人名
    var date = row[1]; // 2列目:日付
    var subject = row[2]; //3列目:件名
    var content = row[3]; //4列目:内容

    // コンテンツを1000文字に制限
    if (content.length > 1000) {
      content = content.substring(0, 1000) + '...'; // 1000文字を超える場合は切り詰める
    }

    var payload = {
      "parent": { "database_id": databaseId },
      "properties": {
        "Sender": {
          "title": [
            {
              "text": {
                "content": sender
              }
            }
          ]
        },
        "Date": {
          "date": {
            "start": new Date(date).toISOString()
          }
        },
        "Subject": {
          "rich_text": [
            {
              "text": {
                "content": subject
              }
            }
          ]
        },
        "Content": {
          "rich_text": [
            {
              "text": {
                "content": content
              }
            }
          ]
        },
      }
    };

    var options = {
      "method": "post",
      "headers": {
        "Authorization": "Bearer " + notionApiKey,
        "Content-Type": "application/json",
        "Notion-Version": "2021-08-16"
      },
      "payload": JSON.stringify(payload)
    };

    UrlFetchApp.fetch('https://api.notion.com/v1/pages', options);
  });
}/

 

上記のコードの中の、

  • Notion APIキー
  • NotionのデータベースID

は、先ほど取得したものをコピペします。

全体の内容としては、

Spreadsheetの項目を順番に取得し、

それぞれNotionのプロパティにマッピングして、

最後にpostリクエスト(書き込み)を出しています。

 

ちなみに、何度もエラーが出るので

調べたところ、Notionの仕様で、テキストが1,000文字までに制限されていました。。

ということで、コンテンツは1,000文字まで転記するよう

制限をつけています。

 

それぞれのNotionのプロパティのマッピングの書き方は公式Referenceで公開されています。

https://developers.notion.com/reference/property-object

 

試してみよう!

以上のコードを実行すると、Gmailから特定の差出人を抽出してSpreadsheetに転記→Notionに転記

してくれます。

 

今回は、試しにfreee株式会社パートナー事業本部さんから

きている、直近3ヶ月間のGmailを抽出してNotionに転記してみました。

 

それぞれページを開ければ、詳細を見ることができます。

 

今回は特定の差出人に絞りましたが

別のページからlinked databaseでデータベースをリンクし、

フィルタで特定のアドレスを抽出して表示することも簡単にできます。

https://youtube.com/shorts/NK5_ycwdFgE?si=S7LJA6Qae0W7zaat

 

お客様情報の一部に、Gmailの直近のやり取りを表示させておけば、

整理しやすくなりそうです。

 

プログラミングはChatGPTに書いてもらおう!

ちなみに、ノンエンジニアの私ですが

今日紹介したコードはほとんどChatGPTに書いてもらいました。

私が対応するのはエラーの時だけ。

Notion APIのコードもほぼ正しく書けるのは本当にびっくりしました。

ChatGPTの一番効果的な使い方だと思っています。

 

まとめ

Notion APIでGmailの一覧をデータベースに追加するGoogle Apps Scriptの作成を

試してみたので、その手順をまとめてみました!

Notionのような便利なツールと、

ChatGPTでコードを書いてもらうことによって

ノンエンジニアでも業務を効率化できるツールを手作りできる時代になっています。

是非、お試しください。

« »