LINE BOT を始め Bot 界隈が盛り上がってきてますが、BotKit 公開されても何すれば良いか分からない人間なので、とりあえず ifttt へのパス作っとけば夢は広がるだろうというアレです。
下記の情報の組み合わせでできました。
LINE BOT をとりあえずタダで Heroku で動かす - Qiita AWS Lambda と IFTTT でお手軽に push 通知を実現する - Qiita
動かすには下記が必要
流れとしては LINE BOT から Heroku へ Callback し、Heroku から ifttt の Maker チャンネルへリクエストを飛ばしてます。 Connect Maker to hundreds of apps - IFTTT
Maker チャンネルへリクエストを飛ばすとCongratulations! You've ~
という定型文が返されるので、それをまた LINE へつぶやくようにしています。
(リクエストが ifttt へ届いたことを表しているだけで、レシピがエラーとなったかどうかは判別できなそうです)
Maker チャンネルは ifttt のレシピ毎にEventName
を指定できるため、LINE でのメッセージの先頭でそのEventName
を指定できるようにしており、Heroku にアプリ一つ立てておくだけで、ifttt の複数のレシピに対応できるはずです。
LINE 上でifttt-test hogehoge
とつぶやけば、EventName
がifttt-test
のレシピが実行されるはずです。
# Mostly taken from http://qiita.com/masuidrive/items/1042d93740a7a72242a3
# And https://github.com/yuya-takeyama/line-echo
require 'sinatra/base'
require 'json'
require 'rest-client'
class App < Sinatra::Base
SECRET_KEY = ENV['MAKER_SECRET_KEY'] # Maker channel's secret key
EVENT_NAME_DEFAULT = ENV['MAKER_EVENT_NAME_DEFAULT'] # Maker channel's default event name
post '/linebot/callback' do
params = JSON.parse(request.body.read)
RestClient.proxy = ENV['FIXIE_URL'] if ENV['FIXIE_URL']
params['result'].each do |msg|
event, message = msg['content']['text'].split(' ', 2)
response = request_to_ifttt(event, message)
request_to_line([msg['content']['from']], response)
end
"OK"
end
helpers do
def request_to_ifttt(event = EVENT_NAME, message)
# Maker channel's extra data
request_content = {
value1: message,
value2: 'from',
value3: 'Line Bot'
}
endpoint_uri = "https://maker.ifttt.com/trigger/#{event}/with/key/#{SECRET_KEY}"
content_json = request_content.to_json
response = RestClient.post(endpoint_uri, content_json, {
'Content-Type' => 'application/json; charset=UTF-8',
'Content-Length' => content_json.length
})
end
def request_to_line(send_to, message)
request_content = {
to: send_to,
toChannel: 1383378250, # Fixed value
eventType: "138311608800106203", # Fixed value
content: {
"contentType": 1, # Text type message
"toType": 1,
"text": message
}
}
endpoint_uri = 'https://trialbot-api.line.me/v1/events'
content_json = request_content.to_json
RestClient.post(endpoint_uri, content_json, {
'Content-Type' => 'application/json; charset=UTF-8',
'X-Line-ChannelID' => ENV["LINE_CHANNEL_ID"],
'X-Line-ChannelSecret' => ENV["LINE_CHANNEL_SECRET"],
'X-Line-Trusted-User-With-ACL' => ENV["LINE_CHANNEL_MID"],
})
end
end
end
Maker チャンネルのリクエストにはパラメータを3つ(Value1
, Value2
, Value3
)まで指定できます。
EventName
はそのままの意味、OccurredAt
はリクエストを受け付けた日時になります。
ifttt 上で指定する場合はValue1
のように先頭を大文字のV
にしないとエラーになりますが、リクエストパラメータでは先頭小文字のvalue1
でないとダメみたいです。
# Maker channel's extra data
request_content = {
value1: message,
value2: 'from',
value3: 'Line Bot'
}
ソースは下記に置いてます。 (masuidrive さんに怒られたら消す) kaakaa/line-ifttt
とりあえず作ったもののやりたいことがない。