【GAS】Gmailの未読メールをChatworkに通知する

※投稿内容は個人の学習目的の記事であり、所属組織とは一切関係ありません。
　Chatwork公式ドキュメントではございませんので、自己責任でご利用ください。

こんにちわ、さかぐち（[@sakaguchi_mamii](https://twitter.com/sakaguchi_mamii)）です。

今回はGmailの未読メールを15分おきにチェックし、未読メールがあったらChatworkにメッセージを送信しようと思います。

#APIトークンを取得する

Chatworkにログインし、右上のメニューから「API設定」を選択する。
<img width="210" alt="API設定.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/4ef9404f-037d-c32d-0db9-0109164b6be5.png">

パスワードを入力し、APIトークンを取得する。
<img width="978" alt="スクリーンショット 2020-04-29 20.30.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/b8b05005-c099-bfc5-e43a-1138192bac9b.png">

#ルームIDを取得する

メッセージを送信したいグループチャットのルームIDを取得する。
<img width="222" alt="スクリーンショット_2020-04-29_20_32_05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/8dc413d1-6fc6-a200-a3a5-c06be7312a43.png">
グループチャットのURL末尾の数字がルームIDとなります。

#ライブラリを読み込む

Chatworkへメッセージ送信は「[Chatwork Client for Google Apps Script](https://github.com/cw-shibuya/chatwork-client-gas)」を利用します。

プロジェクトキー: M6TcEyniCs1xb3sdXFF_FhI-MNonZQ_sT

<img width="704" alt="スクリーンショット 2020-04-23 11.54.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/de7d0248-c75a-5c67-399f-b6cf300ccdfa.png">

#スクリプト
```javascript
const token = 'APIトークン';
const room_id = 'メッセージを送信したいグループチャットのルームID';

function myFunction() {

  // Gmailを取得する条件を指定（未読）
  // 指定できる条件は以下ページを参照してください
  // https://support.google.com/mail/answer/7190?hl=ja
  var searchQuery = "is:unread";

  // Gmailからスレッドを取得
  // 引数：検索条件,開始スレッドのインデックス,最大取得数
  // １日の取得件数には制限があります。数の指定にはご注意ください。
  // https://tonari-it.com/gas-gmail-search-limit/ にわかりやすく説明があります。
  var threads = GmailApp.search(searchQuery, 0, 30);
  
  // スレッドに含まれるメッセージを全て取得
  var messages = GmailApp.getMessagesForThreads(threads);

  for(var i = 0; i < messages.length; i++) {
    
    var date = messages[i][0].getDate(); // 受信日時
    var subject = messages[i][0].getSubject(); // 件名
    var from = messages[i][0].getFrom(); // 送信者
    var link = threads[i].getPermalink(); // Gmailリンク
    var post_message = "[info][title]Gmailを受信しました（" + Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd hh:mm:ss') + "）[/title]" +
      "subject: " + subject + "\n" +
      "From: " + from + "\n" +
      link +
      "[/info]";

    // メッセージ送信
    sendMessage(post_message);
    
  }
  
}

function sendMessage(message) {
  var client = ChatWorkClient.factory({token: token});
  client.sendMessage({
    room_id: room_id,
    body: message
  });
}


```

#トリガーの設定

スクリプトを15分おきに動かすトリガを設定します。

編集＞現在のプロジェクトのトリガー　を選択する。
<img width="271" alt="スクリーンショット_2020-05-03_08_19_20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/3075bad1-47c4-dd7a-de65-1fcafb8b4c35.png">

「トリガーを追加」をクリックする。
<img width="1440" alt="スクリーンショット_2020-05-03_08_19_31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/aa0d7272-4b13-2f09-0a4f-0fb08e9824b7.png">

内容を設定し「保存」をクリックする。
<img width="731" alt="スクリーンショット_2020-05-03_09_31_59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/dbb6974c-e15c-c90a-6c16-565cc0d01720.png">
今回は15分おきにGmailの未読メールの有無を確認したいので以下を設定します。

- 時間ベースのトリガーのタイプを選択： 分ベースのタイマー
- 時間の間隔を選択： 15分おき

※1日のメール取得件数には制限があります。数の指定にはご注意ください。
下記にわかりやすくまとめてくれてます。
[Google Apps ScriptにおけるGmailの読み取り件数の制限とその対処法](https://tonari-it.com/gas-gmail-search-limit/)

#テスト

できました！
<img width="860" alt="スクリーンショット_2020-05-03_08_23_07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/808b645a-2a9d-5b2b-882f-003ac5d5c7ba.png">
URLをクリックするとメッセージが表示される
<img width="928" alt="スクリーンショット_2020-05-03_08_23_28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/891133b0-0363-8a9b-fbc0-5786825579d7.png">

#最後に

グループチャットにメッセージが送信されたときに、スマホでプッシュ通知を受け取りたい場合は、スマホアプリで「すべてのメッセージ」にチェックを入れてください。
<img width="300" alt="グループチャット設定画面" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/2fcf0bd7-3409-cfae-26c4-cb0271466697.png">