NAME
LINE::Bot::API - SDK of the LINE BOT API Trial for Perl
SYNOPSIS
# in the synopsis.psgi
use strict;
use warnings;
use LINE::Bot::API;
use Plack::Request;
my $bot = LINE::Bot::API->new(
channel_id => 'YOUR LINE BOT Channel ID',
channel_secret => 'YOUR LINE BOT Channel Secret',
channel_mid => 'YOUR LINE BOT MID',
);
sub {
my $req = Plack::Request->new(shift);
unless ($req->method eq 'POST' && $req->path eq '/callback') {
return [404, [], ['Not Found']];
}
unless ($bot->validate_signature($req->content, $req->header('X-LINE-ChannelSignature'))) {
return [470, [], ['failed to validate signature']];
}
my $receives = $bot->create_receives_from_json($req->content);
for my $receive (@{ $receives }) {
next unless $receive->is_message && $receive->is_text;
my $res = $bot->send_text(
to_mid => $receive->from_mid,
text => $receive->text,
);
}
return [200, [], ["OK"]];
};
DESCRIPTION
LINE::Bot::API is a client library to easily use the LINE BOT API. You
can create a bot which will run on the LINE App by registering your bot
account. Your BOT API Trial account can be created from LINE BUSINESS
CENTER .
You can find the Channel ID, Channel Secret and MID on the Basic
information page at LINE developers .
Please use this POD and LINE developers site's online documentation to
enjoy your bot development work!
METHODS
new()
Create a new LINE::Bot::API instance.
my $bot = LINE::Bot::API->new(
channel_id => 'YOUR LINE BOT Channel ID',
channel_secret => 'YOUR LINE BOT Channel Secret',
channel_mid => 'YOUR LINE BOT MID',
);
Sending messages
The to_mid parameter for the Sending message API.
$bot->send_text(
to_mid = $mid,
);
When you use a SCALAR value in the to_mid, this method sends message to
one person. Although if you use ARRAY ref in the to_mid, this sends
message to all mids in the ARRAY.
$bot->send_text(
to_mid = [ $mid1, $mid2, $mid3, ... ],
);
See also a online documentation.
https://developers.line.me/bot-api/api-reference#sending_message
send_text()
Send a text message to the mids.
my $res = $bot->send_text(
to_mid => $mid,
text => 'Closing the distance',
);
send_image()
Send a image file to the mids.
my $res = $bot->send_image(
to_mid => $mid,
image_url => 'http://example.com/image.jpg', # originalContentUrl
preview_url => 'http://example.com/image_preview.jpg', # previewImageUrl
);
send_video()
Send a video file to the mids.
my $res = $bot->send_video(
to_mid => $mid,
video_url => 'http://example.com/video.mp4', # originalContentUrl
preview_url => 'http://example.com/video_preview.jpg', # previewImageUrl
);
send_audio()
Send a audio file to the mids.
my $res = $bot->send_audio(
to_mid => $mid,
audio_url => 'http://example.com/image.m4a', # originalContentUrl
duration => 3601, # contentMetadata.AUDLEN
);
send_location()
Send a location data to the mids.
my $res = $bot->send_location(
to_mid => $mid,
text => 'LINE Corporation.',
address => 'Hikarie Shibuya-ku Tokyo 151-0002', # location.address
latitude => '35.6591', # location.latitude
longitude => '139.7040', # location.longitude
);
send_sticker()
Send a sticker to the mids.
See the online documentation to find which sticker's you can send.
https://developers.line.me/bot-api/api-reference#sending_message_sticker
my $res = $bot->send_sticker(
to_mid => $mid,
stkid => 1, # contentMetadata.STKID
stkpkgid => 2, # contentMetadata.STKPKGID
stkver => 3, # contentMetadata.STKVER
);
Sending rich messages
The rich_message method allows you to use the Sending rich messages
API.
See also a online documentation.
https://developers.line.me/bot-api/api-reference#sending_rich_content_message
my $res = $bot->rich_message(
height => 1040,
)->set_action(
MANGA => (
text => 'manga',
link_uri => 'https://store.line.me/family/manga/en',
),
)->add_listener(
action => 'MANGA',
x => 0,
y => 0,
width => 520,
height => 520,
)->set_action(
MUSIC => (
text => 'misic',
link_uri => 'https://store.line.me/family/music/en',
),
)->add_listener(
action => 'MUSIC',
x => 520,
y => 0,
width => 520,
height => 520,
)->set_action(
PLAY => (
text => 'play',
link_uri => 'https://store.line.me/family/play/en',
),
)->add_listener(
action => 'PLAY',
x => 0,
y => 520,
width => 520,
height => 520,
)->set_action(
FORTUNE => (
text => 'fortune',
link_uri => 'https://store.line.me/family/uranai/en',
),
)->add_listener(
action => 'FORTUNE',
x => 520,
y => 520,
width => 520,
height => 520,
)->send_message(
to_mid => $mid,
image_url => 'https://example.com/rich-image/foo', # see also https://developers.line.me/bot-api/api-reference#sending_rich_content_message_prerequisite
alt_text => 'This is a alt text.',
);
Sending multiple messages
The multiple_message method allows you to use the Sending multiple
messages API.
See also a online documentation.
https://developers.line.me/bot-api/api-reference#sending_multiple_messages
my $res = $bot->multiple_message(
)->add_text(
text => 'hi!',
)->add_image(
image_url => 'http://example.com/image.jpg',
preview_url => 'http://example.com/image_preview.jpg',
)->add_video(
video_url => 'http://example.com/video.mp4',
preview_url => 'http://example.com/video_preview.jpg',
)->add_audio(
audio_url => 'http://example.com/image.m4a',
duration => 3601,
)->add_location(
text => 'LINE Corporation.',
address => 'Hikarie Shibuya-ku Tokyo 151-0002',
latitude => '35.6591',
longitude => '139.7040',
)->add_sticker(
stkid => 1,
stkpkgid => 2,
stkver => 3,
)->send_messages(
to_mid => $mid,
message_notified => 0, # messageNotified
);
## Receiving messages/operation
The following utility methods allow you to easily process messages sent
from the BOT API platform via a Callback URL.
validate_signature()
my $req = Plack::Request->new( ... );
unless ($bot->validate_signature($req->content, $req->header('X-LINE-ChannelSignature'))) {
die 'failed to signature validation';
}
create_receives_from_json()
my $req = Plack::Request->new( ... );
my $receives = $bot->create_receives_from_json($req->content);
See also LINE::Bot::Receive.
Getting message content
You can retreive the binary contents (image files and video files)
which was sent from the user to your bot's account.
my $receives = $bot->create_receives_from_json($req->content);
for my $receive (@{ $receives }) {
next unless $receive->is_message && ($receive->is_image || $receive->is_video);
if ($receive->is_image) {
my($temp) = $bot->get_message_content($receive->content_id);
my $original_image = $temp->filename;
} elsif ($receive->is_video) {
my($temp) = $bot->get_message_content($receive->content_id);
my $original_video = $temp->filename;
}
my($temp) = $bot->get_preview_message_content($receive->content_id);
my $preview_image = $temp->filename;
}
See also a online documentation.
https://developers.line.me/bot-api/api-reference#getting_message_content
get_message_content()
Get the original file which was sent by user.
get_preview_message_content()
Get the preview image file which was sent by user.
Getting user profile information
You can retrieve the user profile information by specifying the mid.
See also a online document.
https://developers.line.me/bot-api/api-reference#getting_user_profile_information
my $res = $bot->get_user_profile(@mids);
say $res->{contacts}[0]{displayName};
say $res->{contacts}[0]{mid};
say $res->{contacts}[0]{pictureUrl};
say $res->{contacts}[0]{statusMessage};
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::Receive, https://business.line.me/,
https://developers.line.me/bot-api/overview,
https://developers.line.me/bot-api/getting-started-with-bot-api-trial