Edited at

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

More than 1 year has passed since last update.


概要

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