スプーキーズのちょっとTech。

SPOOKIES社内のより技工的な、専門的なブログページです。

【LINE BOT API】食べるなら動け、動かぬなら食べるな【カロリーと運動とお店】

こんにちは。登山と美味しいものとお酒が好きです、高野です。

f:id:spookies-takano:20160606235632j:plain

(2015.9.2 槍ヶ岳山頂にて。一緒に上ってくれる方を大募集です!)

海か山かと聞かれれば山派でして普段は波には乗らないのですが、Botの波がやってきたということで少し乗ってみることにしました。

Microsoft Bot Framework、Facebook Messenger Platform、LINE BOT API と、Bot関連の大きな波が来てから早2ヶ月以上が過ぎましたが、まだ乗れますよね?

【LINE】「LINE BOT API Trial Account」の追加募集を開始

ということで、追加募集に参加してみました。

各所にすばらしい関連記事はまとまっていますが、備忘録も兼ねて作成までの流れを書きます。

f:id:spookies-takano:20160606235805p:plain

LINE BOT API では何ができる?

APIベースのメッセージ送受信

あなたのアカウントに対して友だちになってくれたユーザーにメッセージを送受信することができます。 メッセージのやり取りはすべてAPIベースとなっています。

f:id:spookies-takano:20160606235830p:plain

リッチメッセージ

サイトのサムネイルとリンクを含んだメッセージを配信することができます。 サイトへの誘導効果が大きく見込める機能です。

f:id:spookies-takano:20160606235848p:plain

利用条件

料金 友だち数上限
無料 〜50人まで ※トライアルのため友だち数を制限しています。

Botを作ろう

