Help us understand the problem. What is going on with this article?

GHKit ZeroとGoogle Apps Scriptの連携

More than 1 year has passed since last update.

GHKit Zero」は、Google Homeに、プッシュ通知機能を追加することを目的に開発されたキットです。

ここでは、「GHKit Zero」と、Google Apps Scriptとの連携手順を説明します。

具体的には、15分に一度Gmailの未読メールを定期的に検索し、未読メールがあった場合に「受信トレイに◯件の未読メールがあります。最新メールのタイトルは.....です。」という音声再生リクエストをGoogle Homeに送信する手順について記載します。
スクリーンショット 2019-04-10 12.22.05.png
本手順をマスターすれば、Google Apps ScriptがサポートするGoogleスプレッドシート、フォーム、カレンダーなど、様々なイベントをトリガーにして、Google Homeにメッセージを送信(再生)することが可能になります。

本記事では、Google Apps Scriptの概要や構成、文法等の詳細については説明しませんが、本記事を参考に、是非とも様々な使い方を試してみてください。

設定前の準備

連携を設定する前に、以下の項目を確認してください。

1. 「Google Home」と「GHKit」のセットアップ

最初に、Google Homeをセットアップし、利用できる状態にしておいてください。

次に、HP上の手順を参考に「GHKit Zero」をセットアップし、Google Homeとの接続を確認してください。

2. Googleスレプッドシートを開く

Googleスレプッドシートを通じて、Google Apps Scriptを記述します。

Googleスレプッドシート にアクセスし、お使いのGoogleアカウントを用いて使用を開始してください。

新しいスプレッドシートを作成し、名前を「GAS」として保存します。
スプレッドシート.png

3. 連携情報の用意

GHKit Zero」同梱の書類より「GHKit ID」と「Code」をご準備ください。

  • GHKit ID:ここでは例として「abcde12345」を用います。
  • Code:ここでは例として「123456」を用います。

連携の設定

連携の設定は、先ほど作成したGoogleスレプッドシート「GAS」で行います。

「ツール」メニューより「スクリプトエディタ」を選択し、Google Apps Scriptの編集画面を開きます。

同じく名前(プロジェクト名)を「GAS」に設定します。

エディター.png

HTTPリクエスト

まず最初に、Google Apps Scriptが用意する「UrlFetchサービス」を用いて GHKit の Webサーバーに接続し、任意のメッセージでGoogle Homeに音声再生をリクエストします。

「コード.gs」に下記のコードを記載します。
「message」を任意のメッセージに、「ghkit」「code」を上記で準備した情報に置き換えてください。

function myFunction() {

  var message = "音声再生したい任意のメッセージをここに記載";

  // HTTPリクエスト(POST/JSON形式)の設定
  var url = "https://zero.ghkit.jp/"
  var data = {
    "ghkit" : "abcde12345", // ご自身のGHKit IDに置き換え
    "code" : "123456", // ご自身のCodeに置き換え
    "message" : message
  }
  var options = {
    "method" : "post",
    'contentType' : "application/json",
    "payload" : JSON.stringify(data)
  }

  // HTTPリクエスト(POST/JSON形式)を実行
  var response = UrlFetchApp.fetch(url, options);

  // POST結果の取得
  var content = response.getContentText("UTF-8");
  Logger.log(content);

}

実行ボタン スクリーンショット 2019-04-10 11.42.00.png を押して実行します。
Google Homeより音声再生が行われれば成功です。

承認手順について

初めて実行した際、「承認が必要です」というメッセージが表示されます。

その際「許可を確認」ボタンをクリックすると認証画面が表示されるので、ご自身のGoogleアカウントを選択し、承認手続きを実行してください。

ここで、次のようなアラートが表示される場合があります。
スクリーンショット 2019-04-09 13.59.37.png

この時、青地の「安全なページに戻る」ではなく、「詳細」をクリックし、次に「GAS(安全でないページ)に移動」をクリックして承認手続きを実行してください。

Gmailの情報を取得

GHKit の Webサーバーに Google Home への音声再生をリクエストすることができましたので、次にGmailの情報を取得し、未読メールがあった際に「「受信トレイに◯件の未読メールがあります。最新メールのタイトルは.....です。」というメッセージを送信するようにします。

先ほど作成したスクリプトを上書きする形で、下記のコードを記載します。
前半部分がGmailの情報を取得するコード、後半はHTTPリクエストを実行するコードで、上述と同じコードです。

function myFunction() {

  // 取得するメールの条件を指定する。ここでは、受信トレイの未読メールを指定
  var SearchString = 'in:inbox is:unread';
  // 条件にマッチするスレッドを取得する。ここでは、最新のスレッドから最大10件を取得する
  var myThreads = GmailApp.search(SearchString, 0, 10);
  // スレッドに含まれるメールを取得する
  var myMails = GmailApp.getMessagesForThreads(myThreads); 

  // 未読メールが無い場合、終了する
  if(myThreads.length == 0){
    return;
  }

  // 未読メールがある場合、GHKit Zeroへ音声再生するメッセージを作成する  
  // メッセージ前半の「受信トレイに..件の未読メールがあります」を設定する
  var message = "受信トレイに" + myThreads.length + "件の未読メールがあります。";

  // 最新のメールのタイトルを取得する
  // 0番目のスレッドが最新のスレッドになり、その中の最後のメッセージが最新のメールになります
  var title = myThreads[0].getMessages()[ myThreads[0].getMessageCount() - 1 ].getSubject();

  // メールのタイトルを文言に追加する
  message += "最新メールのタイトルは" + title + "です。";

  // 
  // ここより下は、HTTPリクエストのスクリプトと同じ
  // 

  // HTTPリクエスト(POST/JSON形式)の設定
  var url = "https://zero.ghkit.jp/"
  var data = {
    "ghkit" : "abcde12345", // ご自身のGHKit IDに置き換え
    "code" : "123456", // ご自身のCodeに置き換え
    "message" : message
  }
  var options = {
    "method" : "post",
    'contentType' : "application/json",
    "payload" : JSON.stringify(data)
  }

  // HTTPリクエスト(POST/JSON形式)を実行
  var response = UrlFetchApp.fetch(url, options);

  // POST結果の取得
  var content = response.getContentText("UTF-8");
  Logger.log(content);
}

Gmailの受信トレイの未読メールを確認し、実行ボタン スクリーンショット 2019-04-10 11.42.00.png を押して実行します。
Google Homeより期待した音声再生が行われれば成功です。

15分おきに実行する

Google Apps Scriptの時間主導型のトリガーを利用して、15分おきに作成したスクリプトを定期的に実行します。

「編集」メニューより「現在のプロジェクトのトリガー」を選択し、続いて新しいトリガーを追加します。

以下のように設定してトリガーを追加することで、作成したスクリプトを15分おきに自動実行することができます。
トリガー.png

しばらく待って自動実行されれば成功です。

最後に

今回は、Google Apps Scriptの「UrlFetchサービス」「Gmailサービス」「時間主導型のトリガーサービス」を利用して、15分おきにGmailの未読メールの件数とメールタイトルをGoogle Homeに音声再生リクエストする手順について説明しました。

Google Apps Scriptにはこの他にも、Googleスプレッドシート、カレンダー、フォーム、ドライブなど様々なサービスがあり、多様な連携を作成することが可能です。

どのように利用するはかアイデア次第です。面白い使い方を是非発見してください。

tetotetote
てとてとて合同会社です。よろしくお願いします。
http://teto.tech/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした