WEB拍手ぱちぱちっと
Clap/拍手

01.MENU
Blog  / ブログ
Videos  / 動画
Pictures  / 絵
Game Materials  / 素材
SS(ShortStory)  / 小ネタ

02.MENU
Novels  / 小説
Chat  / チャット
BBS  / 掲示板
Others  / その他
Old Top  / 旧Top

Traffic Jam Products


LINE Messaging API (新しいLINE BOT)を実装してみた

こんにちは!

もう10月です。今年も残すところあと2ヶ月。

みなさんは今年やろうと思っていたことはできましたか?

 

閑話休題

LINEのBot APIの新しいAPIが9月末に公開されましたね!

linecorp.com

 

私もLINE Bot API trial account(2016年4月ころ)で英語botを作ったりしました。

今回はメッセージを返すだけの基本的な動作を書こうと思います。

 

あと、個人的にもMessaging APIで簡単なbotを作ってみました!

入用になって作ったものでして、QRコードを作ってくれたり文字数を数えてくれたり、ランダム文字列を作ってくれたりします。

f:id:m_training:20161001185625p:plain

友だち追加数

  •  URLを送信すると、それをQRコードにして返してくれます。
  • 1~2000までの数字を入力すると、半角英数のランダム文字列を作ってくれます
  •  それ以外の文章を送った場合は文字数を数えてくれます
  • xss」と言うと、xss攻撃のパターンをランダムで一つ教えてくれます

 

 

 LINE Messaging API (LINEのchatbot)を使ってみた話

まずはページでアカウントを用意しましょう

Messaging APIを作るためにはLINE Business Centerのアカウントがなければなりません。

LINE accountを持っているのでしたら、そのメールアドレスで作れるかと思います。

前回記事に詳細は記載しています。

business.line.me

 

Messaging APIを作るためにはトップのここから、申込みの導線がありました。

f:id:m_training:20161001190352p:plain

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人オーバーしました……。

f:id:m_training:20161001190936p:plain

 

Messaging APIは友達は無制限。

代わりにPushが使えないようです。

 

……うーん、今回はpushを作る気もないですしサーバーにデータを保存もしないので素直にMessaging APIにします。

 

ビジネスアカウントを作成する

Messaging APIを作成するためにはビジネスアカウントというものが必要です。

Messaging APIの申込みをクリックすると作成に進みます。

何やら企業を選択して……と言われますので、アカウント登録のときに入力した会社を選択しましょう。

f:id:m_training:20161001191322p:plain

f:id:m_training:20161001191355p:plain

 

会社を選択するとビジネスアカウントの作成に移ります。

 

f:id:m_training:20161001191447p:plain

 

ここで「業種」なんてものが!!

適当に選んでも大丈夫のようでしたので、それっぽいところを選びましたw

 ちなみに絵は前に私が厚塗りで描いた金剛さんですw

 

確認が終わったら「LINE@ Manager」でmessaging APIの設定をする必要があります。

f:id:m_training:20161001193055p:plain

LINE@ManagerでMessaging APIの設定をしよう

LINE@Managerに移動すると以下のような警告文が出てきます。

f:id:m_training:20161001193358p:plain

これは「LINE@」を使っている人用の警告文です。

LINE@はあのレストランのメニューのところにある「LINEで友だちになるとクーポンが!」みたいなお店用LINEです。

どうやらMessaging APIを使うとお客様とのトークはできなくなってしまうようです。

Botになってしまうのですから、手動おしゃべりはできないということでしょうね

ここも作ったばかりのビジネスアカウントで関係ないので、躊躇なく「APIを利用する」をクリックです。

 

次の設定がややこしいです。

f:id:m_training:20161001193840p:plain

左メニューの「アカウント設定」>「Bot設定」からでもこの画面に移ることが出来ます。

 

Webhook送信

Webhookはメッセージなどをサーバーに伝えたりする仕組みです。

簡単に言うと、利用しないとメッセージを送ってもサーバーに届きません!

なので素直に「利用する」です。

 

Botグループトーク参加

今回からBotもLINEのグループに参加できるようになったようです。

お好きな方を選択ですが、私はとりあえず「利用する」ですw

 

自動応答メッセージ

これはLINE@と同じ機能で、メッセージを送ると「メッセージありがとう! 私は今休暇なのでメッセージを返すことが出来ません」といった、留守電的な自動メッセージを返す設定です。

