Message typeを使いこなし表現力豊かなbotにする
Echo botではTextタイプを利用したサンプルコードを紹介しましたが,
メディアファイルの送受信
botから画像や動画などのメディアファイルを送信するためには,
リスト2はアップロードしたメディアファイルをMessaging APIでユーザーに送信するサンプルです。preview_
は動画中から生成したサムネイル画像以外も指定できますが,
リスト2 メディアファイルの送信
my $messages = LINE::Bot::API::Builder::SendMessage->new(
)->add_image(
image_url => 'https://example.com/file.jpg',
preview_url => 'https://example.com/thumbnail.jpg', ―(1)
)->add_audio(
audio_url => 'https://example.com/file.m4a',
duration => 361_000, ―(2)
)->add_image(
video_url => 'https://example.com/video.mp4',
preview_url => 'https://example.com/thumbnail.jpg', ―(3)
);
LINEサーバからダウンロードする
ユーザーから画像,
リスト3は,get_
メソッドを利用してLINEサーバからダウンロードします。
リスト3 メディアファイルの受信
if ($event->is_image_message || $event->is_audio_message
|| $event->is_video_message) {
my $ret = $bot->get_message_content(
$event->message_id); ―(1)
if ($ret->is_success) {
my $filename = $ret->fh->filename;
open my $fh, '<', $file or die "$!: $file"; ―(2)
... # ファイル処理
}
}
スタンプの送受信
リスト4はスタンプの送受信を行うコードです。ただし,package_
とsticker_
は非公開となっているため,
リスト4 スタンプの送受信
# 受信時 ―(1)
if ($event->is_sticker_message) {
say $event->package_id;
say $event->sticker_id;
}
# 送信時
my $messages = LINE::Bot::API::Builder::SendMessage->new(
)->add_sticker(
package_id => '1',
sticker_id => '2',
);
位置情報の送受信
リスト5は緯度経度情報の送受信のコードです。たとえば
リスト5 位置情報の送受信
# 受信時
if ($event->is_location_message) {
say $event->title;
say $event->address;
say $event->latitude;
say $event->longitude;
}
# 送信時 ―(1)
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,
);