linebot.models.FlexSendMessage 模組,採用 from linebot.models import FlexSendMessage 的引入方式使用 FlexSendMessage函數,呈現一樣的結果,有差異的地方說明如下:
from linebot.models import FlexSendMessage 的引入方式會報錯,那是因為截圖的4個橘色函數您尚未完整引入。您程式需要改寫為:
from linebot.models import FlexSendMessage
from linebot.models.flex_message import (
    BubbleContainer, ImageComponent
)
from linebot.models.actions import URIAction
flex_message = FlexSendMessage(
    alt_text='hello',
    contents=FlexSendMessage.BubbleContainer(
        direction='ltr',
        hero=FlexSendMessage.ImageComponent(
            url='https://example.com/cafe.jpg',
            size='full',
            aspect_ratio='20:13',
            aspect_mode='cover',
            action=actions.URIAction(uri='http://example.com', label='label')
        )
    )
)
#reply_message的組裝方式與先前範例相同,要token跟message
line_bot_api.reply_message(event.reply_token, flex_message)
linebot.models.FlexSendMessage 相對單純,搞通了就會選擇此種方案較省心:
from linebot.models import FlexSendMessage
flex_message = FlexSendMessage(
    alt_text='hello',
    contents={ #就把JSON貼過來吧
        'type': 'bubble',
        'direction': 'ltr',
        'hero': {
            'type': 'image',
            'url': 'https://example.com/cafe.jpg',
            'size': 'full',
            'aspectRatio': '20:13',
            'aspectMode': 'cover',
            'action': { 'type': 'uri', 'uri': 'http://example.com', 'label': 'label' }
        }
    }
)
line_bot_api.reply_message(event.reply_token, flex_message)
handle_message() 函數裡,將先前關鍵字為@k <台股代碼>的功能改寫,新增以 #k <台股代碼> 作功能新增測試,而貼入 content 變數的 dict 只改寫了範例的 url 及 alt_text 兩個值,其中 alt_text 是指您預覽時出現的提示字:
from linebot.models import FlexSendMessage
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    if event.message.text[:2].upper() == "#K":
        input_word = event.message.text.replace(" ","") #合併字串取消空白
        stock_name = input_word[2:6] #0050
        start_date = input_word[6:] #2020-01-01
        content = plot_stcok_k_chart(IMGUR_CLIENT_ID,stock_name,start_date)
        flex_message = FlexSendMessage(
            alt_text=stock_name, #alt_text
            contents={
                'type': 'bubble',
                'direction': 'ltr',
                'hero': {
                    'type': 'image',
                    'url': content,
                    'size': 'full',
                    'aspectRatio': '20:13',
                    'aspectMode': 'cover',
                    'action': { 'type': 'uri', 'uri': content, 'label': 'label' }
                }
            }
        )
        line_bot_api.reply_message(event.reply_token, flex_message)    
contents 變數。
flex_message = FlexSendMessage(
            alt_text=stock_name,
            contents={...} #貼進來
        )
        line_bot_api.reply_message(event.reply_token, flex_message)
URL、stock_name、 start_date 等變數應修正至對應至文字、圖片或連結欄位。true / false 要改成大寫開頭 True / False 不然會報錯。
LINE 除了本系列介紹的文字、圖片訊息,在互動介面提到的 Flex Message , 還有 Rich Menu 、 QuickReply 、 LIFE 等豐富介面供使用者與聊天服務互動,不再一一介紹,但相信您在閱讀本系列文時已經有一定思路可以查閱相關資源,這也是自學開發的寶貴歷程,我們下篇見。