public static async Task SendTemplates( [ActivityTrigger] DurableActivityContext context) { var input = context.GetInput <(string, List <string>)>(); // テンプレート作成処理 await lineMessagingClient.ReplyMessageAsync(input.Item1, new List <ISendMessage> { FlexMessage.CreateBubbleMessage("セリフをタップしてね").SetBubbleContainer( new BubbleContainer() .SetHeader(BoxLayout.Horizontal) .AddHeaderContents(new TextComponent { Text = "セリフをタップしてね", Margin = Spacing.Xs, Size = ComponentSize.Sm, Align = Align.Center, Gravity = Gravity.Bottom, Weight = Weight.Bold }) .SetFooter(new BoxComponent(BoxLayout.Vertical) { Spacing = Spacing.Md, Flex = 0, Contents = input.Item2.Select(t => new ButtonComponent { Action = new MessageTemplateAction(t, t) }).ToList <IFlexComponent>() })) }); }
private async Task ReplyFlexWithObjectInitializer(MessageEvent ev) { var restrant = CreateRestrantWithObjectInitializer(); var news = CreateNewsWithExtensions(); var receipt = CreateReceiptWithExtensions(); var bubble = new FlexMessage("Bubble Message") { Contents = restrant }; var carousel = new FlexMessage("Carousel Message") { Contents = new CarouselContainer() { Contents = new BubbleContainer[] { restrant, news, receipt } }, QuickReply = new QuickReply(new[] { new QuickReplyButtonObject(new CameraRollTemplateAction("CameraRoll")), new QuickReplyButtonObject(new CameraTemplateAction("Camera")), new QuickReplyButtonObject(new LocationTemplateAction("Location")) }) }; await MessagingClient.ReplyMessageAsync(ev.ReplyToken, new FlexMessage[] { bubble, carousel }); }
public async Task <IList <IRequestMessage> > GetReplyMessagesAsync() { var json = GetFlexTemplate(); var msg = new FlexMessage(json); await Task.CompletedTask; return(new List <IRequestMessage> { msg }); }
public async Task MulticastItemMessagesAsync(IList <ItemLookUpResult.Item> itemList) { int count = 0; List <ISendMessage> messageList = new List <ISendMessage>(); while (count < itemList.Count) { messageList.Clear(); // 한번에 보낼 수 있는 건 5개. for (int i = 0; i < 5; ++i) { if (count >= itemList.Count) { break; } // 캐러셀 하나에는 10개까지...인데 그럼 한번에 50개 보낼 수 있는건가? string altText = itemList[count].title; if (count < itemList.Count - 1) { altText += " 외"; } CarouselContainerFlexMessage carouselMessage = FlexMessage.CreateCarouselMessage(altText); for (int j = 0; j < 10; ++j) { if (count >= itemList.Count) { break; } BubbleContainer container = itemList[count].ToBubbleContainer(); carouselMessage.AddBubbleContainer(container); count++; } messageList.Add(carouselMessage); } if (messageList.Count > 0) { await MulticastMessagesAsync(messageList); } } }
private async Task ReplyFlexWithMethodChaine(MessageEvent ev) { var restrant = CreateRestrantBubbleContainer(); var news = CreateNewsBubbleContainer(); var receipt = CreateReceiptBubbleContainer(); var flex = FlexMessage.CreateCarouselMessage("Carousel Message") .AddBubbleContainer(restrant) .AddBubbleContainer(news) .AddBubbleContainer(receipt) .SetQuickReply(new QuickReply(new[] { new QuickReplyButtonObject(new CameraTemplateAction("Camera")), new QuickReplyButtonObject(new LocationTemplateAction("Location")) })); await MessagingClient.ReplyMessageAsync(ev.ReplyToken, new[] { flex }); }
private async Task ReplyFlexWithExtensions(MessageEvent ev) { var restrant = CreateRestrantWithObjectInitializer(); var news = CreateNewsWithExtensions(); var receipt = CreateReceiptWithExtensions(); var bubble = FlexMessage.CreateBubbleMessage("Bubble Message") .SetBubbleContainer(restrant); var carousel = FlexMessage.CreateCarouselMessage("Carousel Message") .AddBubbleContainer(restrant) .AddBubbleContainer(news) .AddBubbleContainer(receipt) .SetQuickReply(new QuickReply(new[] { new QuickReplyButtonObject(new CameraTemplateAction("Camera")), new QuickReplyButtonObject(new LocationTemplateAction("Location")) })); await MessagingClient.ReplyMessageAsync(ev.ReplyToken, new FlexMessage[] { bubble, carousel }); }
private FlexMessage GetFlexMessage(List <Feature> rankList, int page, decimal latitude, decimal longitude, DateTime?updateTime) { var flexMessage = new FlexMessage($"口罩數量 {page}") { Contents = new BubbleContainer { Body = new BoxComponent { Layout = BoxLayout.Vertical, Spacing = Spacing.Md, Contents = new List <IFlexComponent> { new TextComponent { Text = $"口罩數量 {page}", Size = ComponentSize.Lg, Weight = Weight.Bold, Color = "#000000" }, new SeparatorComponent() } } } }; var boxs = (flexMessage.Contents as BubbleContainer) .Body.Contents; foreach (var item in rankList) { boxs.Add(new FixFlex.BoxComponent { Layout = BoxLayout.Vertical, Spacing = Spacing.Sm, OffsetStart = "-2px", Contents = new List <IFlexComponent> { new BoxComponent { Layout = BoxLayout.Horizontal, Contents = new List <IFlexComponent> { new FixFlex.BoxComponent { Layout = BoxLayout.Vertical, PaddingStart = "5px", Spacing = Spacing.Xs, Contents = new List <IFlexComponent> { new TextComponent { Text = item.properties.name, Weight = Weight.Bold, Margin = Spacing.Sm, Flex = 0, Wrap = true, MaxLines = 2, Size = ComponentSize.Md, Color = "#000000" }, new TextComponent { Text = $"[電話] {item.properties.phone}", Color = "#928D8B", Size = ComponentSize.Sm, Weight = Weight.Bold }, new TextComponent { Text = $"[口罩] 成人: {item.properties.mask_adult}、兒童: {item.properties.mask_child}", Size = ComponentSize.Sm, Color = "#000000", Weight = Weight.Bold }, new TextComponent { Text = $"[地址] {item.properties.address}", Size = ComponentSize.Sm, Color = "#928D8B", MaxLines = 2, Wrap = true, Weight = Weight.Bold } } }, new FixFlex.BoxComponent { Layout = BoxLayout.Vertical, BackgroundColor = "#905C44", CornerRadius = "3px", Margin = Spacing.Sm, Width = "40px", Height = "35px", Flex = 0, OffsetEnd = "-0px", OffsetTop = "30px", Contents = new List <IFlexComponent> { new FixFlex.TextComponent { Text = "地圖", Flex = 0, Align = Align.Center, Size = ComponentSize.Sm, Color = "#ffffff", OffsetTop = "8px", Weight = Weight.Bold, Action = new UriTemplateAction("action", $"https://www.google.com/maps/search/?api=1&query={item.geometry.coordinates[1]},{item.geometry.coordinates[0]}") } } } } }, new SeparatorComponent() } }); } boxs.Add(new FixFlex.TextComponent { Text = $"更新時間: {updateTime?.ToString("MM/dd HH:mm") ?? ""}", Size = ComponentSize.Sm, Weight = Weight.Bold, Color = "#928D8B", Align = Align.Start, OffsetTop = "5px" }); flexMessage.QuickReply = new QuickReply { Items = new List <QuickReplyButtonObject> { new QuickReplyButtonObject( new LocationTemplateAction("查詢")), new QuickReplyButtonObject( new PostbackTemplateAction("重新整理", $"type=search&page={page}&latitude={latitude}&longitude={longitude}")), new QuickReplyButtonObject( new PostbackTemplateAction("下一頁", $"type=search&page={page+1}&latitude={latitude}&longitude={longitude}")), new QuickReplyButtonObject( new PostbackTemplateAction("口罩地圖", $"type=map&page={page}&latitude={latitude}&longitude={longitude}")) } }; return(flexMessage); }
private async Task ReplyFlexWithObjectInitializer(MessageEvent ev) { var flex = new FlexMessage("Restrant") { Contents = new BubbleContainer() { Hero = new ImageComponent(url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/01_1_cafe.png") { Size = ComponentSize.Full, AspectRatio = AspectRatio._20_13, AspectMode = AspectMode.Cover, Action = new UriTemplateAction(null, "http://linecorp.com/") }, Body = new BoxComponent(layout: BoxLayout.Vertical) { Contents = new IFlexComponent[] { new TextComponent("Broun Cafe") { Weight = Weight.Bold, Size = ComponentSize.Xl }, new BoxComponent(layout: BoxLayout.Baseline) { Margin = Spacing.Md, Contents = new IFlexComponent[] { new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png") { Size = ComponentSize.Sm }, new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png") { Size = ComponentSize.Sm }, new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png") { Size = ComponentSize.Sm }, new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png") { Size = ComponentSize.Sm }, new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gray_star_28.png") { Size = ComponentSize.Sm }, new TextComponent("4.0") { Size = ComponentSize.Sm, Margin = Spacing.Md, Flex = 0, Color = "#999999" } } }, new BoxComponent(BoxLayout.Vertical) { Margin = Spacing.Lg, Spacing = Spacing.Sm, Contents = new IFlexComponent[] { new BoxComponent(BoxLayout.Baseline) { Spacing = Spacing.Sm, Contents = new IFlexComponent[] { new TextComponent("Place") { Size = ComponentSize.Sm, Color = "#aaaaaa", Flex = 1 }, new TextComponent("Miraina Tower, 4-1-6 Shinjuku, Tokyo") { Size = ComponentSize.Sm, Wrap = true, Color = "#666666", Flex = 5 } } } } }, new BoxComponent(BoxLayout.Baseline) { Spacing = Spacing.Sm, Contents = new IFlexComponent[] { new TextComponent("Time") { Size = ComponentSize.Sm, Color = "#aaaaaa", Flex = 1 }, new TextComponent("10:00 - 23:00") { Size = ComponentSize.Sm, Wrap = true, Color = "#666666", Flex = 5 } } } } }, Footer = new BoxComponent(BoxLayout.Vertical) { Spacing = Spacing.Sm, Flex = 0, Contents = new IFlexComponent[] { new ButtonComponent(new UriTemplateAction("Call", "https://linecorp.com")) { Style = ButtonStyle.Link, Height = ButtonHeight.Sm }, new ButtonComponent(new UriTemplateAction("WEBSITE", "https://linecorp.com")) { Style = ButtonStyle.Link, Height = ButtonHeight.Sm }, new SpacerComponent(ComponentSize.Sm) } }, Styles = new BubbleStyles() { Body = new BlockStyle() { BackgroundColor = ColorCode.FromRgb(192, 200, 200), Separator = true, SeparatorColor = ColorCode.DarkViolet }, Footer = new BlockStyle() { BackgroundColor = ColorCode.Ivory } } } }; await MessagingClient.ReplyMessageAsync(ev.ReplyToken, new[] { flex }); }
public void RestrantTest() { FlexMessage flex = FlexMessage.CreateBubbleMessage("Restrant") .SetBubbleContainer(new BubbleContainer() .SetHero(imageUrl: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/01_1_cafe.png", flex: null, margin: null, align: null, gravity: null, size: ComponentSize.Full, aspectRatio: AspectRatio._20_13, aspectMode: AspectMode.Cover) .SetHeroAction(new UriTemplateAction(null, "http://linecorp.com/")) .SetBody(boxLayout: BoxLayout.Vertical, flex: null, spacing: null, margin: null) .AddBodyContents(new TextComponent("Broun Cafe") { Weight = Weight.Bold, Size = ComponentSize.Xl }) .AddBodyContents(new BoxComponent(BoxLayout.Baseline) { Margin = Spacing.Md } .AddContents(new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png") { Size = ComponentSize.Sm }) .AddContents(new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png") { Size = ComponentSize.Sm }) .AddContents(new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png") { Size = ComponentSize.Sm }) .AddContents(new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png") { Size = ComponentSize.Sm }) .AddContents(new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gray_star_28.png") { Size = ComponentSize.Sm }) .AddContents(new TextComponent("4.0") { Size = ComponentSize.Sm, Margin = Spacing.Md, Flex = 0, Color = "#999999" })) .AddBodyContents(new BoxComponent(BoxLayout.Vertical) { Margin = Spacing.Lg, Spacing = Spacing.Sm } .AddContents(new BoxComponent(BoxLayout.Baseline) { Spacing = Spacing.Sm } .AddContents(new TextComponent("Place") { Size = ComponentSize.Sm, Color = "#aaaaaa", Flex = 1 }) .AddContents(new TextComponent("Miraina Tower, 4-1-6 Shinjuku, Tokyo") { Size = ComponentSize.Sm, Wrap = true, Color = "#666666", Flex = 5 })) .AddContents(new BoxComponent(BoxLayout.Baseline) { Spacing = Spacing.Sm } .AddContents(new TextComponent("Time") { Size = ComponentSize.Sm, Color = "#aaaaaa", Flex = 1 }) .AddContents(new TextComponent("10:00 - 23:00") { Size = ComponentSize.Sm, Wrap = true, Color = "#666666", Flex = 5 }))) .SetFooter(new BoxComponent(BoxLayout.Vertical) { Spacing = Spacing.Sm, Flex = 0 } .AddContents(new ButtonComponent(new UriTemplateAction("Call", "https://linecorp.com", new AltUri("https://linecorp.com/en/"))) { Style = ButtonStyle.Link, Height = ButtonHeight.Sm }) .AddContents(new ButtonComponent(new UriTemplateAction("WEBSITE", "https://linecorp.com", new AltUri("https://linecorp.com/en/"))) { Style = ButtonStyle.Link, Height = ButtonHeight.Sm }) .AddContents(new SpacerComponent(ComponentSize.Sm)))); var jsonA = JsonConvert.SerializeObject(flex); Console.WriteLine(jsonA); Console.WriteLine("-----------------------------------------------------"); flex = new FlexMessage("Restrant") { Contents = new BubbleContainer() { Hero = new ImageComponent(url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/01_1_cafe.png") { Size = ComponentSize.Full, AspectRatio = AspectRatio._20_13, AspectMode = AspectMode.Cover, Action = new UriTemplateAction(null, "http://linecorp.com/") }, Body = new BoxComponent(layout: BoxLayout.Vertical) { Contents = new IFlexComponent[] { new TextComponent("Broun Cafe") { Weight = Weight.Bold, Size = ComponentSize.Xl }, new BoxComponent(layout: BoxLayout.Baseline) { Margin = Spacing.Md, Contents = new IFlexComponent[] { new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png") { Size = ComponentSize.Sm }, new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png") { Size = ComponentSize.Sm }, new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png") { Size = ComponentSize.Sm }, new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png") { Size = ComponentSize.Sm }, new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gray_star_28.png") { Size = ComponentSize.Sm }, new TextComponent("4.0") { Size = ComponentSize.Sm, Margin = Spacing.Md, Flex = 0, Color = "#999999" } } }, new BoxComponent(BoxLayout.Vertical) { Margin = Spacing.Lg, Spacing = Spacing.Sm, Contents = new IFlexComponent[] { new BoxComponent(BoxLayout.Baseline) { Spacing = Spacing.Sm, Contents = new IFlexComponent[] { new TextComponent("Place") { Size = ComponentSize.Sm, Color = "#aaaaaa", Flex = 1 }, new TextComponent("Miraina Tower, 4-1-6 Shinjuku, Tokyo") { Size = ComponentSize.Sm, Wrap = true, Color = "#666666", Flex = 5 } } } } }, new BoxComponent(BoxLayout.Baseline) { Spacing = Spacing.Sm, Contents = new IFlexComponent[] { new TextComponent("Time") { Size = ComponentSize.Sm, Color = "#aaaaaa", Flex = 1 }, new TextComponent("10:00 - 23:00") { Size = ComponentSize.Sm, Wrap = true, Color = "#666666", Flex = 5 } } } } }, Footer = new BoxComponent(BoxLayout.Vertical) { Spacing = Spacing.Sm, Flex = 0, Contents = new IFlexComponent[] { new ButtonComponent(new UriTemplateAction("Call", "https://linecorp.com")) { Style = ButtonStyle.Link, Height = ButtonHeight.Sm }, new ButtonComponent(new UriTemplateAction("WEBSITE", "https://linecorp.com")) { Style = ButtonStyle.Link, Height = ButtonHeight.Sm }, new SpacerComponent(ComponentSize.Sm) } } } }; var jsonB = JsonConvert.SerializeObject(flex); Console.WriteLine(jsonB); }
public FlexMessageMain SetupFlexMessage(DataTable dt) { FlexMessageMain main = new FlexMessageMain(); FlexMessage messages = new FlexMessage(); FlexCarousel carousel = new FlexCarousel(); FlexBubble bubble = new FlexBubble(); FlexBubbleHeader header = new FlexBubbleHeader(); FlexBubbleHeaderContent hcontent = new FlexBubbleHeaderContent(); FlexBubbleHero hero = new FlexBubbleHero(); FlexBubbleHeroAction haction = new FlexBubbleHeroAction(); FlexBubbleBody body = new FlexBubbleBody(); FlexBubbleBodyContent bcontent = new FlexBubbleBodyContent(); FlexBubbleFooter footer = new FlexBubbleFooter(); FlexBubbleFooterContent fcontent = new FlexBubbleFooterContent(); FlexBubbleFooterContentAction fcaction = new FlexBubbleFooterContentAction(); messages.type = "flex"; messages.altText = "Check Status Task"; carousel.type = "carousel"; // for loop for script for (int i = 0; i < dt.Rows.Count; i++) { // header = new FlexBubbleHeader(); // hcontent = new FlexBubbleHeaderContent(); hero = new FlexBubbleHero(); haction = new FlexBubbleHeroAction(); body = new FlexBubbleBody(); bubble = new FlexBubble(); bcontent = new FlexBubbleBodyContent(); footer = new FlexBubbleFooter(); fcontent = new FlexBubbleFooterContent(); fcaction = new FlexBubbleFooterContentAction(); bubble.type = "bubble"; //// header // header.type = "box"; // header.layout = "horizontal"; // header.position = "relative"; // hcontent.contents = new List<object>(); // hcontent.type = "text"; // hcontent.text = "25"; // hcontent.weight = "bold"; // hcontent.size = "md"; // hcontent.color = "#000000"; // header.contents.Add(hcontent); // bubble.header = header; //// end header // hero haction.type = "uri"; haction.label = "Action"; haction.uri = "https://liff.line.me/1656450586-DzJv1LGJ/" + dt.Rows[i]["PageState"].ToString();// + dt.Rows[i]["ActionButton"].ToString(); // ** // haction.uri = "https://liff.line.me/1656443050-Qg1Lgz9J/" + dt.Rows[i]["PageState"].ToString();// + dt.Rows[i]["ActionButton"].ToString(); // ** hero.type = "image"; hero.url = "https://www.nextcapital.co.th/uploads/06F1/files/" + dt.Rows[i]["imageName"].ToString(); // ** hero.size = "full"; hero.aspectRatio = "20:13"; hero.aspectMode = "cover"; hero.action = haction; bubble.hero = hero; // end hero // body body.type = "box"; body.layout = "horizontal"; body.spacing = "md"; bcontent.contents = new List <object>(); bcontent.type = "text"; bcontent.text = InformationMessage(dt.Rows[i]["TextStatus"].ToString(), dt.Rows[i]["cRecord"].ToString()); // ** bcontent.weight = "regular"; bcontent.wrap = true; bcontent.style = "normal"; body.contents.Add(bcontent); bubble.body = body; // end body // footer footer.type = "box"; footer.layout = "horizontal"; fcontent.type = "button"; fcaction.type = "uri"; fcaction.label = dt.Rows[i]["footerText"].ToString(); // ** // fcaction.uri = "https://synergy.nextcapital.co.th/webtest/DACApps/" + dt.Rows[i]["ActionButton"].ToString(); // ** fcaction.uri = "https://liff.line.me/1656450586-DzJv1LGJ/" + dt.Rows[i]["PageState"].ToString(); // + dt.Rows[i]["ActionButton"].ToString(); // ** // fcaction.uri = "https://liff.line.me/1656443050-Qg1Lgz9J/" + dt.Rows[i]["PageState"].ToString();// + dt.Rows[i]["ActionButton"].ToString(); // ** fcontent.action = fcaction; footer.contents.Add(fcontent); bubble.footer = footer; // end footer carousel.contents.Add(bubble); } messages.contents = carousel; main.messages.Add(messages); return(main); }
private async Task ReplyFlexWithMethodChane(MessageEvent ev) { FlexMessage flex = FlexMessage.CreateBubbleMessage("Restrant") .SetBubbleContainer(new BubbleContainer() .SetHero(imageUrl: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/01_1_cafe.png", flex: null, margin: null, align: null, gravity: null, size: ComponentSize.Full, aspectRatio: AspectRatio._20_13, aspectMode: AspectMode.Cover) .SetHeroAction(new UriTemplateAction(null, "http://linecorp.com/")) .SetBody(boxLayout: BoxLayout.Vertical, flex: null, spacing: null, margin: null) .AddBodyContents(new TextComponent("Broun Cafe") { Weight = Weight.Bold, Size = ComponentSize.Xl }) .AddBodyContents(new BoxComponent(BoxLayout.Baseline) { Margin = Spacing.Md } .AddContents(new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png") { Size = ComponentSize.Sm }) .AddContents(new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png") { Size = ComponentSize.Sm }) .AddContents(new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png") { Size = ComponentSize.Sm }) .AddContents(new IconComponent("https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gray_star_28.png") { Size = ComponentSize.Sm }) .AddContents(new TextComponent("4.0") { Size = ComponentSize.Sm, Margin = Spacing.Md, Flex = 0, Color = "#999999" })) .AddBodyContents(new BoxComponent(BoxLayout.Vertical) { Margin = Spacing.Lg, Spacing = Spacing.Sm } .AddContents(new BoxComponent(BoxLayout.Baseline) { Spacing = Spacing.Sm } .AddContents(new TextComponent("Place") { Size = ComponentSize.Sm, Color = "#aaaaaa", Flex = 1 }) .AddContents(new TextComponent("Miraina Tower, 4-1-6 Shinjuku, Tokyo") { Size = ComponentSize.Sm, Wrap = true, Color = "#666666", Flex = 5 })) .AddContents(new BoxComponent(BoxLayout.Baseline) { Spacing = Spacing.Sm } .AddContents(new TextComponent("Time") { Size = ComponentSize.Sm, Color = "#aaaaaa", Flex = 1 }) .AddContents(new TextComponent("10:00 - 23:00") { Size = ComponentSize.Sm, Wrap = true, Color = "#666666", Flex = 5 }))) .SetFooter(new BoxComponent(BoxLayout.Vertical) { Spacing = Spacing.Sm, Flex = 0 } .AddContents(new ButtonComponent(new UriTemplateAction("Call", "https://linecorp.com")) { Style = ButtonStyle.Link, Height = ButtonHeight.Sm }) .AddContents(new ButtonComponent(new UriTemplateAction("WEBSITE", "https://linecorp.com")) { Style = ButtonStyle.Link, Height = ButtonHeight.Sm }) .AddContents(new SpacerComponent(ComponentSize.Sm)))); await MessagingClient.ReplyMessageAsync(ev.ReplyToken, new[] { flex }); }