NAME
LINE::Bot::API - SDK of the LINE Messaging API for Perl
SYNOPSIS
# in the synopsis.psgi
use strict;
use warnings;
use LINE::Bot::API;
use LINE::Bot::API::Builder::SendMessage;
use Plack::Request;
my $bot = LINE::Bot::API->new(
channel_secret => $channel_secret,
channel_access_token => $channel_access_token,
);
sub {
my $req = Plack::Request->new(shift);
unless ($req->method eq 'POST' && $req->path eq '/callback') {
return [200, [], ['Not Found']];
}
unless ($bot->validate_signature($req->content, $req->header('X-Line-Signature'))) {
return [200, [], ['failed to validate signature']];
}
my $events = $bot->parse_events_from_json($req->content);
for my $event (@{ $events }) {
next unless $event->is_message_event && $event->is_text_message;
my $messages = LINE::Bot::API::Builder::SendMessage->new;
$messages->add_text( text => $event->text );
$bot->reply_message($event->reply_token, $messages->build);
}
return [200, [], ["OK"]];
};
DESCRIPTION
LINE::Bot::API is a client library which lets you easily start using
the LINE Messaging API. You can create a bot which runs on the LINE app
by registering for a LINE Messaging API account. You can create a
Messaging API account from the LINE Business Center
.
You can find the Channel secret and Channel access token on the Basic
information page on the Channel Console which you can access from the
LINE Business Center .
Use this documentation and the LINE Developers documentation to get you
started developing your own bot!
METHODS
new(%args)
Create a new LINE::Bot::API instance.
my $bot = LINE::Bot::API->new(
channel_secret => $channel_secret,
channel_access_token => $channel_access_token,
);
reply_message($reply_token, [ $message, ... ] )
Send reply messages to a user, room or group.
my $messages = LINE::Bot::API::Builder::SendMessage->new;
$messages->add_text( text => 'Example reply text' );
my $ret = $bot->reply_message($reply_token, $messages->build);
unless ($ret->is_success) {
# error
warn $ret->message;
for my $detail (@{ $res->details // []}) {
warn " detail: " . $detail->{message};
}
}
You can get a reply_token from a webhook event object
. See the documentation
for the parse_events_from_json($json) method.
You can also see the online API reference documentation.
https://devdocs.line.me/#reply-message
push_message($user_id|$room_id|$group_id, [ $message, ... ])
Send push messages to a user, room or group.
my $messages = LINE::Bot::API::Builder::SendMessage->new;
$messages->add_text( text => 'Example push text' );
$bot->push_message($user_id, $messages->build);
You can get a user_id, room_id or group_id from a webhook event object
. See the documentation
for the parse_events_from_json($json) method.
You can also see the online API reference documentation.
https://devdocs.line.me/#push-message
multicast([$user_id, ... ], [ $message, ... ])
Send push messages to multiple users.
my $messages = LINE::Bot::API::Builder::SendMessage->new;
$messages->add_text( text => 'Example push text' );
$bot->multicast([ $user_id ], $messages->build);
You can get a user_id from a webhook event object
. See the documentation
for the parse_events_from_json($json) method.
You can also see the online API reference documentation.
https://devdocs.line.me/#multicast
validate_signature($json, $signature)
my $req = Plack::Request->new( ... );
unless ($bot->validate_signature($req->content, $req->header('X-Line-Signature'))) {
die 'failed to signature validation';
}
parse_events_from_json($json)
Parse webhook event objects and build LINE::Bot::API::Event instances.
my $req = Plack::Request->new( ... );
my $events = $bot->parse_events_from_json($req->content);
for my $event (@{ $events }) {
unless ($event->is_unfollow_event && $event->is_leave_event) {
# Get a reply_token
my $reply_token = $event->reply_token;
}
if ($event->is_user_event) {
# Get a user_id
my $user_id = $event->user_id;
}
if ($event->is_room_event) {
# Get a room_id
my $room_id = $event->room_id;
}
if ($event->is_group_event) {
# Get a group_id
my $group_id = $event->group_id;
}
if ($event->is_message_event) {
# Get a message id
my $message_id = $event->message_id;
}
}
leave_room($room_id)
Bot leaves a room.
$bot->leave_room($room_id);
You can get a room_id by a Webhook Event Object
. And see also
parse_events_from_json($json) method's document.
leave_group($group_id)
Bot leaves a group.
$bot->leave_group($group_id);
You can get a group_id from a webhook event object
. See the documentation
for the parse_events_from_json($json) method.
get_message_content($message_id)
Get the original file which was sent by user.
my $ret = $bot->get_message_content($message_id);
if ($ret->is_success) {
my $filename = $ret->fh->filename;
open my $fh, '<', $file or die "$!: $file";
...
}
You can get a message_id from a webhook event object
. See the documentation
for the parse_events_from_json($json) method.
You can also see the online API reference documentation.
https://devdocs.line.me/#get-content
get_profile($user_id)
Get user profile information.
my $res = $bot->get_profile($user_id);
if ($ret->is_success) {
say $ret->display_name;
say $ret->user_id;
say $ret->picture_url;
say $ret->status_message;
}
See the online API reference documentation.
https://devdocs.line.me/#bot-api-get-profile
How to build a send message object
When the LINE::Bot::API::Builder::SendMessage class is used, it is
possible easily to build a send message object. That class supports a
fluent interface.
my $messages = LINE::Bot::API::Builder::SendMessage->new(
)->add_text(
text => 'Closing the distance',
)->add_image(
image_url => 'http://example.com/image.jpg',
preview_url => 'http://example.com/image_preview.jpg',
);
$bot->reply_message($reply_token, $messages->build);
See the online API reference documentation.
https://devdocs.line.me/#send-message-object
Text type
Build a text type object.
my $messages = LINE::Bot::API::Builder::SendMessage->new(
)->add_text(
text => 'Closing the distance',
);
$bot->reply_message($reply_token, $messages->build);
Image type
Build an image type object.
my $messages = LINE::Bot::API::Builder::SendMessage->new(
)->add_image(
image_url => 'http://example.com/image.jpg',
preview_url => 'http://example.com/image_preview.jpg',
);
$bot->reply_message($reply_token, $messages->build);
Video type
Build a video type object.
my $messages = LINE::Bot::API::Builder::SendMessage->new(
)->add_video(
video_url => 'http://example.com/video.mp4',
preview_url => 'http://example.com/video_preview.jpg',
);
$bot->reply_message($reply_token, $messages->build);
Audio type
Build an audio type object.
my $messages = LINE::Bot::API::Builder::SendMessage->new(
)->add_audio(
audio_url => 'http://example.com/image.m4a',
duration => 3601_000, # msec
);
$bot->reply_message($reply_token, $messages->build);
Location type
Build a location type object.
my $messages = LINE::Bot::API::Builder::SendMessage->new(
)->add_location(
title => 'LINE Corporation.',
address => 'Hikarie Shibuya-ku Tokyo 151-0002',
latitude => 35.6591,
longitude => 139.7040,
);
$bot->reply_message($reply_token, $messages->build);
Sticker type
Build a sticker type object.
my $messages = LINE::Bot::API::Builder::SendMessage->new(
)->add_sticker(
package_id => '1',
sticker_id => '2',
);
$bot->reply_message($reply_token, $messages->build);
Imagemap type
Build an imagemap type object. You can use a helper module for the
imagemap type.
my $imagemap = LINE::Bot::API::Builder::ImagemapMessage->new(
base_url => 'https://example.com/bot/images/rm001',
alt_text => 'this is an imagemap',
base_width => 1040,
base_height => 1040,
)->add_uri_action(
uri => 'http://example.com/',
area_x => 0,
area_y => 0,
area_width => 1040,
area_height => 520,
)->add_message_action(
text => 'message',
area_x => 0,
area_y => 520,
area_width => 1040,
area_height => 520,
);
my $messages = LINE::Bot::API::Builder::SendMessage->new(
)->add_imagemap($imagemap->build);
$bot->reply_message($reply_token, $messages->build);
Template type
Build a template type object. You can use a helper module for the
template type.
Buttons type
my $buttons = LINE::Bot::API::Builder::TemplateMessage->new_buttons(
alt_text => 'this is a buttons template',
image_url => 'https://example.com/bot/images/image.jpg',
title => 'buttons',
text => 'description',
)->add_postback_action(
label => 'postback',
data => 'postback data',
text => 'postback message',
)->add_message_action(
label => 'message',
text => 'message',
)->add_uri_action(
label => 'uri',
uri => 'http://example.com/',
)->add_message_action(
label => 'message2',
text => 'message2',
);
my $messages = LINE::Bot::API::Builder::SendMessage->new(
)->add_template($buttons->build);
$bot->reply_message($reply_token, $messages->build);
Confirm type
my $confirm = LINE::Bot::API::Builder::TemplateMessage->new_confirm(
alt_text => 'this is a confirm template',
text => 'confirm',
)->add_postback_action(
label => 'postback',
data => 'postback data',
text => 'postback message',
)->add_message_action(
label => 'message',
text => 'message',
)->add_uri_action(
label => 'uri',
uri => 'http://example.com/',
);
my $messages = LINE::Bot::API::Builder::SendMessage->new(
)->add_template($confirm->build);
$bot->reply_message($reply_token, $messages->build);
Carousel type
my $carousel = LINE::Bot::API::Builder::TemplateMessage->new_carousel(
alt_text => 'this is a carousel template',
);
for my $i (1..5) {
my $column = LINE::Bot::API::Builder::TemplateMessage::Column->new(
image_url => 'https://example.com/bot/images/item.jpg',
title => "carousel $i",
text => "description $i",
)->add_postback_action(
label => 'postback',
data => 'postback data',
text => 'postback message',
)->add_message_action(
label => 'message',
text => 'message',
)->add_uri_action(
label => 'uri',
uri => 'http://example.com/',
);
$carousel->add_column($column->build);
}
my $messages = LINE::Bot::API::Builder::SendMessage->new(
)->add_template($carousel->build);
$bot->reply_message($reply_token, $messages->build);
COPYRIGHT & LICENSE
Copyright 2016 LINE Corporation
This Software Development Kit is licensed under The Artistic License
2.0. You may obtain a copy of the License at
https://opensource.org/licenses/Artistic-2.0
SEE ALSO
LINE::Bot::API::Event, https://business.line.me/,
https://devdocs.line.me/