LoginSignup
3

More than 3 years have passed since last update.

posted at

GHKit ZeroとGoogle Apps Scriptの連携

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スプレッドシート、カレンダー、フォーム、ドライブなど様々なサービスがあり、多様な連携を作成することが可能です。

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

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
What you can do with signing up
3