サイドスリーブログ

LINEボット(Messaging API+Talk API+HEROKU)作ってみました!③


                LINEボット(Messaging API+Talk API+HEROKU)作ってみました!③

前回の記事から半年も経過してしまいましたが、やっと最後の記事を公開することができました。
最後は、リクルートテクノロジーズ社のTalk APIを連携させて自動応答のLineボットを完成させるまでの記事になります。
ちなみに、これまでの記事は「関連記事」よりご覧ください。

もうLINEボット1回目の記事は忘れさられているでしょうから、再度、LINEボットの全体像の説明から。

全体像

全体図

LINE Messaging API で受け取ったメッセージをTalk APIに投げて、返ってきた値をLINE Messaging API に渡してメッセージを返すといった仕組みです。
これまでの記事で、HEROKUのサービスとLINEのMessaging APIを紹介してきましたが、今回で最後となる本記事ではMessaging APIとTalk APIを連携させて自動応答のLineボットを完成させます。

それでは、リクルートテクノロジーズ社のTalk APIの紹介から始めます。

Talk APIとは?

リクルートテクノロジーズ社が提供しているAPI群の一つで、Chatbotを作成するためのAPIです。
リクエストしたメッセージから日常会話で自動応答してくれます。また、ユーザとの会話を学習していくことでより賢く、より自然な会話を実現してくれるそうです。
詳しい情報はリクルートテクノロジーズ社のA3RTのサイトをご覧ください。

それでは、このTalk APIを利用するために必要なAPI KEYの発行を行います。

API KEYの発行方法

Talk APIを利用するためのAPI KEYの発行は、公式サイトのTalk APIのページから行います。
公式サイト Talk API はこちら

利用規約、プライバシーポリシーに同意できれば、メールアドレスを記入して「送信」します。
送信後、入力したアドレスに確認メールが届くので、承認用URLをクリックして手続きを進めます。

手続きが完了すると、入力したアドレスにTalk API利用に必要なAPI KEYが届きます。
API KEYが入手できたら、続いてTalk APIの利用方法です。

Talk APIの利用方法

詳細は、公式ドキュメントをご覧いただくとして、Talk APIの利用法を簡単に説明します。
利用方法は簡単で、指定のアドレス(エンドポイント)に、取得した「API KEY」と「メッセージ」をPOST形式で送信するだけです。
送信すると、こちらが送ったメッセージに対して応答してくれます。

Talk APIの利用法がわかったところで、次はLine Messaging API と連携するための設定です。

Line Messaging API の設定

前回の記事で作成したLINEのチャンネル(アプリ)を利用します。
作成したアプリでメッセージを送信した時に、その内容を用意したプログラムに送信(フック)する設定を行います。
送信先は、1回目の記事で作成したHEROKUサーバを利用します。

LINE Developers にログインして、前回作成したチャンネルにアクセスします。

Webhook URLにメッセージの送信先(プログラムを配置するサーバ)となるアドレスを指定します。
また、この機能を有効する必要があるので「Use webhook」をONにします。

続いて、Use webhook を有効にすると、LINEのデフォルト応答メッセージが送信されてしまうので、こちらの機能は無効にします。

これで準備は整ったので、最後にWebhook URLで指定したアドレスに連携用のプログラムを設置します。

LINEボット API連携用プログラム

以下、LINEボット連協用のプログラムコードです。 こちらのコードをWebhook URLに指定したアドレスに設置します。

php

$LineAccessToken = '<アクセストークン>';
$LineRequest = file_get_contents('php://input');
$LineRequest = json_decode($LineRequest);
$LineReplyToken = $LineRequest->{'events'}[0]->{'replyToken'};
$LineMessage    = $LineRequest->{'events'}[0]->{'message'}->{'text'};

