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_sticke r 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_m essage 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_messa ges 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_conten t 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_i nformation 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