7
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-10-28

概要

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

7
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?