Day14-Webhook 实作(三)LINEBot 之 MessageBuilder(I)

大家好~
今天来试着传送不同类型讯息回覆使用者吧!

以下范例为以如何使用不同的 MessageBuilder 为主,
若对签名验证与一些例外处理有兴趣,
欢迎参考 Day13 喔~

Text message

范例1:

use LINE\LINEBot\HTTPClient\CurlHTTPClient;
use LINE\LINEBot;
use LINE\LINEBot\MessageBuilder\TextMessageBuilder;

public function reply(Request $request)
{
    $httpClient = new CurlHTTPClient(env('LINE_BOT_CHANNEL_ACCESS_TOKEN'));
    $bot = new LINEBot($httpClient, ['channelSecret' => env('LINE_BOT_CHANNEL_SECRET')]);
    $replyToken = $request['events'][0]['replyToken'];
    $reply = $request['events'][0]['message']['text'];
    $text = new TextMessageBuilder($reply);
    $bot->replyMessage($replyToken, $text);
}

范例2:

use LINE\LINEBot\HTTPClient\CurlHTTPClient;
use LINE\LINEBot;
use LINE\LINEBot\MessageBuilder\TextMessageBuilder;
use LINE\LINEBot\MessageBuilder\Text\EmojiBuilder;
use LINE\LINEBot\MessageBuilder\Text\EmojiTextBuilder;

public function reply(Request $request)
{
    $httpClient = new CurlHTTPClient(env('LINE_BOT_CHANNEL_ACCESS_TOKEN'));
    $bot = new LINEBot($httpClient, ['channelSecret' => env('LINE_BOT_CHANNEL_SECRET')]);
    $replyToken = $request['events'][0]['replyToken'];
    $reply = $request['events'][0]['message']['text'];
    $emoji1 = new EmojiBuilder(0, '5ac1de17040ab15980c9b438', '095');
    $emoji2 = new EmojiBuilder(1, '5ac1de17040ab15980c9b438', '095');
    $emojiText = new EmojiTextBuilder('$$' . $reply, $emoji1, $emoji2);
    $text = new TextMessageBuilder($emojiText);
    $bot->replyMessage($replyToken, $text);
}

一般文字回覆的使用方式十分容易,
只需将要回覆的 string 放入 TextMessageBuilder 实例中即可。
若想要用 Line Emoji 回覆,
则需要实例化较多个 Class,
还需要知道一些小重点:

  1. 最多可用20个 Line Emoji。
  2. Line Emoji 使用 $ 作为占位符。
  3. 关於占位符的 index 计算:
    • 第一个字元位置是以0开始计算。
    • 若 index 位置与 $ 不匹配,会回传 HTTP 400 Bad request。
  4. 可用的 Line Emoji 可以参考官方文件喔。
  • EmojiBuilder
  • EmojiTextBuilder
    • 如果有多个 Line Emoji,就像范例一样直接依序放入就行了。
      • $emojiText = new EmojiTextBuilder('$$' . $reply, $emoji1, $emoji2);
  • TextMessageBuilder
    • 如果是一般文字讯息:
      • 直接将 String 带入就可以了。
    • 如果是包含 Line Emoji:
      • 将 EmojiTextBuilder 的实例带入。

Sticker message

use LINE\LINEBot\HTTPClient\CurlHTTPClient;
use LINE\LINEBot;
use LINE\LINEBot\MessageBuilder\StickerMessageBuilder;

public function reply(Request $request)
{
    $httpClient = new CurlHTTPClient(env('LINE_BOT_CHANNEL_ACCESS_TOKEN'));
    $bot = new LINEBot($httpClient, ['channelSecret' => env('LINE_BOT_CHANNEL_SECRET')]);
    $replyToken = $request['events'][0]['replyToken'];
    $sticker = new StickerMessageBuilder('11537', '52002771');
    $bot->replyMessage($replyToken, $sticker);
}

Image message

use LINE\LINEBot\HTTPClient\CurlHTTPClient;
use LINE\LINEBot;
use LINE\LINEBot\MessageBuilder\ImageMessageBuilder;

public function reply(Request $request)
{
    $httpClient = new CurlHTTPClient(env('LINE_BOT_CHANNEL_ACCESS_TOKEN'));
    $bot = new LINEBot($httpClient, ['channelSecret' => env('LINE_BOT_CHANNEL_SECRET')]);
    $replyToken = $request['events'][0]['replyToken'];
    $image = new ImageMessageBuilder(
        'https://cdn-icons-png.flaticon.com/512/3522/3522266.png',
        'https://cdn-icons-png.flaticon.com/512/3522/3522248.png'
    );
    $bot->replyMessage($replyToken, $image);
}


上面范例刻意用两张不一样的图片让测试结果更好分辨:

  • 图A为 Preview Image
    • Max file size: 1 MB
  • 图B为 Original Content
    • Max file size: 10 MB
  • 图片格式仅接受 JPEG or PNG

Video message

use LINE\LINEBot\HTTPClient\CurlHTTPClient;
use LINE\LINEBot;
use LINE\LINEBot\MessageBuilder\VideoMessageBuilder;

