Help us understand the problem. What is going on with this article?

IFTTTでYoをトリガーに任意のWebhookに通知する

More than 5 years have passed since last update.

IFTTTのアクションに自分で用意したWebhookに通知して欲しいときにWordPresss Channelを使うと便利です。今回はifttt-webhookのNode.js版であるexpress-ifttt-webhookを使います。AndroidからIFTTTにYoを送信するとRequestBinのエンドポイントに通知してパラメータをブラウザで確認してみます。

Webhook

express-ifttt-webhookはNode.jsで書かれたExpressのミドルウェアです。google/nodejs-runtimeのDockerイメージを使いExpressサーバーのコンテナを起動します。

Webhookコンテナの用意

プロジェクトディレクトリを作成します。

$ mkdir -p ~/docker_apps/ifttt
$ cd !$

package.jsonを用意して、expressとexpress-ifttt-webhookモジュールをインストールします。

:~/docker_apps/ifttt/package.json
{
  "name": "express-ifttt",
  "description": "express ifttt test app",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "express": "*.*.*",
    "express-ifttt-webhook": "*.*.*"
  },
  "scripts": {"start": "node app.js"}
}

app.jsに簡単な処理を書きます。json.urlには最終的にフォーワードしたいURLを指定します。今回はデバッグ用のRequestBinのURLにフォワードします。URLはこの後IFTTTのレシピに記述します。

~/docker_apps/ifttt/app.js
var express = require('express')
  , webhook = require('express-ifttt-webhook');

var app = express();
app.set('port', 8080);

app.use(webhook(function(json,done){
    console.log(json);
    json.url = json.categories.string;
    done(null,json);
}));

var server = app.listen(app.get('port'), function() {
  console.log('Server listening on port', server.address().port);
});

Dockerfileを作成してコンテナを起動します。

$ echo FROM google/nodejs-runtime > Dockerfile
$ docker pull google/nodejs-runtime 
$ docker build -t ifttt .
$ docker run -d --name ifttt ifttt

ngrokでWebhookの公開

ngrokを使い作成したWebhookコンテナを公開します。

$ docker pull wizardapps/ngrok:latest
$ docker run -it --rm wizardapps/ngrok:latest ngrok $(docker inspect --format="{{ .NetworkSettings.IPAddress }}" ifttt):8080

公開用のngrokエンドポイントをコピーしておきます。

...
Forwarding                    http://3b98ba34.ngrok.com -> 172.17.0.47:8080
...

Yo

YoはYoと通知するだけのシンプルなコミュニケーションツールです。IFTTTのトリガーにYoを使ってみます。AndroidにYoアプリをインストールして、+ボタンを押しIFTTTをユーザーに追加しておきます。

IFTTT

Yoチャンネルのアクティベート

チャンネルからYoを検索してアクティベートします。

yo-activate.png

WordPressチャンネルのアクティベート

チャネルからWordPressを検索します。テスト用なので今回は認証を行いませんが、UsernameとPasswordはWordPress Channelで必須項目のため適当に入力します。

wordpress-activate.png

レシピの作成

最初にThisをクリックしてYoのトリガーを選択します。

choose-trigger.png

次にThatをクリックしてWordPress Channelをアクションに選択します。

choose-action.png

Create postのアクションを選択します。フィールドは任意に設定できますが、CategoriesフィールドにWebfookしたい最終的なフォワード先のURLを指定します。今回はRequestBinで作成したURLを入力します。Create Actionボタンを押してアクションのを完了します。

categories-field.png

最後にCreate Recipeボタンをクリックしてレシピのアクティベートを行います。

activate-recipe.png

AndroidのYoアプリからテスト

AndroidにインストールしたYoアプリを起動します。追加したユーザーのIFTTTをタップします。「Yo送信完了!」と表示されれば成功です。

ifttt.png

RequestBinで先ほど作成したURLを開くとIFTTTからPOSTされたパラメーターを確認することができました。

requestbin.png

以下がIFTTTから通知されるJSONデータの中身です。コールバックではJSONオブジェクトになっています。

{ username: 'username',
  password: 'password',
  title: 'Yo',
  description: 'hello',
  categories: { string: 'http://requestb.in/pb4l5spb' },
  tags: [ { string: 'IFTTT' }, { string: 'Yo' } ],
  post_status: 'publish' }

今回はテスト的に通知を受けただけですが、次回はExpressの中でMQTTにブリッジしてもう少し汎用的に使えるようにしてみます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away