$A3rtCh = curl_init('https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk');
$A3rtSetOpt['apikey'] = '<API KEY>';
$A3rtSetOpt['query'] = $LineMessage;
curl_setopt($A3rtCh, CURLOPT_POST, true);
curl_setopt($A3rtCh, CURLOPT_POSTFIELDS, $A3rtSetOpt);
curl_setopt($A3rtCh, CURLOPT_RETURNTRANSFER, true);
$A3rtRes =  curl_exec($A3rtCh);
$A3rtRes = json_decode($A3rtRes);
$A3rtMessage = $A3rtRes->results['0']->reply;
curl_close($A3rtCh);

$LineCh = curl_init("https://api.line.me/v2/bot/message/reply");
$LineSetOpt['replyToken'] = $LineReplyToken;
$LineSetOpt['messages'][0]['type'] = 'text';
$LineSetOpt['messages'][0]['text'] = $A3rtMessage;
$LineSetOpt = json_encode($LineSetOpt);
curl_setopt($LineCh, CURLOPT_POST, true);
curl_setopt($LineCh, CURLOPT_POSTFIELDS, $LineSetOpt);
curl_setopt($LineCh, CURLOPT_RETURNTRANSFER, true);
curl_setopt($LineCh, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($LineCh, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charser=UTF-8', 'Authorization: Bearer ' . $LineAccessToken));
curl_exec($LineCh);
curl_close($LineCh);

コードの説明

php

$LineAccessToken = '<アクセストークン>';
$LineRequest = file_get_contents('php://input');
$LineRequest = json_decode($LineRequest);
$LineReplyToken = $LineRequest->{'events'}[0]->{'replyToken'};
$LineMessage    = $LineRequest->{'events'}[0]->{'message'}->{'text'};

まず、こちらのコードで、LINEから送信されてきたデータから、応答メッセージに必要な「応答トークン($LineReplyToken)」と「メッセージ内容($LineMessage )」を取得しています。

php

$A3rtCh = curl_init('https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk');
$A3rtSetOpt['apikey'] = '<API KEY>';
$A3rtSetOpt['query'] = $LineMessage;
curl_setopt($A3rtCh, CURLOPT_POST, true);
curl_setopt($A3rtCh, CURLOPT_POSTFIELDS, $A3rtSetOpt);
curl_setopt($A3rtCh, CURLOPT_RETURNTRANSFER, true);
$A3rtRes =  curl_exec($A3rtCh);
$A3rtRes = json_decode($A3rtRes);
$A3rtMessage = $A3rtRes->results['0']->reply;
curl_close($A3rtCh);

次に、LINEから受け取ったメッセージ内容をTalk API に送信して、その応答メッセージ($A3rtMessage)を取得しています。

php

$LineCh = curl_init("https://api.line.me/v2/bot/message/reply");
$LineSetOpt['replyToken'] = $LineReplyToken;
$LineSetOpt['messages'][0]['type'] = 'text';
$LineSetOpt['messages'][0]['text'] = $A3rtMessage;
$LineSetOpt = json_encode($LineSetOpt);
curl_setopt($LineCh, CURLOPT_POST, true);
curl_setopt($LineCh, CURLOPT_POSTFIELDS, $LineSetOpt);
curl_setopt($LineCh, CURLOPT_RETURNTRANSFER, true);
curl_setopt($LineCh, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($LineCh, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charser=UTF-8', 'Authorization: Bearer ' . $LineAccessToken));
curl_exec($LineCh);
curl_close($LineCh);

最後に、Talk APIから受け取った応答メッセージ($A3rtMessage)をLINE Messaging API に渡して、LINEユーザーに応答メッセージを送っています。

プログラムの設置ができたら、実際にLINEからメッセージを送ってみます。

LINEボット完成

実際にLINEからメッセージを送ってみて、こんな感じで自動で応答メッセージがあればLINEボット完成です。

まとめ

3回に渡って紹介してきたLINEボットの記事はいかがでしたでしょうか。
LINEボット作成で利用したのは、Messaging APIとTalk APIの2つでしたが、この他にも色々APIが提供されているので、APIの組み合わせを考えみるのも面白いかもしれませんね。