simotin13's message

simotin13といいます。記事の内容でご質問やご意見がありましたらお気軽にコメントしてください\^o^/

LINE BOT API Rubyで意識の高いbotを作ってみた

先ほど(ていうかもう昨日ですが)

mcommit.hatenadiary.com

という記事を上げましたが、

BOTが動かないまま寝るのが癪に障るのでLINE BOT APIについていろいろ調べて、意識高い系のBOTを作って山田孝之さんとトライのお兄さんと会話させてみました。
まぁ、APIを発行するサーバーの関係で、厳密に言うとBOTというよりAPIでの送信ができただけですが。

あれから色々調べてみると、herokuならすんなり動くというのでherokuでの実装に挑戦してみました。
といっても私はherokuは触ったことがなかったのでherokuの使い方から調べないといけませんでしたが、マニュアルが分かりやすく、すぐにリリースできるように作られているので、ツールベルトという開発用のツールを入れてから1時間ほどでAPIのコールバックの受付口を作り、自分のLINEアカウントからBOTのアカウントに対してメッセージを送った時にコールバックが届くようになりました。

あんなに嵌っていたSSLに関しても、何も問題なく動作しています。
最初っからこっちで試せばよかった。あぁ、無駄に消耗した週末の時間を返してほしい・・・

herokuも楽ちんですが、最近よく使っているsinatraも手っ取り早くいろいろ試せていいですね。
※herokuに不満があるとしたら、herokuはコマンドベースなのでwindowsとの相性があまりよくなさそうなところでしょうか。まぁこれはherokuのせいというよりはwindowsUnix/Linux系OSとの文化の違いなのでしょうがないことですが。

さて、Botということで何かメッセージを受信したらレスを返すものを作りたかったのですがAPIを呼び出すには、APIを発行するサーバのIPアドレスを登録しておく必要があるそうで、herokuは固定IPではなさそうだったので、いつも使っているさくらのVPSからRubyを使ってAPIをたたいてみました。※Herokuでは有料でそういったAPIの発行などに使える機能もあるらしいですが。


f:id:simotin13:20160412025815p:plain


f:id:simotin13:20160412025827p:plain

f:id:simotin13:20160412025842j:plain

今回のBOT APIの動作確認は、

  • メッセージの受信:heroku(callbackを受けるところ)
  • メッセージの送信:さくらのVPS(BOT APIを使ってメッセージを送るところ)

で行っていました。

なのでさくらのVPS側に別途自分で着信通知用のAPIを用意すればBOTはできそうです。

作ってみたBOT(というかメッセージの送信処理)のソース(Ruby)はこちらです。
RubyBOTを作られる方の参考になりましたら幸いです。

require 'net/http'
require 'json'

uri = URI.parse('https://trialbot-api.line.me')
client = Net::HTTP.new(uri.host, 443)
client.use_ssl = true

header = {
"Content-Type" => "application/json; charser=UTF-8",
'X-Line-ChannelID' => "channelsタブのChannel ID",
'X-Line-ChannelSecret' => "channelsタブのChannel Secret",
'X-Line-Trusted-User-With-ACL' => "channelsタブのChannel MID"
}

messages = [
"会社は学校じゃねぇんだよ",
"学生気分で会社に来てるヤツがいる。\r\nお前、何しにきてんの?",
"群れるな。孤独と対峙しろ",
"だから渋谷の時代が終わってきてんだよ。本物の「男」が全然いない。",
"仕事なんて全部自分で見つけてこいよ。ここは学校じゃねぇんだよ。"
]

idx = rand(5)
body = {to: ["送信相手のMID"],
 toChannel:1383378250,              # ←toChannelは1383378250固定
 eventType:"138311608800106203",    # ←メッセージ送信では、eventTypeは138311608800106203固定

 # contentTypeは1固定, toTypeは例を見る限り1でよいみたい。
 # text に送りたいメッセージを指定する
 content:{contentType:1, toType:1, text: messages[idx] }
}

# メッセージ送信はpostメソッド
# 他にもGETのAPIでいろいろと情報をとることもできるみたい...
res = client.post("/v1/events", body.to_json, header)


# resはこんな感じ
# {"failed":[],"messageId":"1234567890123","timestamp":1234567890123,"version":1}
# 送信先のMIDが違うと
# {"statusCode":"401","statusMessage":"INVALID_MID"}
# が返ってくる
puts res.body

上記のコードではテキストのメッセージ送信しか試していませんが、APIのマニュアルを読む限り

  • 画像
  • 動画
  • 位置情報
  • 連絡先情報
  • スタンプ

等も送れるようです。

LINEの最大の特徴であるスタンプが送れるのは楽しいですね!

