44
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

スマートスピーカーAdvent Calendar 2017

Day 16

Google Homeを使ってToDoリストにタスクを追加してみた

Last updated at Posted at 2017-12-16

スマートスピーカー Advent Calendar 2017 の16日目です。急遽参戦してみます。よろしくお願いします。

IFTTTだけを使ってGoogle Home(Google Assistant)とTrello(タスク管理アプリ)を連携して、Trelloのリストにタスクの追加ができますが、日本語だとちょっと使いづらいです。なぜなら...

スクリーンショット 2017-12-16 10.03.13.png

この画像のように、「てにをは」のような助詞や半角スペースが混じったり、「納豆 と 豆腐 を」のように、「 と 」で分割してタスク登録してくれなかったりして、ちょっと微妙です。

この画像の例だと、以下のようにタスクが登録されることが理想だと思います:

  • リンゴ
  • みかん
  • 納豆
  • 豆腐
  • みずほ銀行に行く
  • 部屋の掃除
  • 洗濯機の買い替え

そこで、Google Apps Script(以下、GAS)を経由してGoogle Homeから受け取った文字列をいい感じに加工して、Trelloにタスクを追加してみることにしました。

構成図.png

GASのコードを保存・デプロイ

Google Driveにアクセスし、新規にGoogle Apps Scriptを作成します。

以下のコードを貼り付けて、スクリプトを保存します。

function removeParticle(str) {
  var regexp = /^(に |で |2 |)(.+?)( を|)$/;
  if (regexp.test(str)) {
    return str.match(regexp)[2];
  }
  return str;
}

function removeUselessSpaces(str) {
  return str.split(' ').reduce(function(a, b) {
    if (/[^a-zA-Z]$/.test(a) && /^[^a-zA-Z]/.test(b)) {
      return a + b;
    }
    return a + ' ' + b;
  });
}

function doPost(e) {
  var message = removeParticle(e.postData.getDataAsString());
  var listId = e.parameter.listid;
  message.split('').forEach(function(str) {
    addCard(removeUselessSpaces(str), listId);
  });
}

function addCard(message, listId) {
  var scriptProp =  PropertiesService.getScriptProperties().getProperties();
  var trelloKey = scriptProp.TRELLO_API_KEY;
  var trelloToken = scriptProp.TRELLO_TOKEN;
  var url = 'https://api.trello.com/1/cards/?key=' + trelloKey + '&token=' + trelloToken;
  var options = {
    'method' : 'post',
    'muteHttpExceptions' : true,
    'payload' : {
      'name'      : message,
      'due'       : '',
      'idList'    : listId,
      'urlSource' : ''
    }
  }
  UrlFetchApp.fetch(url, options);
}

このスクリプトは、IFTTTから受け取った文字列の先頭に付いた「に 」「で 」「2 」、末尾に付いた「 を」や、日本語と日本語の間の半角スペースを除去してから、「 と 」で文字列を分割し、Trelloのタスクに追加する機能を持っています。
(半角スペースに隣接する前後の1文字のどちらかが英字の場合は、半角スペースを残します)

GAS の Publish > Deploy as web app で、Web Appとしてデプロイします。
deploy-gas-01.png
Project version は "New" にして、 Who has access to the app は "Anyone, even anonymous"を選択してください。

deploy-gas-02.png
デプロイが完了すると、Current web app URLが表示されますので、コピーしておきます。

GASでTrelloの設定をする

Trelloにログインしている状態で、以下のURLにアクセスします
https://trello.com/app-key

trello-01.png
キー(APIキー)をコピーしておきます。

「あなたは手動でTokenを作られます。」のTokenの部分をクリックして、Tokenを取得します。

trello-02.png
Tokenをコピーしておきます。

GASの画面に戻り、先ほど保存したスクリプトの画面で File > Project properties を選択し、TRELLO_API_KEYにAPIキー、TRELLO_TOKENにTokenをプロパティとして設定します。

trello-03.png

TrelloのリストIDを取得する

ChromeなどでTrelloのボードを開き、開発者ツール(Windows:F12, Mac:command + option + I)を開きます。開発者ツールのConsoleで以下のスクリプトを貼り付けて、Enterキーで実行します。

$.get(location.href+'.json',function(d){console.log(d.lists.filter(function(e){return !e.closed}).map(function(e){return e.name+':'+e.id}).join('\n'))})
スクリーンショット 2017-12-16 11.01.19.png こんな感じでリストごとのリストIDが表示されるので、Google Homeでタスクの追加をしたいリストのIDをコピーして起きます。

IFTTTのAppletを作成する

IFTTTにアクセスし、以下のような内容でアプレットを作成します。

Step 1. Choose a service (this)

Google Assistant.png Google Assistantを選択します

Step 2. Choose trigger

Say a phrase with a text ingredient.png "Say a phrase with a text ingredient" を選択します

Step 2. Complete trigger fields

設定項目 設定内容
What do you want to say? タスクに $ 入れて
What's another way to say it? (optional) タスクに $ 追加して
And another way? (optional) タスクに $ 追加
What do you want the Assistant to say in response? タスクに $ を追加しました
Language Japanese
ここは、ご自身がGoogle Homeに話す癖や、好みを反映した方が良いです。

Step 3. Choose action service (that)

Webhooks.png Webhooksを選択します

Step 4. Choose action

Make a web request.png "Make a web request" を選択します

Step 5. Complete action fields

設定項目 設定内容
URL 例) https://script.google.com/macros/s/XXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXX/exec?listid=yyyyyyyyyyyyyyyyyyyyyyyy
Method POST
Content Type text/plain
Body {{TextField}}

URLはGASデプロイ時の "Current web app URL" の末尾に、 ?listid= と TrelloのリストIDを付け加えたものです。

Step 6. Review and finish

アプレットの名前を決定して Finish します。

GASの文字列加工効果

GASなしとGASありのケースそれぞれで、ToDoリストにタスクの追加をしてみました。

スクリーンショット 2017-12-16 12.53.50.png

完璧になりました!実際、私自身も実用的に使っております。

おまけ

このツイートをみて、壁掛けにしてみました。

PC160785.jpg

山崎実業 斜めスポンジラック アクア ホワイト 2934と、ニトリの額掛け用フックを使っています。
ベッド横にGoogle Home Miniを掛けているので、寝ながら目も開けずにタスク追加できてとても便利です!

参考サイト

44
38
0

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
  3. You can use dark theme
What you can do with signing up
44
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?