見出し画像

【ChatGPT活用】 Gmailに届いたメールを要約してLINEに送信する自動化GASスクリプト

情報過多の時代です。私たちは毎日、膨大な量のメールやメディアにさらされています。しかし、忙しいスケジュールの中で、すべてを確実に消化するのは至難の業です。

重要な情報を見逃してはいけないと思いつつ、時間の制約に阻まれ、後回しにしてしまう。そんな無力感に陥ったこと、私も度々あります。

そこで、私は一つの解決策を見出しました。

私は、ChatGPTの力を借りて
「Gmailに届く特定のメールを要約して、LINEに送信する自動化スクリプト」を作成しました。

このスクリプトがあれば、もうメールチェックに追われる日々とはおさらば!です。

  1. 気になるメールを逃さない! 特定のラベルやキーワードで絞り込み、必要な情報だけを確実にキャッチ。

  2. AIが要約で時短! 長文メールもChatGPTがサッと要約。大切なポイントを素早く把握。

  3. LINEでらくらく確認! わざわざGmailを開かなくても、LINEで要約を確認可能。忙しい合間にもサッとチェック。

このスクリプトがあれば、情報収集の効率が格段に向上します。

この記事では、そのスクリプトの作成過程を初心者でも理解できるように詳しく説明します。ぜひ、参考にしてみてください。



1. 必要なAPIキーやトークンの設定

まず、OpenAI APIキーとLINEのアクセストークンを設定します。これらのキーとトークンは、それぞれのサービスにアクセスするために必要です。また、Gmailの検索キーワードも設定します。このキーワードを使って特定のメールを検索します。

const openai_key = 'your_openai_api_key';
const line_access_token = 'your_line_access_token';
const gmail_query = '○○○○◯'; // 検索キーワード

Openai APIキー 取得方法
LINEのアクセストークン取得方法

2. OpenAIとLINEのAPIのヘッダー設定

次に、OpenAIとLINEのAPIにリクエストを送信するためのヘッダーを設定します。これらのヘッダーには、認証情報とデータの形式を指定します。

const openai_headers = {
  'Authorization': 'Bearer ' + openai_key,
  'Content-Type': 'application/json',
};

const line_headers = {
  'Authorization': 'Bearer ' + line_access_token,
  'Content-Type': 'application/json',
};


3. GPTに送るプロンプト(指示文)

次に、GPTに与える指示文を設定します。ここでは、メールの内容を簡単に要約するよう指示しています。

const gpt_prompt = `
文章をよく読んで、大切なことを箇条書きで5つにまとめてください。簡単でわかりやすい表現でお願いします。`;


4. メールを処理するメイン関数

次に、Gmailから特定のメールを取得し、その内容を要約してLINEに送信するメインの関数を定義します。

function processEmails() {
  try {
    // Gmailから最新のメール1件を取得
    const threads = GmailApp.search(gmail_query, 0, 1); // 検索結果の最初の1件を取得
    if (threads.length > 0) {
      const messages = threads[0].getMessages();
      if (messages.length > 0) {
        const message = messages[0];
        const body = message.getPlainBody();
        const trimmedBody = body.substring(0, 4000);  // 最初の4000文字を取得
        const date = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy-MM-dd");  // 今日の日付を取得
        const summary_by_gpt = getGPTSummary(trimmedBody, model);
        console.log('Summary:', summary_by_gpt);
        sendLineMessage(date, summary_by_gpt);
      }
    }
  } catch (error) {
    console.error('Error processing emails:', error);
  }
}


この関数では、最新のメール1件を検索し、その内容を取得します。次に、取得したメールの最初の4000文字を使用して要約を生成し、LINEに送信します。

5. LINEにメッセージを送信する関数

次に、LINEにメッセージを送信する関数を定義します。この関数では、今日の日付をメッセージに含めてLINEに送信します。

function sendLineMessage(date, content) {
  try {
    const data = {
      "messages": [
        {
          "type": "text",
          "text": date + 'のメールマガジンの要約です。\n\n' + content  
        }
      ]
    };

    const options = {
      method: 'post',
      headers: line_headers,
      payload: JSON.stringify(data),
      muteHttpExceptions: true
    };

    const response = UrlFetchApp.fetch('https://api.line.me/v2/bot/message/broadcast', options);
    console.log('LINE Response Code:', response.getResponseCode());
    console.log('LINE Response Content:', response.getContentText());
    return response;
  } catch (error) {
    console.error('Error sending LINE message:', error);
  }
}

この関数では、LINEのAPIを使ってメッセージを送信します。

6. OpenAI APIを使って要約を生成する関数

最後に、OpenAIのAPIを使って要約を生成する関数を定義します。

function getGPTSummary(content, model) {
  try {
    const gptCompletionEndpoint = 'https://api.openai.com/v1/chat/completions';

    const data = {
      "model": model,
      "messages": [
        {
          "role": "user",
          "content": gpt_prompt + '\n\n' + content
        }
      ],
      "temperature": 0.0,
      "max_tokens": 2048,  // max_tokensを2048に設定
      "top_p": 1,
      "frequency_penalty": 0,
      "presence_penalty": 0
    };

    const options = {
      method: 'post',
      headers: openai_headers,
      payload: JSON.stringify(data),
    };

    const response = UrlFetchApp.fetch(gptCompletionEndpoint, options);
    const responseJSON = JSON.parse(response.getContentText());
    return responseJSON.choices[0].message.content;
  } catch (error) {
    console.error('Error getting GPT summary:', error);
  }
}

この関数では、メールの内容をGPTに送信し、その要約を生成します。生成された要約はLINEに送信されます。

あとは、1日1回このプログラムが実行するように、トリガーを設定するだけ!

まとめ

このスクリプトを使うことで、Gmailから特定のメールを取得し、その内容を自動で要約してLINEに送信するプロセスが簡単に実現できます。忙しい毎日の中でも、メールマガジンの要約だけでも読むことができるので、情報を見逃すことなく効率的にキャッチアップできます。
ぜひ、ご自身のプロジェクトで試してみてください。

ーーーーーーーーーー
私の書いた本が出版されました!
\Twitterからうまれた/
ちょっと理系なおうち遊びの本

Amazon 売れ筋ランキング  
幼児教育 カテゴリー  有料Top100
ベストセラー1位✨ になりました!
ありがとうございます!

KindleUnlimited, ペーパーバックでも読めます!




この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?