IFTTTの「Maker」を使ってみました

2017年6月28日追記
the Platformで作成したアプレットをPublishした後のことについて誤りがありましたので訂正させていただきます。
作成者が修正すると使用者に反映されると説明していましたが、これは誤りで、一旦公開するとアプレットの修正はできないようです。
公開取り消しの可否はわかりませんが、できない可能性も考えておいたほうがよさそうです。


先月リリースされたIFTTTの「Maker」を使ってみましたのでレポートします。

Makerとは

2年ほど前に、HTTPリクエストでトリガーを引いたり、アクションとして自由にHTTPリクエストを組んだりできる「Maker Channel」というものが登場しましたが、それとは別物です。

今回リリースされた「Maker」は、企業向けに有料で提供されていた高機能なアプレット(レシピ)を作成する機能を個人ユーザー向けに開放したもので、無料で使用できます。

通常のものとどう違うかというと、

  • 1つのトリガー (This)に対して複数のアクション(That)を設定することができる
  • トリガーとアクションの間にJavaScript(正確にはTypeScript)で記述するフィルターを設置することにより、アクションに渡すデータを加工したり、アクションをオンオフしたりできる
     

つまりこんな感じ。

↓ 通常のアプレットはこうですね
If [This], Then [That]

↓ Makerで作れるアプレットはこう
If [This], <filter> Then [That] [That] [That]

通常のものよりずっと複雑で高度な処理ができます。素晴らしい。

JavaScriptと聞いてこの先を読まずまわれ右する方がいると思いますので、使ってみた感想をここで述べておきますと、フィルターの部分は大変親切にできていてJavaScriptの知識がおぼろな方でも簡単なものならなんとかなるんじゃないかなと思いました。
Zapierには以前よりPythonとJavaScriptで書けるフィルターがありましたが、そちらはいかにも「デベロッパー向け」という感じでとっつきやすさは微塵もありません。それと比較すると本当に親切です。さすがIFTTT。
 

公式ドキュメントはこちら。
Maker Guide - IFTTT Platform

それでは実際にアプレットを作る手順を見ていきます。

スポンサーリンク

今回作るアプレットの目的

  • Amazonの値下がりを通知してくれる「Keepa」からのTwitterのメンションをPushbulletに転送
     

Twitter公式アプリは最前面に出ているアカウントしか通知してくれないので、通知用もろもろ用に使っているサブアカウントはプッシュで通知を受け取れないという問題がありました。
これをIFTTTを使ってPushbulletに転送することで解決します。ああ、地味だ。

ちなみに、Keepaの通知方法をGmailにしてIFTTTのトリガーにGmailを使用すると、今回紹介するようなことはしなくて済みます。


デスクトップの環境からブラウザでIFTTTにアクセスし、通常通り「New Applet」をクリックして ↓ の画面を出します。

下のほうの赤枠で囲った緑の文字をクリックすると、「the Platform」というアプレット開発用の環境へ切り替わります。
なんかいちいち名前がかっこいいというかなんというか。

すると、下のような画面になります。

アプレットのデベロッパーとしてのプロフィールを決定せよという指示です。
Facebook、Twitter、SoundCloudのいずれかをプロフィールに選択します。

なお、ここで設定したアカウントは、IFTTTのユーザー名とともにブラウザで閲覧可能な状態となります。
プロフィールは、公開されたアプレットから作成者の情報を参照するためのものですが、アプレットを公開しない場合でもプロフィールのページは作成され、URLを直入力するとアクセスできる状態になっています。「見られてもいい」状態にしておいたほうがいいでしょう。

プロフィールの設定が済むとアプレットの開発画面が開きます。

トリガー

▼トリガーにTwitter - New mension of you を選択

トリガーの後段にはフィルターコードがありますが、この時点では有効化できません。先にアクションを追加します。

アクション

▼Pushbullet - Push a note を選択

ここのフィールドはとりあえずそのままにしておいて、フィルターコードに戻ります。

フィルターコード

▼アクションを追加したのでクリックできるようになった

▼フィルターを記述

▼書いたコード

var user1 = 'Keepa_Notifier';
var tweet_text = Twitter.newMentionOfYou.Text;

switch (Twitter.newMentionOfYou.UserName) {
  case user1:
    Pushbullet.sendNote.setTitle('Keepaが値下がりを検知しました');
    Pushbullet.sendNote.setBody(tweet_text);
    break;
  default:
    Pushbullet.sendNote.skip();
    break;
}

Keepaのアカウントからのメンションだけを通過させ、プッシュの本文にツイートの本文を適用するフィルターです。

見慣れないオブジェクトがありますが、これらは全てコードエディタのすぐ下にリストアップされていてコピペで使用できます。

これらのリストは、トリガーとアクション(単体・複数)に応じて必要なものだけ全て表示されます。

Trigger data

トリガーから取得できるデータ(全てリードオンリーで、全てstring)です。
わかりやすい名前が付いているので簡単ですね。

Actions

後段のアクションを制御するためのメソッドです。

▼PushbulletのPush a noteを実行しない

Pushbullet.sendNote.skip();

▼プッシュのタイトル(Title)を設定

Pushbullet.sendNote.setTitle(str);

▼プッシュの本文(Message)を設定

