こんにちは!
もう10月です。今年も残すところあと2ヶ月。
みなさんは今年やろうと思っていたことはできましたか?
閑話休題。
LINEのBot APIの新しいAPIが9月末に公開されましたね!
linecorp.com
私もLINE Bot API trial account(2016年4月ころ)で英語botを作ったりしました。
今回はメッセージを返すだけの基本的な動作を書こうと思います。
あと、個人的にもMessaging APIで簡単なbotを作ってみました!
入用になって作ったものでして、QRコードを作ってくれたり文字数を数えてくれたり、ランダム文字列を作ってくれたりします。
- URLを送信すると、それをQRコードにして返してくれます。
- 1~2000までの数字を入力すると、半角英数のランダム文字列を作ってくれます
- それ以外の文章を送った場合は文字数を数えてくれます
- 「xss」と言うと、xss攻撃のパターンをランダムで一つ教えてくれます
LINE Messaging API (LINEのchatbot)を使ってみた話
まずはページでアカウントを用意しましょう
Messaging APIを作るためにはLINE Business Centerのアカウントがなければなりません。
LINE accountを持っているのでしたら、そのメールアドレスで作れるかと思います。
前回記事に詳細は記載しています。
business.line.me
Messaging APIを作るためにはトップのここから、申込みの導線がありました。
Messaging APIとDeveloper trialがあるようです
どうやらMessaging APIには「Messaging API」と「Developer Trial」の2つのタイプがあるようです。
2つの違いは、友達の数ですね。
Developer trialは4月のBot API trial accountと同じ50人。
代わりにPush(Bot側から任意のタイミングでメッセージ送信)といった全機能が使えるようです。
50人なんて十分!と思うじゃないですか……。
前にBotを作った時はあっというまに50人オーバーしました……。
Messaging APIは友達は無制限。
代わりにPushが使えないようです。
……うーん、今回はpushを作る気もないですしサーバーにデータを保存もしないので素直にMessaging APIにします。
ビジネスアカウントを作成する
Messaging APIを作成するためにはビジネスアカウントというものが必要です。
Messaging APIの申込みをクリックすると作成に進みます。
何やら企業を選択して……と言われますので、アカウント登録のときに入力した会社を選択しましょう。
会社を選択するとビジネスアカウントの作成に移ります。
ここで「業種」なんてものが!!
適当に選んでも大丈夫のようでしたので、それっぽいところを選びましたw
ちなみに絵は前に私が厚塗りで描いた金剛さんですw
確認が終わったら「LINE@ Manager」でmessaging APIの設定をする必要があります。
LINE@ManagerでMessaging APIの設定をしよう
LINE@Managerに移動すると以下のような警告文が出てきます。
これは「LINE@」を使っている人用の警告文です。
LINE@はあのレストランのメニューのところにある「LINEで友だちになるとクーポンが!」みたいなお店用LINEです。
どうやらMessaging APIを使うとお客様とのトークはできなくなってしまうようです。
Botになってしまうのですから、手動おしゃべりはできないということでしょうね
ここも作ったばかりのビジネスアカウントで関係ないので、躊躇なく「APIを利用する」をクリックです。
次の設定がややこしいです。
左メニューの「アカウント設定」>「Bot設定」からでもこの画面に移ることが出来ます。
Webhook送信
Webhookはメッセージなどをサーバーに伝えたりする仕組みです。
簡単に言うと、利用しないとメッセージを送ってもサーバーに届きません!
なので素直に「利用する」です。
Botのグループトーク参加
今回からBotもLINEのグループに参加できるようになったようです。
お好きな方を選択ですが、私はとりあえず「利用する」ですw
自動応答メッセージ
これはLINE@と同じ機能で、メッセージを送ると「メッセージありがとう! 私は今休暇なのでメッセージを返すことが出来ません」といった、留守電的な自動メッセージを返す設定です。
Botにおしゃべりさせますので「利用しない」です。
(ちなみに自動応答メッセージの設定は左メニューの「メッセージ」>「自動応答メッセージ」です)
友だち追加時のあいさつ
Botを友達にしたときに「友達にしてくれてありがとうござます!」みたいなメッセージを自動的に送信する設定です。
私は使ってみたかったので「利用する」ですw
友だち追加メッセージの編集は「メッセージ」>「友だち追加時あいさつ」です。
これでLINE@ManagerでのBot設定は終了です。
が!
なんと次はLINE Developersでの設定です(^-^;
LINE DevelopersでMessaging APIの設定をしよう
まだまだ続きます、設定w
LINE Developersに移動しましょう。
移動はBot設定のステータスの場所です。
LINE Developersに移動すると、Channelというページに飛ぶかと思います。
Bot API trial accountを作った人だと見覚えがあったかと思います。
……あの、苦戦する場所ですね(ぅぉぃ
Channel Access Tokenを発行する
Messaging APIを操作するためにはChannel Access Tokenが必要になりますので発行しておきましょう。
「issue」をクリックすれば良いです
Webhook URLを設定する
「Edit」を行うとWebhook URLの設定ができます。
httpsです!!
ここが苦戦する一番の場所ですね(^-^;
フリーの「Let's encrypt」なども使えます。
あと、Herokuでの実装している人もいましたし、私なんかはwebscript.ioを使ってみたりもしました。
前は:443をつけなければならない謎な感じでしたが、今回はいらないようですw
設定後に「Verify」をクリックすると、うまくいっている場合は「success」となります。
Bad gatewayなど出たりして色々頑張っていました(^-^;
Server IP Whitelist
前は必須でしたが、今回は必須ではないようです。
設定しない場合は「どこからでもOK」になります。
セキュリティ面がありますので、設定はしたほうが良いかもしれません。
これでようやく設定終わりです!!
PHPでMessaging APIを実装しました
まずはいきなりコードです。
単純にメッセージを受け取って、メッセージを返すだけのコードです。
$accessToken = 'あなたのアクセストークン';
//ユーザーからのメッセージ取得
$json_string = file_get_contents('php://input');
$jsonObj = json_decode($json_string);
$type = $jsonObj->{"events"}[0]->{"message"}->{"type"};
//メッセージ取得
$text = $jsonObj->{"events"}[0]->{"message"}->{"text"};
//ReplyToken取得
$replyToken = $jsonObj->{"events"}[0]->{"replyToken"};
//メッセージ以外のときは何も返さず終了
if($type != "text"){
exit;
}
//返信データ作成
$response_format_text = [
"type" => "text",
"text" => "金剛デース!"
];
$post_data = [
"replyToken" => $replyToken,
"messages" => [$response_format_text]
];
$ch = curl_init("https://api.line.me/v2/bot/message/reply");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charser=UTF-8',
'Authorization: Bearer ' . $accessToken
));
$result = curl_exec($ch);
curl_close($ch);
メッセージを受信しよう
LINEでメッセージが送られると、Webhook URLのプログラムにメッセージが詰まったJSONが送られてきます
https://devdocs.line.me/ja/#webhook
こんな感じのデータが届きます。
まず最低限使うのがevents -> replyToken です。
返信する時に使います。
メッセージ内容も欲しいですよね
メッセージ内容はevents -> message -> textに入っています。
この2つをとっておけば返信できるだけのbotならすぐに作れますw
受信メッセージは画像やスタンプ、音声など色々種類があります。
メッセージを送信しよう
メッセージを送信するときは
https://api.line.me/v2/bot/message/reply
に返信の形に沿ったJSONをPOSTしてあげればOKです!
https://devdocs.line.me/ja/#reply-message
PHPにするとこんな感じ。(上のコードと同じです)
Header
Content-Type: application/json
Authorization: Bearer あなたのアクセストークン
ここでアクセストークンを使います。
データ部分
受信のときに送られてきた「replyToken」をココで使います。
メッセージについては{"type","text"},{"type","text"}....といった感じで、タイプとテキストが複数入ります。
なのでひとつでも複数の形で渡してあげないといけません。
これで最小限の動作をするBotが完成ですw
簡単なのですが、logとか吐き出させる何かがないと動作確認がかなりつらいです……。
(私は最初はwebscript.ioというSSLが使える場所で動作確認をしていました。webhookでのアクセスなどのlogをだしてくれます。言語はLuaですが…)
ついでに、画像送信とスタンプ送信、それと今回から追加されたTemplateタイプ(buttonタイプ)の例もちょっと載せておきますねw
画像
スタンプ(パッケージIDとスタンプIDが必要です)
スタンプ一覧
テンプレートタイプ(下はボタンタイプの例)
これで基本的な説明は終わりです!
メッセージを返すだけなら簡単ですねw
さて、何やらBotでコンテストがあって優勝すると賞金最大1000万円だそうです。
これはちょっと気持ちがざわつきますねw
botawards.line.me
2017/2/5追記
動かしてみたいといったお話をいただきましたので、説明したコードそのままのBotとコードを置いておきますw
Github
GitHub - jam0824/LineBotExamples: LINE Botの例です。