IFTTT を Rails から使用する

このところお仕事が忙しくて、こちらのブログの投稿が約 1 カ月ぶりになってしまいました。

今回は、Rails から IFTTT を使用してメール通知をしてみます。

目次

IFTTT とは

今回は、「IFTTT」を使っていきます。

以下 Wikipedia より、IFTTT の説明の抜粋です。

IFTTT(イフト)は、「レシピ」と呼ばれる個人作成もしくは公に共有しているプロフィールを使って数ある Web サービス(Facebook、Evernote、Weather、Dropbox など)同士で連携できる Web サービスである。開発したのはリンデン・チベッツで[1]2010 年にスタートした[2]。
最近では、GoogleAssistant や amazon alexa などの AI スピーカー(スマートスピーカー)との連携が進んでいる。

「きっかけ」と「アクション」を設定した「レシピ」定義して複数のサービスをまたいだ連携ができる Web サービスです。

作るもの

今回は、IFTTT を使用してメール通知を送ります。

IFTTT で設定

以下で IFTTT での設定についてまとめます。

IFTTT にログイン

ログインしてください。

「きっかけ」の作成

  • 左上メニューから「Explore」を開く
  • 検索ボックスに「webhooks」と入力し、「Services」のタブを開く
  • 「Webhooks」が表示されるので開く
  • 「Connect」を押す

    認証済みになると「Connect」が消える

「アクション」の用意

  • 左上メニューから「Explore」を開く
  • 検索ボックスに「email」と入力し、「Services」のタブを開く
  • 「Email」が表示されるので開く
  • 「connect」を押す
  • 通知送信先のメールを認証するため PIN コードの送信先アドレスを入力

    メールに PIN コードが届くので入力します。

    認証されれば終わりです

「レシピ」の用意

  • 「Create」を押す
  • 「+」を押す
  • 検索ボックスに「webhooks」し、「webhooks」を開く
  • 「Receive a web request」を開く
  • 「Event Name」を設定し、「Create trigger」を押す(今回はメールなので、「req_mail」とします)
  • 「+」を押す
  • 検索ボックスに「email」と入力し、「Email」を開く
  • 「Send me an email」を開く
  • 「Create action」を押す
    (メールの文面のフォーマットが記載されていますが、今回はこのままです。後から編集できます。)
  • 「Finish」を押す

Webhook の URL の確認

  • 左上メニューから、「My services」を開く
  • 「Webhooks」を開く
  • 「Documentation」を開く
  • Webhook 用の URL が書かれているので控える
    (今回の場合 EventName が req_mail なので、{event}には req_mail が入ります)

実装

フォームで、メッセージを入力して送信してみることにします。
以下の手順の前に、Rails の起動ができるようになっていることとします。

gem 導入

webhook の URL へアクセスするため、’rest-client’gem を使用します。

Gemfile
1
gem 'rest-client'

ルーティング

config/routes.rbを以下の通り用意します。

config/routes.rb
1
2
3
4
Rails.application.routes.draw do
get 'write',to: "ifttt_mail#write"
post 'send_mail',to: "ifttt_mail#send_mail"
end

モデル

webhook へのアクセスをモデルに持たせます。
app/models/ifttt_mail.rbを以下の通り用意します。

app/models/ifttt_mail.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class IftttMail
include ActiveModel::Model

attr_accessor :message

validates :message, presence: true

def save
return false if invalid?

res = RestClient.get("https://maker.ifttt.com/trigger/req_mail/with/key/[認証コード]",{params:{value1:message}})
true
end
end

コントローラ

app/controllers/ifttt_mail_controller.rbを以下の通り用意します。

app/controllers/ifttt_mail_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class IftttMailController < ApplicationController
def write
@ifttt_mail = IftttMail.new()
end

def send_mail

@ifttt_mail = IftttMail.new(ifttt_mail_params)
if @ifttt_mail.save
flash[:notice] = "メールを送信しました。"
redirect_to action: :write
else
flash[:alart] = "パラメーターが不正です。"
render :write
end
end

private
def ifttt_mail_params
params.require(:ifttt_mail).permit(:message)
end

end

ビュー

app/views/ifttt_mail/write.html.erbを以下の通り用意します。

app/views/ifttt_mail/write.html.erb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<div><%= flash[:notice] %></div>
<div><%= flash[:alart] %></div>
<ul>
<% @ifttt_mail.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<%= form_with model: @ifttt_mail, url: send_mail_path, methods: :post, local: true do |f| %>
<div>
<%= f.text_field :message %>
</div>
<div>
<%= f.submit :submit %>
</div>
<% end %>

動作確認

bundle exec rails sで起動し、localhost:3000/writeにアクセスします。

次の画面が表示されます。

メッセージを設定して送信します。

メールを確認すると次のメールが届いていました。

メッセージを入力しないまま、送信するとエラーになります。


今回は、IFTTT を Rails から使ってみました。

Webhook の利用は結局のところ API の利用に落とし込む作業なので実装自体に特殊なことは無かったです。
確認として IFTTT に Webhook をきっかけとして Twitter に投稿するものも試しましたが、こちらも簡単でした。
使用できる機能が拾いきれないほどあるので、また確認してみたいと思っています。

ではでは。