感想

  • 「これは確かにやばい」
  • 「あれ!?なんかスマホがお金臭くない?」

といった印象ですね。

IoTや車のカーナビと連携させたり、出会い系サイトのサクラ用のBotが販売されたり、BotAPIを使えばいろいろビジネスアイデアが広がりそうですね。


LINEはもうすぐ上場するらしい

LINEのAPIは、私自身早く出ないかなと待っていたのですがなかなか出なかったので(IT業界の他の会社と比べて)遅いなぁ~と思っていました。

今この時期に公開されたのは恐らくですが、株式公開、通称、イポ!があるからですね。

matome.naver.jp

こちらの記事の通り6月に上場予定だとしたら、4月のこのタイミングでのAPI公開は(トライアル版とは言え)完璧なタイミングじゃないでしょうか。

LINE : 「大変お待たせ致しました。只今よりLINE BOT APIを10000名様に公開致します。」

IT業界: 「おお!触ってみよう」

IT業界: 「なんだこれ!まじやべぇ!」
   「これはぜってー金のなる木になるぜ。俺もBOTで一山あててやるぜ」
    「IoTもビッグデータも活用できるじゃないか!」

日経記者:「フムフム。LINEのBOTが金になると... φ(・ω・ )メモメモ」

日経新聞:「LINE BOT APIで世界市場の席巻を狙う!」

LINE   :「皆様、当社は本日、上場致しました。さあさあ、どうぞ当社の株を買ってください。」

皆   :「うお~。俺に買わせろ~!」


みたいな構図が既に出来上がっている気がしますね。
ネットの記事とか見るとみんな凄い凄いって騒いでますけど、LINEからしたらシメシメって思ってるのかもしれませんね。
LINE関連の記事書いたらなんかもらえたりしないかな。。。

ぼくも、ヤーシブで働くチャンネーからLINEで友達リクエストとかいっぱい届くんだったら

「LINE BOT API最高!!!ウィ~」

みたいに一生懸命煽るんですけどね。。。

本当に儲かるのは誰だろうか?

Bot API使ってアプリ層で金儲けができるとして、それはそれでいいと思いますが、アプリを動かすにはサーバーが必要になるわけで、恐らくBOT開発の最前線で使われるのはPaaSでしょう。

要するに、

といったサービスが選ばれると思うのですが(今回Herokuを使ってみたら秒殺でAPIが使えたので強くそう思います)、この中に日本のIT企業は入っていません。
(RubyのMatzさんはHerokuの仕事をされているそうですが)

今回のBotも本来で有ればチャンネル桜じゃなくて、さくらのVPSで作りたかったのですがSSLに関する事情でHerokuを使って作ることになりました。
自称、思想の強いプログラマとしては歯がゆい気持ちでいっぱいです。

こういうのを見ると日本のIT業界とアメリカのIT業界の基礎体力の違いというか、本質的なレベルの違いを見せつけられている気がします。まぁ僕がどうこう言う話でもないですが、何かむなしさを感じてしまうんですよね。

アメリカのECの巨人であるamazonはPaaSを実質支配していますが、日本のECの会社は

「〇〇カードマ~ン!」

ですし、ブログやポータルサイトの会社はあくまでブログや広告の会社で、IT企業というよりはメディア企業ですよね。
※個々のエンジニアの方には技術力は当然すごいあるんだと思いますが、現実問題今のこの状況を鑑みるとまぁなんというかあれですね・・・

f:id:simotin13:20160413125338j:plain


自分もまだまだ勉強不足なので、もっともっと勉強してエンジニア・ビジネスマンとして成長して行くべきだと改めて思いました。

反省点

  • 英語のAPIのマニュアルを流し読みしていたので大事なところを読み飛ばしてしまっていた。"note"とか注意しよう。英文、もうちょっと読みこなせるように頑張ろう!
  • そもそもSSLの仕組みとかってなんとなくしかわかっていなかった。(暗号化できるんだからオレオレでいいだろ見たいなノリだったのでCAの意味・役割とかちゃんと理解できていませんでした。)一度きちんと勉強する時間を設けよう。

追記

[2016-11-02 追記]
Facebookのシェアでサイボウズの青野社長の記事を読みました。

note.mu

欧州市場限定の話にはなると思いますが、技術力云々の前にこういった規制があるとは知りませんでした。

いろいろ見聞きしたところでは、EUではこういった、ソフトウェア・ハードウェアに関する規制等が多いようです。
※特にイギリスがこういった規格や規制をよく作っているという話を耳にします。

私が仕事で関わる組込系の機器に関しても、欧州の規格が厳しくて向こうではなかなか日本製品はうれないようです。