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->signature_validation($req->content, $req->header('X-LINE-ChannelSignature'))) {
return [470, [], ['failed to signature validation']];
}
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.
signature_validation()
my $req = Plack::Request->new( ... );
unless ($bot->signature_validation($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_message_content_preview($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_message_content_preview()
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_profile_information(@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