LINE Messaging APIを使ったオウム返しBot (Perl)

  • 7
    いいね
  • 0
    コメント

概要

LINE Messaging API を使って、Perlでオウム返しBotを作成してみます。
アカウントは、LINE Business Center から取得可能です。

動作イメージ

13E8592F-57FA-4C02-8FF1-2B514F8B38E5.jpg

動かし方

Replay message と呼ばれるAPIを使用します。
Botが反応するまでの大まかな流れは以下の通りです。(太字が今回作成する処理)

  1. BotのいるLINE部屋で喋る
  2. 事前設定したURLにLINEサーバからPOSTが届く
  3. POST内容からメッセージ本文と返信用トークンを取得する
  4. 返信用トークンを使用して、LINEサーバにメッセージを送信
  5. 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を作ってみました。

1F950689-54BE-4A0F-B4F6-2AEA725482FB.jpg