.NET6 C#, LineBot, Line Messaging API, C#, dotnet coreHello 各位好,接下來要介紹的是 Template Message,Template 共有 4 種類型,分別為 Buttons、Confirm、Carousel、Image Carousel,我預計會將這些內容拆成兩篇來寫,所以呢,今天就先介紹 Buttons & Confirm Template 吧。
** Template Message 都無法在電腦版上顯示,只會顯示 AltText 屬性的內容 **
Buttons Template 顧名思義就是提供按鈕的模板訊。
按鈕模板的組成由上到下分為 4 個部分,分別是 縮圖、標題、內文、按鈕,其中只有 內文與按鈕是必填項,縮圖與標題可有可無。

這張圖展示了不同設定時縮圖的樣子,當然如果圖片長寬比與 Line 文件說明的相同就會剛好地放進縮圖區中 (訊息截圖比例沒有調整過)
首先在 MessageEnum.cs 中宣告新的 Enum
public static class TemplateTypeEnum
{
    public const string Buttons = "buttons";
    public const string Confirm = "confirm";
    public const string Carousel = "carousel";
    public const string ImageCarousel = "image_carousel";
}
public static class TemplateImageAspectRatioEnum
{
    public const string Rectangle = "rectangle";
    public const string Square = "square";
}
public static class TemplateImageSizeEnum
{
    public const string Cover = "cover";
    public const string Contain = "contain";
}
在 Dtos/Messages 資料夾中新增 TemplateMessageDto.cs
using LineBotMessage.Enum;
namespace LineBotMessage.Dtos
{
    // 使用泛型,方便使用不同的 Template
    public class TemplateMessageDto<T> : BaseMessageDto
    {
        public TemplateMessageDto()
        {
            Type = MessageTypeEnum.Template;
        }
        public string AltText { get; set; }
        public T Template { get; set; }
    }
    public class ButtonsTemplateDto
    {
        public string Type { get; set; } = TemplateTypeEnum.Buttons;
        public string Text { get; set; }
        public List<ActionDto>? Actions { get; set; }
        public string? ThumbnailImageUrl { get; set; }
        public string? ImageAspectRatio { get; set; }
        public string? ImageBackgroundColor  { get; set; }
        public string? Title { get; set; }
        public string? DefaultAction { get; set; }
    }
}
在 LineBotService -> ReceiveMessageWebhookEvent function 添加新的關鍵字回覆內容
// 關鍵字 : "Buttons"
if (eventDto.Message.Text == "Buttons")
{
    replyMessage = new ReplyMessageRequestDto<TemplateMessageDto<ButtonsTemplateDto>>
    {
        ReplyToken = eventDto.ReplyToken,
        Messages = new List<TemplateMessageDto<ButtonsTemplateDto>>
        {
            new TemplateMessageDto<ButtonsTemplateDto>
            {
                AltText = "這是按鈕模板訊息",
                Template = new ButtonsTemplateDto
                {
                    // 此處使用的是 Imgur 上圖片的絕對路徑
                    ThumbnailImageUrl = "https://i.imgur.com/CP6ywwc.jpg",
                    ImageAspectRatio = TemplateImageAspectRatioEnum.Rectangle,
                    ImageSize = TemplateImageSizeEnum.Cover,
                    Title = "親愛的用戶您好,歡迎您使用本美食推薦系統",
                    Text = "請選擇今天想吃的主食,系統會推薦附近的餐廳給您。",
                    Actions = new List<ActionDto>
                    {
                        new ActionDto
                        {
                            Type = ActionTypeEnum.Postback,
                            Data = "foodType=sushi",
                            Label = "壽司",
                            DisplayText = "壽司"
                        },
                        new ActionDto
                        {
                            Type = ActionTypeEnum.Postback,
                            Data = "foodType=hot-pot",
                            Label = "火鍋",
                            DisplayText = "火鍋"
                        },
                        new ActionDto
                        {
                            Type = ActionTypeEnum.Postback,
                            Data = "foodType=steak",
                            Label = "牛排",
                            DisplayText = "牛排"
                        },
                        new ActionDto
                        {
                            Type = ActionTypeEnum.Postback,
                            Data = "foodType=next",
                            Label = "下一個",
                            DisplayText = "下一個"
                        }
                    }
                }
            }
        }
    };
}
傳送關鍵字 "Buttons" 後收到回覆訊息。
Confirm Template 非常單純,組成只有一個 text 內文與兩顆按扭,用途大多是給使用者回答 Yes or No 或是二選一的問題。


由一個 Text 和 2 個 action 組成,action array 中第一個 action 會是左邊的按鈕,第二個 action 會是右邊的按鈕
在 TemplateMessageDto.cs 中新增 class
public class ConfirmTemplateDto
{
    public string Type { get; set; } = TemplateTypeEnum.Confirm;
    public string Text { get; set; }
    public List<ActionDto>? Actions { get; set; }
}
在 LineBotService -> ReceiveMessageWebhookEvent function 添加新的關鍵字回覆內容
if (eventDto.Message.Text == "Confirm")
{
    replyMessage = new ReplyMessageRequestDto<TemplateMessageDto<ConfirmTemplateDto>>
    {
        ReplyToken = eventDto.ReplyToken,
        Messages = new List<TemplateMessageDto<ConfirmTemplateDto>>
        {
            new TemplateMessageDto<ConfirmTemplateDto>
            {
                AltText = "這是確認模組訊息",
                Template = new ConfirmTemplateDto
                {
                    Text = "請問您是否喜歡本產品?\n(產品編號123)",
                    Actions = new List<ActionDto>
                    {
                        new ActionDto
                        {
                            Type = ActionTypeEnum.Postback,
                            Data = "id=123&like=yes",
                            Label = "喜歡",
                            DisplayText = "喜歡",
                        },
                        new ActionDto
                        {
                            Type = ActionTypeEnum.Postback,
                            Data = "id=123&like=no",
                            Label = "不喜歡",
                            DisplayText = "不喜歡",
                        }
                    }
                }
            }
        }
    };
}
傳送關鍵字 "Confirm" 後收到的回覆訊息。
雖然當初就是覺得會有點多才把 template 的部分切成兩篇來介紹,但怎麼覺得切開來之後的篇幅跟前幾篇也沒差多少啊哈哈,又寫完一篇了還是得撒花慶祝一下,不知道各位有沒有什麼問題都歡迎留言~
下一篇要介紹的就是剩下的兩個 Carousel 和 Image Carousle,是 4 種 template 中比較重要也比較實用的存在,敬請期待!
如果想要參考今天範例程式碼的部份,下面是 Git Repo 連結,方便大家參考。
Day13_Buttons&Confirm Template Message