スマートスピーカー 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から受け取った文字列の先頭に付く「に 」や・末尾に付く「 を」や、日本語と日本語の間の半角スペースを除去し、「 と 」で文字列を分割してそれぞれをTrelloのタスクに追加する機能を持っています。

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) タスクに $ 追加
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を掛けているので、寝ながら目も開けずにタスク追加できてとても便利です!

参考サイト