Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

通知ファイアウォール by Gemini

Last updated at Posted at 2025-01-02

目次

  1. 通知洪水に歯止めをかけたい
  2. geminiに通知を見張らせる
  3. フローチャート
  4. 定常通知分析&タスク追加を実演
  5. あなたの手元にも通知警備員を!

通知が多い!

多すぎる。通知が!

LINEに関しては、常に公式アカウントからの通知が100件超える始末だ。

スクリーンショット 2025-01-02 19.55.54.png

オトモダチからのLINEメッセージの打率は1割を切っているとみていい。

いらない情報はカットされるべきだろう。

なにせそうでもしないと、1日にスマホを2600回触るハメになるからだ。(Hansen,Anders)

Geminiにタイムラインを見張らせろ!

そうだ。自分の代わりにスマホのTL(タイムライン)を見張らせて、

大事そうなメッセージだけ俺に教えてくれればいいじゃん!

と、いうわけでシステムを組んでみた。

フローチャート

別の機会で作った図⇩
スクリーンショット 2025-01-02 17.59.11.png

詳解
スクリーンショット 2025-01-02 18.08.45.png

実演動画

定期実行の実演
・「みかんを買ってきて!」というお使いLINEを検知し鳴るスマホ
・予定に言及するメッセージへ対応し、todoリストを自動で追加するプログラムも実行中。
 例:「明日宿題教えて!」=>「明日宿題教える」とtodoタスクを追加。

重要内容の自動抽出

タスクの自動追加

公開taskerプロジェクト

使用方法
1 「resheetmodule」の「Auth」を選択しスプレッドシートIDを自分のものに変更する
2 ホームの「通知が表示された Gmail, me」を使用できる状態にする

taskerの方のプログラムファイルのダウンロードリンクです。

公開GASコード

実装方法
1 テンプレートをダウンロード。
2 開いて「拡張機能」からgoogle app scriptを起動。
3 以下のプログラムをコピペして載せる。
4 「トリガー」から定期実行させるようにする。
5 この記事の下の「listIDプログラム」の指示に従い設定する。

sort.gs
function endless_sort() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var rows = sheet.getLastRow()-1;
  var range = sheet.getRange(2,1,rows,4);
  range.sort({column:1,ascending:false});
}
get_gemini.gs


const GEMINI_API = 'APIキーを入力';

function redirect_GeminiPro() {

  Utilities.sleep(5000);

  //通知文を取得
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName('notion data');
  var cell = sheet.getRange('B2');
  var notiontxt = cell.getValue();
  Logger.log("通知文:" + notiontxt);

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName('prompt data');
  var cell = sheet.getRange(2,4,15);
  var prompttxt = cell.getValues();
  Logger.log("指示文:" + prompttxt);

 
  //geminiと通信
  const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=${GEMINI_API}`
        , payload = {
            'contents': [
              {
                'parts': [{
                  'text': prompttxt + ";" + notiontxt
                }]
              }
            ]
          }
        , options = {
            'method': 'post',
            'contentType': 'application/json',
            'payload': JSON.stringify(payload)
          };

  const res = UrlFetchApp.fetch(url, options)
        , resJson = JSON.parse(res.getContentText());

  // responseがちゃんと返ってきていることを確認
  if (resJson && resJson.candidates && resJson.candidates.length > 0) {
    /** 以下の位置を取得
    {
      "candidates": [
      {
        "content": {
        "parts": [
        {
          "text": 
    */
    console.log(resJson.candidates[0].content.parts[0].text);
    const response = resJson.candidates[0].content.parts[0].text
  } else {
    // HARM_CATEGORYによって、無回答の場合も多々あり
    console.log('回答が返されませんでした。');
  }
  
  if(resJson.candidates[0].content.parts[0].text.match('はい')){
    //メールを送信する
    //送信先のメールアドレス
    const recipient = "メアド";
    //メールの件名
    const subject = "notionF_servise";
    //メールの本文
    const body = "notiontxt"
  
    //メールを送信する
    GmailApp.sendEmail(recipient, subject, body);
    console.log ("メールは正常に送られました")
  }else {
    // HARM_CATEGORYによって、無回答の場合も多々あり
    console.log('メールは送られませんでした。');
  }
  
};


add_shedule.gs
function add_schedule() {

  Utilities.sleep(10000);

  //通知文を取得
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName('notion data');
  var cell = sheet.getRange('B2');
  var notiontxt = cell.getValue();
  Logger.log("通知文:" + notiontxt);

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName('prompt data');
  var cell = sheet.getRange(2,2,15);
  var prompttxt = cell.getValues();
  Logger.log("指示文:" + prompttxt);

 
  //geminiと通信
  const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=${GEMINI_API}`
        , payload = {
            'contents': [
              {
                'parts': [{
                  'text': prompttxt + ";" + notiontxt
                }]
              }
            ]
          }
        , options = {
            'method': 'post',
            'contentType': 'application/json',
            'payload': JSON.stringify(payload)
          };

  const res = UrlFetchApp.fetch(url, options)
        , resJson = JSON.parse(res.getContentText());

  // responseがちゃんと返ってきていることを確認
  if (resJson && resJson.candidates && resJson.candidates.length > 0) {
    /** 以下の位置を取得
    {
      "candidates": [
      {
        "content": {
        "parts": [
        {
          "text": 
    */
    console.log(resJson.candidates[0].content.parts[0].text);
    var tax = resJson.candidates[0].content.parts[0].text
   
    var taskListId = "";  // タスクリストID

  var task = {
    title: tax // タスクのタイトルを設定
  };

  
  // Google Tasks APIを使ってタスクをタスクリストに追加
  var result = Tasks.Tasks.insert(task, taskListId);
  Logger.log("タスクが追加されました: " + result.title);

  /* 要素が多すぎるので凍結
  //アクセス可能なカレンダーのIDを指定して、Googleカレンダーを取得する
  let myCalendar = CalendarApp.getCalendarById('メアドを入力');
  //Googleカレンダーに登録する日付を設定する
  let startDate = new Date(getFullYear(), month, day);
  myCalendar.createAllDayEvent(name,startDate);
  */
 

  } else {
    // HARM_CATEGORYによって、無回答の場合も多々あり
    console.log('回答が返されませんでした。');

}
}

todoリストIDの取得用プログラム_使用方法
1 google_cloudコンソールで「taskerAPI」を有効化
2 以下のプログラムをGAS上で実行
3 add_shedule.gsにリストIDを代入

get_listID.gs
function getList() {
  var taskLists = Tasks.Tasklists.list();
  Logger.log(taskLists.items[0].title);
  Logger.log(taskLists.items[0].id);
}

geminiAPIキーの所得方法

以下のサイトでゲットする。やり方は検索しても出てくる。

参考サイト

終わり!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?