Pushbullet.sendNote.setBody(str);

今回はアクションを制御するメソッドをすべて使っていますが、これらの使用は全てoptionalです。フィルターで触れなかった項目は、アクションでの設定が適用されます(つまりアクションの設定をフィルターで上書きするという形)。

Other

▼コード実行時の日時

Meta.currentUserTime;

ユーザーの設定タイムゾーンに応じた日時。
Moment.jsオブジェクトが返ってきます。

▼Moment.jsオブジェクトから値を取り出す

var current_time = Meta.currentUserTime;
current_time.year();
current_time.month();  // Dateオブジェクトと同様、0〜11の数字(1月なら0、3月なら2が返ってくる)
current_time.date();
current_time.day();  // 曜日
current_time.hours();
current_time.minutes();
current_time.seconds();
current_time.toDate();  // Dateオブジェクトに変換

23時から7時の間はこうして、のような分岐を作れますね。

ちなみにnew Date()コンストラクタはユーザーのタイムゾーンではなくGMT(+0000)のDateが返ってきます。

Moment.jsオブジェクトの詳細はこちらを参照。
日付処理が楽になる!Moment.jsの使い方 - Qiita
 

▼トリガーが引かれた日時

Meta.triggerTime;

Meta.currentUserTimeとほぼ同時刻。


コードエディタは至れり尽くせりな作りになっています。

  • シンタックスハイライト
  • 入力補完
  • 構文チェック
  • オブジェクトやメソッドにマウスオーバーするとプロパティやメソッドの使い方を説明してくれる

フィルターコード上ではできることとできないことがありますが(セキュリティ上問題となることは多分できない)、できるかどうかは書いてみるとわかります。

▼そんなものはない

注意事項

アクションを設定する

フィルターコードを追加する

の順番は守りましょう。
フィルターコードを追加した後にアクションを変更したり増やしたり減らしたりすると、アプレット保存時に高い確率で原因不明のエラーが出ます。

アクションを設定する

フィルターコードを追加する

フィルターコードを削除する

アクションを変更、追加、削除する

フィルターコードを再度追加する

とやってもエラーが出ることがあります。
アクションを変更したい場合は、今のところ最初からやり直すのが確実のようです。

再びアクション

今回のアプレットでは、アクションのすべての項目をフィルター部で制御していますので、ここは全てHidden from userのままにしておきます。

Chosen by userを選択するとアプレットの使用者が自由に記述できるようになります。

アクションの設定が済んだら、titleとdescriptionを適当に書いてSaveしてアプレットの作成は完了です。

問題なく保存されると画面が切り替わります。

この画面からPublishしたり実行ログを確認(デバッグに利用)したりします。

この段階では、非公開のアプレットがthe Platform上にストックされているだけです。
View on IFTTTのあたりをクリックして、IFTTT上でアプレットを有効化しましょう。the Platform上で作成された自作アプレットの使用者に自分自身がなるという形です。
有効化したアプレットはWebアプリのようなもので、使用者が自分のものとして取り込むことはできません。
作成者がthe Platform上で修正すればそのまま使用者に反映されますし、削除すれば使えなくなってしまいます。

【2017年6月28日修正】
アプレットをPublishすると、IFTTTユーザーの全員が見られる状態になります。公開後はアプレットの修正はできません。
試していないので定かではありませんが、公開の取り消しができない可能性も考えておいたほうがよさそうです。

感想

我が家にはIoT機器がひとつもないので、こんな地味〜で退屈なアプレットを紹介してしまいました。
もっとかっこいいのを紹介したかったです。

おまけ

▼PushbulletではなくPushoverにKeepaのメンションを転送する際のフィルターコード

var user1 = 'Keepa_Notifier';
var tweet_text = Twitter.newMentionOfYou.Text;

switch (Twitter.newMentionOfYou.UserName) {
  case user1:
    Pushover.send.setTitle('Keepaが値下がりを検知しました');
    Pushover.send.setMessage(tweet_text);
    Pushover.send.setSound('pushover');
    var matched = tweet_text.match(/https:\/\/.+/);
    if (matched) {
      Pushover.send.setUrl(matched[0]);
    }
    break;
  default:
    Pushover.send.skip();
    break;
}

プッシュ通知にはやはりPushoverが至高です。
 

▼Make Webhooksアクションを使ってPushoverでアプリのURLスキームをプッシュする際のフィルターコード

var app_token = '',
    device = '',
    key = '',
    title = '',
    message = '',
    sound = 'pushover';

var url_scheme = '';

var req_body = 'token=' + app_token + '&user=' + key + '&device=' + device + '&title=' + encodeURIComponent(title) + '&message=' + encodeURIComponent(message) + '&url=' + encodeURIComponent(url_scheme) + '&sound=' + sound;

MakerWebhooks.makeWebRequest.setUrl('https://api.pushover.net/1/messages.json');
MakerWebhooks.makeWebRequest.setMethod('POST');
MakerWebhooks.makeWebRequest.setContentType('application/x-www-form-urlencoded');
MakerWebhooks.makeWebRequest.setBody(req_body);

備え付けのPushoverアクションでは、http(s)以外のSchemeは扱えないので。

スポンサーリンク
スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。