public function reply(Request $request)
{
    $httpClient = new CurlHTTPClient(env('LINE_BOT_CHANNEL_ACCESS_TOKEN'));
    $bot = new LINEBot($httpClient, ['channelSecret' => env('LINE_BOT_CHANNEL_SECRET')]);
    $replyToken = $request['events'][0]['replyToken'];
    $video = new VideoMessageBuilder(
        'https://img-9gag-fun.9cache.com/photo/aEpr2ON_460svvp9.mp4',
        'https://img-9gag-fun.9cache.com/photo/abVPMOL_460swp.png'
    );
    $bot->replyMessage($replyToken, $video);
}

  • Preview Image
    • Max file size: 1 MB
    • JPEG or PNG
  • Original Content
    • Max file size: 200 MB
    • mp4

Audio message

use LINE\LINEBot\HTTPClient\CurlHTTPClient;
use LINE\LINEBot;
use LINE\LINEBot\MessageBuilder\AudioMessageBuilder;

public function reply(Request $request)
{
    $httpClient = new CurlHTTPClient(env('LINE_BOT_CHANNEL_ACCESS_TOKEN'));
    $bot = new LINEBot($httpClient, ['channelSecret' => env('LINE_BOT_CHANNEL_SECRET')]);
    $replyToken = $request['events'][0]['replyToken'];
    $audio = new AudioMessageBuilder(
        'https://example.com/original.m4a',
        '75000'
    );
    $bot->replyMessage($replyToken, $audio);
}

  • Original Content
    • Max file size: 200 MB
    • 格式仅接受 m4a
  • Duration
    • Audio file 的时间长度
    • 单位为毫秒

Location message

use LINE\LINEBot\HTTPClient\CurlHTTPClient;
use LINE\LINEBot;
use LINE\LINEBot\MessageBuilder\LocationMessageBuilder;

public function reply(Request $request)
{
    $httpClient = new CurlHTTPClient(env('LINE_BOT_CHANNEL_ACCESS_TOKEN'));
    $bot = new LINEBot($httpClient, ['channelSecret' => env('LINE_BOT_CHANNEL_SECRET')]);
    $replyToken = $request['events'][0]['replyToken'];
    $location = new LocationMessageBuilder(
        '好想工作室',
        '台南市东区北门路二段16号 L2A',
        '22.999739302983308',
        '120.21290532894172'
    );
    $bot->replyMessage($replyToken, $location);
}
电脑版画面:

手机版画面:

  • Title
    • 自定义的标题
    • Max character limit: 100
  • Address
    • 自定义的地址说明
    • Max character limit: 100
  • Latitude
    • 纬度
    • Decimal
  • Longitude
    • 经度
    • Decimal

Title 与 Address 输入的值不会影响地图图钉的位置,
地图图钉的位置是以经纬度为主。
另外 Location message 在电脑与手机上呈现的结果会不一样喔~

MultiMessageBuilder

use LINE\LINEBot\HTTPClient\CurlHTTPClient;
use LINE\LINEBot;
use LINE\LINEBot\MessageBuilder\MultiMessageBuilder;
use LINE\LINEBot\MessageBuilder\VideoMessageBuilder;
use LINE\LINEBot\MessageBuilder\LocationMessageBuilder;

public function reply(Request $request)
{
    $httpClient = new CurlHTTPClient(env('LINE_BOT_CHANNEL_ACCESS_TOKEN'));
    $bot = new LINEBot($httpClient, ['channelSecret' => env('LINE_BOT_CHANNEL_SECRET')]);
    $replyToken = $request['events'][0]['replyToken'];

    $multiMessageBuilder = new MultiMessageBuilder();

    $video = new VideoMessageBuilder(
        'https://img-9gag-fun.9cache.com/photo/aEpr2ON_460svvp9.mp4',
        'https://img-9gag-fun.9cache.com/photo/abVPMOL_460swp.png'
    );
    $multiMessageBuilder->add($video);

    $location = new LocationMessageBuilder(
        '好想工作室',
        '台南市东区北门路二段16号 L2A',
        '22.999739302983308',
        '120.21290532894172'
    );
    $multiMessageBuilder->add($location);

    $response = $bot->replyMessage($replyToken, $multiMessageBuilder);
}

使用 MultiMessageBuilder 就可以不只回传一笔讯息喔(最多五笔)。

今天就先这样啦~
Imagemap message、Template message、Flex Message 就明天再来认识吧!
大家明天见!
若文章有任何问题,
还请大家不吝赐教!


<<:  26. Redux 的用途 & 入门实作 (下)

>>:  Day-15 : image_tag 咩啊抓用置入图片?

Day12.进入 ARM 世界: ARM Cortex-M Exception Behavior

Nested Interrupts Cortex-M3 和 NVIC 在硬体架构上支援(Nested...

DAY6-我的SQL

前言: 上一篇文章中,我们最後完成了一个简单的网页留言版,主要是使用php的GET方法来进行资料的...

Day15:关於 WebRTC

WebRTC 是什麽? WebRTC(Web Real-Time Communication),即指...

Day 27 [Python ML、资料清理] 处理资料中的时间

设定环境 首先我们需要读取libraries跟dataset,我们将会使用一个dataset是包含在...

[Day14]What is Hash? part.2

今天是第二天介绍hash! 总结一下hash,其实有两个很重要的重点: 不能让任何人从hash导出...