概要
LINE Messaging API を使って、Perlでオウム返しBotを作成してみます。
アカウントは、LINE Business Center から取得可能です。
動作イメージ
動かし方
Replay message と呼ばれるAPIを使用します。
Botが反応するまでの大まかな流れは以下の通りです。(太字が今回作成する処理)
- BotのいるLINE部屋で喋る
- 事前設定したURLにLINEサーバからPOSTが届く
- POST内容からメッセージ本文と返信用トークンを取得する
- 返信用トークンを使用して、LINEサーバにメッセージを送信
- Botがメッセージを喋ってくれる
ソースコード
line_echo_bot.pl
#!/usr/bin/perl
use CGI;
use JSON;
use LWP::UserAgent;
my $cgi = new CGI();
my $json = new JSON();
my $ua = new LWP::UserAgent();
# API認証情報
my $API_URI = "https://api.line.me/v2/bot/message/reply";
my $CHANNEL_ACCCESS_TOKEN = "xxxxx"; # LINE developersから取得したtokenを指定
# LINEからPOST受信
my $source = $cgi->param('POSTDATA');
my $items = $json->decode($source);
my $event = $items->{events}[0];
# replyToken、投稿内容取得
my $reply_token = $event->{replyToken};
my $reply_text = $event->{message}->{text};
# LINEに200を返す
print "Status: 200 OK\n";
print "Content-Type: text/html\n\n";
# 返信メッセージ作成、JSONエンコード
my $data = {
"replyToken" => $reply_token,
"messages" => [
{"type" => "text", "text" => "復唱するよ。"},
{"type" => "text", "text" => $reply_text}
]
};
my $content = $json->utf8(0)->encode($data);
# POSTリクエスト生成
my $req = HTTP::Request->new("POST", $API_URI);
$req->header("Content-Type" => "application/json");
$req->header("Authorization" => "Bearer $CHANNEL_ACCCESS_TOKEN");
$req->content($content);
# POST送信
$ua->request($req);
以下の箇所を修正することで、一度につき5件までメッセージ送信が可能です。
"messages" => [
{"type" => "text", "text" => "復唱するよ。"},
{"type" => "text", "text" => $reply_text}
]
上記のサンプルコードは、GitHubより取得可能です。
https://github.com/yuu26jp/line-echo-bot
参考資料
API Reference - Messaging API
API Reference - Webhook Event Object
API Reference - Reply Message
活用例
グループ部屋にもBotを参加させることは可能なので、いろいろ遊んでみてください。
私はスプラトゥーンでよく遊ぶので、こんなBotを作ってみました。