用 Python 畅玩 Line bot - 17:Template message

Line bot API 中有一种只有 line bot 专属的讯息种类,叫做 Template message,他跟 Flex message 有类似的功能,不过最不一样的地方是,电脑无法看到 Template message,如图一。也因此,大多数人会选择使用 Flex message 而非 Template message。

(图一,从电脑上看 Template message)
https://ithelp.ithome.com.tw/upload/images/20211021/201425644DW7qRBeIp.png

Template message 中有四种类型的样式可以选择,分别为 Buttons、Confirm、Carousel、ImageCarouselTemplate。下面程序码为使用 Template message 的范例

line_bot_api.reply_message(event.reply_token, TemplateSendMessage(
    thumbnail_image_url=<image uil>,
    alt_text=<template title>,
    template=<template type>()
))

其他参数可以参照 Messaging API reference

下面来介绍不同种类的 template以及其特色。

template type

1. Buttons template

该 template 能有4个 action

buttons_template_message = TemplateSendMessage(
    alt_text='Buttons template',
    template=ButtonsTemplate(
        title='Menu',
        text='请选择地区',
        actions=[
            MessageTemplateAction(
                label='选项一',
                text='option one',
            ),
            MessageTemplateAction(
                label='option two',
                text='选项二',
            )
        ]
    )
)
line_bot_api.reply_message(event.reply_token, buttons_template_message)

(图二)
https://ithelp.ithome.com.tw/upload/images/20211021/20142564nW59XNrtAQ.png

2. Confirm template

该 template 只能有两个 action,通常用来用在使用者只有两个选择的时候。

confirm_template_message = TemplateSendMessage(
    alt_text='Confirm template',
    template=ConfirmTemplate(
        text='Are you sure?',
        actions=[
            PostbackAction(
                label='postback',
                display_text='postback text',
                data='action=buy&itemid=1'
            ),
            MessageAction(
                label='message',
                text='message text'
            )
        ]
    )
)

line_bot_api.reply_message(event.reply_token, confirm_template_message)

3. Carousel template

该 template 能最多有五个区块,每个区块内最多三个 action,这些区块会呈横向排列,并可以滑动。

(图三)
https://ithelp.ithome.com.tw/upload/images/20211021/20142564MHbuUd9yzN.png

carousel_template_message = TemplateSendMessage(
    alt_text='Carousel template',
    template=CarouselTemplate(
        columns=[
            CarouselColumn(
                thumbnail_image_url='https://example.com/item1.jpg',
                title='this is menu1',
                text='description1',
                actions=[
                    PostbackAction(
                        label='postback1',
                        display_text='postback text1',
                        data='action=buy&itemid=1'
                    ),
                    MessageAction(
                        label='message1',
                        text='message text1'
                    ),
                    URIAction(
                        label='uri1',
                        uri='http://example.com/1'
                    )
                ]
            ),
            CarouselColumn(
                thumbnail_image_url='https://example.com/item2.jpg',
                title='this is menu2',
                text='description2',
                actions=[
                    PostbackAction(
                        label='postback2',
                        display_text='postback text2',
                        data='action=buy&itemid=2'
                    ),
                    MessageAction(
                        label='message2',
                        text='message text2'
                    ),
                    URIAction(
                        label='uri2',
                        uri='http://example.com/2'
                    )
                ]
            )
        ]
    )
)

line_bot_api.reply_message(event.reply_token, carousel_template_message)

4. ImageCarousel Template

该 template 和 Carousel template 相似,不同的地方是每个区中没有选项,而是显示一张大图。
(图四)
https://ithelp.ithome.com.tw/upload/images/20211021/20142564mpjaIZUpRQ.png

image_carousel_template_message = TemplateSendMessage(
    alt_text='ImageCarousel template',
    template=ImageCarouselTemplate(
        columns=[
            ImageCarouselColumn(
                image_url='https://example.com/item1.jpg',
                action=PostbackAction(
                    label='postback1',
                    display_text='postback text1',
                    data='action=buy&itemid=1'
                )
            ),
            ImageCarouselColumn(
                image_url='https://example.com/item2.jpg',
                action=PostbackAction(
                    label='postback2',
                    display_text='postback text2',
                    data='action=buy&itemid=2'
                )
            )
        ]
    )
)

line_bot_api.reply_message(event.reply_token, image_carousel_template_message)

Action

actions 是用来决定下面 button 分别的功能,而每一个 action 有三种功能可以选:postback、message、uri。action 的参数 label 为 button 上所显示的文字。text 为按下按钮後,会让使用者回传的文字。

Postback

当使用者按了这个 button 时,Line Server 会传一个 postback event 给我们,里面包含着 data 参数中设定的字串,可以透过 event.postback.postback.data 取出 data。
Postback 可以不给 text 参数

Message

text 参数在 Message Action 是必须的,也不能给空字串
如果希望这个按键,只有显示但不会由使用者传文字过来,可以给一串空白 (e.g. ' ')

URI

使用者按下这个按键就会用 Line 的浏览器跳到外部网页


<<:  [Day31] Hexo x GitHub Pages 打造个人部落格

>>:  政策(Policies)

Day 25 - 影像、声音与影片的整合与拆解

能够载入与以动作触发声音 能够使用图片结合物件互动 了解如何解构图片为粒子跟像素 了解如何将影片放...

Day 26 Explore monitoring and reporting

Explore Azure service health Provide personalized ...

从零开始的8-bit迷宫探险【Level 26】这游戏没有华佗,不能补血啊!Game Over 场景切换

一直遭到攻击的山姆,生命值也快用尽了。 「快离开我们的地盘!」山姆被 Rain 跟 Storm 团...

D29 - 用 Swift 和公开资讯,打造投资理财的 Apps { 三大法人成交比重实作.4 }

在上一篇,我们完成了 三大法人 vs. 非三大法人占比。 不过,三大法人占比还可以再用细项来分出,把...

Day21:今天来聊一下Azure Sentinel 介绍

传统的安全性资讯与事件管理(SIEM)系统通常需要很长的时间 来安装及设定。这类系统在设计时也不一定...