9
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

概要

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
9
Help us understand the problem. What are the problem?