php で line bot をしてみる

16
PHPでLINE BOTをしてみる 尾崎 翔太

Upload: shota-ozaki

Post on 22-Jan-2018

928 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: PHP で LINE Bot をしてみる

PHPでLINE BOTをしてみる

尾崎 翔太

Page 2: PHP で LINE Bot をしてみる

How about me??

尾崎 翔太

株式会社ウィルゲート 技術責任者

PHPやJavascriptをよく書いています。

隙をみて、JenkinsとかdockerとかAWSとかES6とか、とかとかいろいろ触っています。

Page 3: PHP で LINE Bot をしてみる

つくり手の最良の機会を創り、価値あるコンテンツが届く社会へ

弊社、ウィルゲートについて

コンテンツマーケティング事業

クラウドソーシング・SEO

メディア事業

Page 4: PHP で LINE Bot をしてみる

Bot??

人ではく、機械が作業を行う。

「チャットbot」の話 話相手になる

チャット経由で機械へ何かをお願いする

チャットBotのAPIが公開されて盛り上がっている! Facebook Messenger Bot

LINE bot

Page 5: PHP で LINE Bot をしてみる

LINE Bot??

LINE 月間アクティブユーザが2200万人を超える各サービスの集合

LINE Bot 法人向けとしてLINE Buisiness Connectがもともと提供されている

例)「LINE NEWS」ニュースを配信するアカウント

このAPIが先日、トライアルアカウントとして無償で提供された。 先着1万人まで!締め切られたかなあ…

Page 6: PHP で LINE Bot をしてみる

LINE Bot??

Botアカウントに対してCallbackのURLを指定 メッセージやスタンプ、各種コンテンツを送るとCallbackが呼ばれる

APIを通じて、LINEにメッセージを送れる ※Callbackのレスポンスにメッセージを指定するわけではありません

構成やどんな言語でやるかなど、Qiitaやブログの記事がたくさん書かれている!

Page 7: PHP で LINE Bot をしてみる

PHPでLINE Botをしてみる:LINEからのリクエストを受け取る

構成

LINE:CallbackにAPI GatewayのURLを設定

API Gateway:

POSTのAPIとする(重要)

HTTPヘッダのX-LINE-ChannelSignatureを転送(後述)

Page 8: PHP で LINE Bot をしてみる

PHPでLINE Botをしてみる:LINEからのリクエストを受け取る

気を付けること

設定してからちょっと時間がかかるそう 以前やってあきらめた人もぜひ!

POSTでやってくる API Gateway初使用もあってめっちゃはまった…。。。

SSLが必須 Let’s Encryptは証明書都合でまだっぽい・・・。

Page 9: PHP で LINE Bot をしてみる

PHPでLINE Botをしてみる:LINEからのリクエストを受け取る

気を付けること

HTTPボディにJSONが入っている file_get_contents('php://input')

メッセージ整合性確認のためにシグネチャの検証を。 base64_decode($headers["X-LINE-ChannelSignature"])

hash_hmac("sha256", $rawJson, CHANNEL_SECRET, true)

Page 10: PHP で LINE Bot をしてみる

PHPでLINE Botをしてみる:LINEへメッセージを送る

構成

LINE側のホワイトリストにVPSのIPを指定

Page 11: PHP で LINE Bot をしてみる

PHPでLINE Botをしてみる:LINEへメッセージを送る

気を付けること

curlで十分です composer時代ならguzzleか。

いくつかのHTTPヘッダを付ける

いくつかのPOSTフィールドをJSONで詰める

詳しい送り方はリファレンスを見よう! 参照:https://developers.line.me/bot-api/api-reference

Page 12: PHP で LINE Bot をしてみる

PHPでLINE Botをしてみる:LINEへメッセージを送る

気を付けること

画像や動画はLINEがアクセスできるURLを送る

画像や動画などは制限が…。 画像サイズ:1024x1024、サムネイル240x240

動画形式:mp4

などなど…

Page 13: PHP で LINE Bot をしてみる

PHPでLINE Botをしてみる:作ってみたよ~~

デモ。

画像をいじる 顔検出API

imagemagick

雑談 雑談対話API

参照:https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=dialogue&p_name=api_1

Page 14: PHP で LINE Bot をしてみる

PHPでLINE Botをしてみる:作ってみたよ~~

デモ。

プログラム大変そう…。

全体で200行ちょっとしかないです。

LINEにメッセージ送るメソッドも15行くらい

Page 15: PHP で LINE Bot をしてみる

PHPでLINE Botをしてみる:おまけで構成の話

実際に運用していくなら構成をもっと考えましょう

Callback内でメッセージを作って送るとたいへんです 「botからお返事がこない…」

Callbackはキューにためるだけ

キューを処理するワーカーを作りましょう参照: http://qiita.com/yoichiro@github/items/6d4c7309210af20a5c8f

Page 16: PHP で LINE Bot をしてみる

おわり