スマートスピーカー Advent Calendar 2017 の16日目です。急遽参戦してみます。よろしくお願いします。
IFTTTだけを使ってGoogle Home(Google Assistant)とTrello(タスク管理アプリ)を連携して、Trelloのリストにタスクの追加ができますが、日本語だとちょっと使いづらいです。なぜなら...
この画像のように、「てにをは」のような助詞や半角スペースが混じったり、「納豆 と 豆腐 を」のように、「 と 」で分割してタスク登録してくれなかったりして、ちょっと微妙です。
この画像の例だと、以下のようにタスクが登録されることが理想だと思います:
- リンゴ
- みかん
- 納豆
- 豆腐
- みずほ銀行に行く
- 部屋の掃除
- 洗濯機の買い替え
そこで、Google Apps Script(以下、GAS)を経由してGoogle Homeから受け取った文字列をいい感じに加工して、Trelloにタスクを追加してみることにしました。
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としてデプロイします。
Project version は "New" にして、 Who has access to the app は "Anyone, even anonymous"を選択してください。
デプロイが完了すると、Current web app URLが表示されますので、コピーしておきます。
GASでTrelloの設定をする
Trelloにログインしている状態で、以下のURLにアクセスします
https://trello.com/app-key
「あなたは手動でTokenを作られます。」のTokenの部分をクリックして、Tokenを取得します。
GASの画面に戻り、先ほど保存したスクリプトの画面で File > Project properties を選択し、TRELLO_API_KEY
にAPIキー、TRELLO_TOKEN
にTokenをプロパティとして設定します。
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'))})
IFTTTのAppletを作成する
IFTTTにアクセスし、以下のような内容でアプレットを作成します。
Step 1. Choose a service (this)
Google Assistantを選択しますStep 2. Choose trigger
"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を選択しますStep 4. Choose action
"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リストにタスクの追加をしてみました。
完璧になりました!実際、私自身も実用的に使っております。
おまけ
Google home miniを壁掛けにしたい人結構いると思うんだけど、ニトリで売ってるスポンジホルダー的なアイテムが最高にフィットしたので記念に写真を上げておきます#googlehomemini pic.twitter.com/XTOxzYckjc
— 🥑 (@shiramiz) 2017年11月27日
このツイートをみて、壁掛けにしてみました。
山崎実業 斜めスポンジラック アクア ホワイト 2934と、ニトリの額掛け用フックを使っています。
ベッド横にGoogle Home Miniを掛けているので、寝ながら目も開けずにタスク追加できてとても便利です!