GoogleAppsScript
GoogleHome
GHKit

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

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