Line bot API 中有一种只有 line bot 专属的讯息种类,叫做 Template message,他跟 Flex message 有类似的功能,不过最不一样的地方是,电脑无法看到 Template message,如图一。也因此,大多数人会选择使用 Flex message 而非 Template message。
(图一,从电脑上看 Template message)
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)
(图二)
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,这些区块会呈横向排列,并可以滑动。
(图三)
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 相似,不同的地方是每个区中没有选项,而是显示一张大图。
(图四)
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 的浏览器跳到外部网页