「GHKit Zero」は、Google Homeに、プッシュ通知機能を追加することを目的に開発されたキットです。
ここでは、「GHKit Zero」と、Google Apps Scriptとの連携手順を説明します。
具体的には、15分に一度Gmailの未読メールを定期的に検索し、未読メールがあった場合に「受信トレイに◯件の未読メールがあります。最新メールのタイトルは.....です。」という音声再生リクエストをGoogle Homeに送信する手順について記載します。
本手順をマスターすれば、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」として保存します。
3. 連携情報の用意
「GHKit Zero」同梱の書類より「GHKit ID」と「Code」をご準備ください。
- GHKit ID:ここでは例として「abcde12345」を用います。
- Code:ここでは例として「123456」を用います。
連携の設定
連携の設定は、先ほど作成したGoogleスレプッドシート「GAS」で行います。
「ツール」メニューより「スクリプトエディタ」を選択し、Google Apps Scriptの編集画面を開きます。
同じく名前(プロジェクト名)を「GAS」に設定します。
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);
}
実行ボタン を押して実行します。
Google Homeより音声再生が行われれば成功です。
承認手順について
初めて実行した際、「承認が必要です」というメッセージが表示されます。
その際「許可を確認」ボタンをクリックすると認証画面が表示されるので、ご自身のGoogleアカウントを選択し、承認手続きを実行してください。
この時、青地の「安全なページに戻る」ではなく、「詳細」をクリックし、次に「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の受信トレイの未読メールを確認し、実行ボタン を押して実行します。
Google Homeより期待した音声再生が行われれば成功です。
15分おきに実行する
Google Apps Scriptの時間主導型のトリガーを利用して、15分おきに作成したスクリプトを定期的に実行します。
「編集」メニューより「現在のプロジェクトのトリガー」を選択し、続いて新しいトリガーを追加します。
以下のように設定してトリガーを追加することで、作成したスクリプトを15分おきに自動実行することができます。
しばらく待って自動実行されれば成功です。
最後に
今回は、Google Apps Scriptの「UrlFetchサービス」「Gmailサービス」「時間主導型のトリガーサービス」を利用して、15分おきにGmailの未読メールの件数とメールタイトルをGoogle Homeに音声再生リクエストする手順について説明しました。
Google Apps Scriptにはこの他にも、Googleスプレッドシート、カレンダー、フォーム、ドライブなど様々なサービスがあり、多様な連携を作成することが可能です。
どのように利用するはかアイデア次第です。面白い使い方を是非発見してください。