Botにおしゃべりさせますので「利用しない」です。

(ちなみに自動応答メッセージの設定は左メニューの「メッセージ」>「自動応答メッセージ」です)

 

友だち追加時のあいさつ

Botを友達にしたときに「友達にしてくれてありがとうござます!」みたいなメッセージを自動的に送信する設定です。

私は使ってみたかったので「利用する」ですw

友だち追加メッセージの編集は「メッセージ」>「友だち追加時あいさつ」です。

f:id:m_training:20161001194742p:plain

 

これでLINE@ManagerでのBot設定は終了です。

が!

なんと次はLINE Developersでの設定です(^-^;

 

LINE DevelopersでMessaging APIの設定をしよう

まだまだ続きます、設定w

LINE Developersに移動しましょう。

移動はBot設定のステータスの場所です。

f:id:m_training:20161001195036p:plain

LINE Developersに移動すると、Channelというページに飛ぶかと思います。

Bot API trial accountを作った人だと見覚えがあったかと思います。

……あの、苦戦する場所ですね(ぅぉぃ

f:id:m_training:20161001195338p:plain

 

Channel Access Tokenを発行する

Messaging APIを操作するためにはChannel Access Tokenが必要になりますので発行しておきましょう。

「issue」をクリックすれば良いです

 

Webhook URLを設定する

「Edit」を行うとWebhook URLの設定ができます。

f:id:m_training:20161001195703p:plain

httpsです!!

ここが苦戦する一番の場所ですね(^-^;

フリーの「Let's encrypt」なども使えます。

あと、Herokuでの実装している人もいましたし、私なんかはwebscript.ioを使ってみたりもしました。

前は:443をつけなければならない謎な感じでしたが、今回はいらないようですw

f:id:m_training:20161001200220p:plain

設定後に「Verify」をクリックすると、うまくいっている場合は「success」となります。

Bad gatewayなど出たりして色々頑張っていました(^-^;

 

Server IP Whitelist

前は必須でしたが、今回は必須ではないようです。

設定しない場合は「どこからでもOK」になります。

セキュリティ面がありますので、設定はしたほうが良いかもしれません。

 

f:id:m_training:20161001200800p:plain

 

これでようやく設定終わりです!!

 

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が送られてきます

f:id:m_training:20161001204537p:plain

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です!

 

f:id:m_training:20161001205345p:plain

https://devdocs.line.me/ja/#reply-message

PHPにするとこんな感じ。(上のコードと同じです)

f:id:m_training:20161001205443p:plain

 

Header

Content-Type: application/json

Authorization: Bearer あなたのアクセストークン

 

ここでアクセストークンを使います。

 

データ部分

受信のときに送られてきた「replyToken」をココで使います。

メッセージについては{"type","text"},{"type","text"}....といった感じで、タイプとテキストが複数入ります。

なのでひとつでも複数の形で渡してあげないといけません。

 

これで最小限の動作をするBotが完成ですw

簡単なのですが、logとか吐き出させる何かがないと動作確認がかなりつらいです……。

(私は最初はwebscript.ioというSSLが使える場所で動作確認をしていました。webhookでのアクセスなどのlogをだしてくれます。言語はLuaですが…)

 

ついでに、画像送信とスタンプ送信、それと今回から追加されたTemplateタイプ(buttonタイプ)の例もちょっと載せておきますねw

画像

f:id:m_training:20161001210856p:plain

スタンプ(パッケージIDとスタンプIDが必要です)

スタンプ一覧

f:id:m_training:20161001210942p:plain

テンプレートタイプ(下はボタンタイプの例)

f:id:m_training:20161001211245p:plain

 

これで基本的な説明は終わりです!

メッセージを返すだけなら簡単ですねw

 

さて、何やらBotでコンテストがあって優勝すると賞金最大1000万円だそうです。

これはちょっと気持ちがざわつきますねw

botawards.line.me

 

2017/2/5追記

動かしてみたいといったお話をいただきましたので、説明したコードそのままのBotとコードを置いておきますw

f:id:m_training:20170205223549p:plain

友だち追加

 

 Github

GitHub - jam0824/LineBotExamples: LINE Botの例です。

 

 

 

Official LINE Account
友だち追加
@hgf7288s