ところで、社内ではジムブームというものがあったようですが、いまいちピンときていません。(最初に会員登録した。2ヶ月行っていない

日頃の運動ももちろん大事ですが、食事から生活を整えていくことも大事ではないでしょうか。現代人は、常に食べ過ぎ飲み過ぎだとも言われています。外食が多い生活だと尚更ですよね。

そんな日常を背景に、スプーくんという救世主(Bot)は現れました。 私たちの食べたいものを伝えると、

  • 目安カロリー
  • カロリー消費に必要な運動量
  • 関連するおすすめのお店

を教えてくれます。

食べた量に対して自分がどれだけ運動しなければいけないのかを把握できれば、自分にあった運動量から食べる量も調節できるというわけです。

決して運動したくないわけではありませんよ。

アカウント作成

基本的なユーザー情報と、Botの名前・画像を登録します。

Botは、Spookiesのマスコットキャラである「スプーくん」をイメージに、お腹すいた感じの名前にしておきます。(特に腹ペコキャラではない)

以下は、登録後の画面イメージ。

f:id:spookies-takano:20160606235931p:plain

  • Channel ID
  • Channel Secret
  • MID

上の3つをAPIでも使います。

サーバー用意

今回は、Heroku上にアプリを作成することにします。

固定IPが必要になるので、 HerokuのアドオンであるFixieをインストールしておきます。

(無料ですが、事前にHerokuへのクレジットカード登録が必要です。)

コマンドからインストールする場合は以下。アドオンの追加とともに、Outbound IPsが出力されます。

$ heroku addons:create fixie:tricycle

Outbound IPsは、

「HerokuのDashboad」>「作成したアプリの詳細ページ」>「Add-ons」>「Fixie」

と辿っていっても確認可能です。

Server IP Whitelist登録

Outbound IPsを確認できたら、「Server IP Whitelist」にIPを追加します。以下では、Fixieで確認した2つのIPを登録しています。

f:id:spookies-takano:20160606235959p:plain

Callback URL登録

また、「Basic Infomation」にCallback URLも登録しておきます。

「HerokuのDashboad」>「作成したアプリの詳細ページ」>「Settings」 > 「Domains」 > 「Heroku Domain」

でURLが確認できます。

その際、SSL通信必須でポート番号の指定も必要なことに注意します。

https://[Heroku Domain]:443/linebot/callback.php

f:id:spookies-takano:20160607000029p:plain

(今回は、PHPで実装しました。)

Channel ID等をHerokuへ登録

アカウント作成時に確認した以下の項目は、コード内部に埋め込まずHerokuに環境変数として外部化しておく。

  • Channel ID
  • Channel Secret
  • MID

「HerokuのDashboad」>「作成したアプリの詳細ページ」>「Settings」 > 「Config Variables」>「Reveal Config Vars」より設定

f:id:spookies-takano:20160607000114p:plain

さて、準備は整ったのであとはAPIを実装していきましょう。

API作成

基本的に、以下の項目は固定となります。

||| |API URL | "https://trialbot-api.line.me/v1/events" (POST)| | toChannel |"1383378250"(固定値) | | eventType | "138311608800106203" (固定値)|

(詳細:Getting started with BOT API Trial)

あとは、CallbackURLで指定した箇所にAPIを実装したファイルを配置するだけになります。

しかし。。。。

callbackが返ってこない

f:id:spookies-takano:20160607000137j:plain

(怒涛のKS(既読スルー)。無意味に投げ過ぎ。)

期待した応答がBotから無い場合、主な原因は以下の通りです。

  • Callback URLの反映が遅れている
  • Server IP Whitelistの反映が遅れている

これらは、設定から反映までに数十分から1日程度かかることがあるようです。ゆっくり待つのも一手。

まずはレスポンスを確認。

$ curl -H "X-Line-ChannelID: [CHANNEL ID]" -H "X-Line-ChannelSecret: [CHANNEL SECRET]" -H "X-Line-Trusted-User-With-ACL: [MID]" "https://trialbot-api.line.me/v1/profiles?mids=[MID]"
{"statusCode":"427","statusMessage":"Your ip address [XXX.XXX.XX.XX] is not allowed to access this API. Please add your IP to the IP whitelist in the developer center."}

この場合は、Heroku・FixieのproxyURLが設定できていませんでした。

  • CURLOPT_HTTPPROXYTUNNEL
  • CURLOPT_PROXY
  • CURLOPT_PROXYPORT

上記を踏まえて実装を見直すと、

{"contacts":[{"displayName":"はらぺこスプーくん","mid":"[MID]","pictureUrl":"http://dl.profile.line-cdn.net/xxxxxxxxxxx","statusMessage":""}],"count":1,"display":1,"pagingRequest":{"start":1,"display":1,"sortBy":"MID"},"start":1,"total":1}

問題なさそうですね。

その他では、ログを埋め込んだり、herokuのログを確認しつつ進めると分かりやすいです。

 $ heroku logs -t

f:id:spookies-takano:20160607000204j:plain

(オウム返しで試してみた)

「きたー(嬉)」

完成

f:id:spookies-takano:20160607000218j:plain

  • 食べ物をつぶやくと以下の情報が返ります。
    • 類似の食べ物のカロリー値
    • カロリー消費に必要な運動量
    • つぶやいた食べ物のありそうな店一覧(スプーキーズ京都本社より500m圏内のみ)

これで、健康的な身体まっしぐらですね!

腕立ての回数は、最低限やってくださいね!(筋トレはカロリー消費が少ない。。)

f:id:spookies-takano:20160607000238p:plain

上記のQRコードからスプーくんとともだちになれます。

よろしければ一緒に昼食へ連れて行ってあげてください。

制限

現行では、以下の制限があるのでご注意ください。

  • Line Bot API Trialでは友達登録50人まで。
  • Fixieのtricycleプランではリクエストは500/月まで。

API

その他APIとしては、以下の2つを使用させていただいています。

また、カロリー消費に必要な運動量は、カラダカラ消費カロリーの参考例にて[男、20~29歳、65kg]の値を基に計算させていただいています。

どうなるBotの波

最近でも、カスタマーサポートをBotで置き換えて人件費が削減されたという話をちらほら聞くようになりました。 1企業に1Botが当たり前になれば、Botを通してのブランディングも当然起こりうるかと思います。 ゆるキャラブームから企業でもいろんな個性を持ったマスコットキャラを推す流れができましたが、Botの普及でより個性的なBotが登場してくることもあるでしょう。 これからBotを取り巻く環境はますます成熟していくでしょうが、多様なBotが世に出ていくのが楽しみですね!

社内でも以前よりSlackでHubotを運用していますが、外と繋がるBotでも面白い試みをしていきたいところです。

みなさま、健康にはお気をつけ下さいませ。

参考

関連

Microsoft Bot Framework

Your bots — wherever your users are talking.

f:id:spookies-takano:20160607000317p:plain

Facebook Messenger Platform

900 million people are on Messenger Now you can interact with them where they already are

f:id:spookies-takano:20160607000343p:plain

LINE BOT API

BOT API Trial AccountではあなたのサービスとLINEユーザーの 双方向コミュニケーションを可能にするAPI開発をお試しいただけます。

f:id:spookies-takano:20160607000500p:plain