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 }); }
private async Task UploadVideoAsync(string replyToken, string messageId, string blobDirectoryName) { var videoStream = await MessagingClient.GetContentStreamAsync(messageId); var url = await BlobStorage.UploadFromStreamAsync(videoStream, blobDirectoryName, "video.mp4"); await MessagingClient.ReplyMessageAsync(replyToken, url.ToString()); }
private async Task UploadMediaContentAsync(string replyToken, string messageId, string blobDirectoryName, string blobName) { var stream = await MessagingClient.GetContentStreamAsync(messageId); var ext = GetFileExtension(stream.ContentHeaders.ContentType.MediaType); var uri = await BlobStorage.UploadFromStreamAsync(stream, blobDirectoryName, blobName + ext); await MessagingClient.ReplyMessageAsync(replyToken, uri.ToString()); }
private async Task SaveLocationAsync(MessageEvent ev, LocationEventMessage locMessage) { await SourceLocation.UpdateAsync( new EventSourceLocation() { SourceType = ev.Source.Type.ToString(), SourceId = ev.Source.Id, Location = $"{locMessage.Latitude},{locMessage.Longitude}" }); await MessagingClient.ReplyMessageAsync(ev.ReplyToken, "Enter a search word for google map search."); }
private async Task ReplyImagemapAsync(string replyToken, string messageId, string blobDirectoryName) { var imageStream = await MessagingClient.GetContentStreamAsync(messageId); var image = System.Drawing.Image.FromStream(imageStream); using (var g = Graphics.FromImage(image)) { g.DrawLine(Pens.Red, image.Width / 2, 0, image.Width / 2, image.Height); g.DrawLine(Pens.Red, 0, image.Height / 2, image.Width, image.Height / 2); } var uri = await UploadImageAsync(1040); await UploadImageAsync(700); await UploadImageAsync(460); await UploadImageAsync(300); await UploadImageAsync(240); var imageSize = new ImagemapSize(1024, (int)(1040 * (double)image.Height / image.Width)); var areaWidth = imageSize.Width / 2; var areaHeight = imageSize.Height / 2; Video video = null; var videoUrl = BlobStorage.ListBlobUri(blobDirectoryName).FirstOrDefault(x => x.ToString().EndsWith("video.mp4")); if (videoUrl != null) { video = new Video(videoUrl.ToString(), videoUrl.ToString().Replace("video.mp4", "300"), new ImagemapArea(areaWidth / 2, areaHeight / 2, areaWidth, areaHeight), new ExternalLink("https://google.com", "google")); } var imagemapMessage = new ImagemapMessage(uri.ToString().Replace("/1040", ""), "Sample Imagemap", imageSize, new IImagemapAction[] { new MessageImagemapAction(new ImagemapArea(0, 0, areaWidth, areaHeight), "Area Top-Left"), new MessageImagemapAction(new ImagemapArea(areaWidth, 0, areaWidth, areaHeight), "Area Top-Right"), new MessageImagemapAction(new ImagemapArea(0, areaHeight, areaWidth, areaHeight), "Area Bottom-Left"), new MessageImagemapAction(new ImagemapArea(areaWidth, areaHeight, areaWidth, areaHeight), "Area Bottom-Right"), }, video: video); await MessagingClient.ReplyMessageAsync(replyToken, new[] { imagemapMessage }); async Task <Uri> UploadImageAsync(int baseSize) { var img = image.GetThumbnailImage(baseSize, image.Height * baseSize / image.Width, () => false, IntPtr.Zero); return(await BlobStorage.UploadImageAsync(img, blobDirectoryName, baseSize.ToString())); } }
protected override async Task OnPostbackAsync(PostbackEvent ev) { var menuList = await MessagingClient.GetRichMenuListAsync(); var nextMenu = menuList.FirstOrDefault(menu => menu.Name == ev.Postback.Data); if (nextMenu == null) { await MessagingClient.ReplyMessageAsync(ev.ReplyToken, $"Error!! {ev.Postback.Data} not found."); } await MessagingClient.LinkRichMenuToUserAsync(ev.Source.UserId, nextMenu.RichMenuId); await MessagingClient.ReplyMessageAsync(ev.ReplyToken, $"I changed a rich menu to {nextMenu.ChatBarText}"); }
private async Task ReplyRandomStickerAsync(string replyToken) { //Sticker ID of bssic stickers (packge ID =1) //see https://devdocs.line.me/files/sticker_list.pdf var stickerids = Enumerable.Range(1, 17) .Concat(Enumerable.Range(21, 1)) .Concat(Enumerable.Range(100, 139 - 100 + 1)) .Concat(Enumerable.Range(401, 430 - 400 + 1)).ToArray(); var rand = new Random(Guid.NewGuid().GetHashCode()); var stickerId = stickerids[rand.Next(stickerids.Length - 1)].ToString(); await MessagingClient.ReplyMessageAsync(replyToken, new[] { new StickerMessage("1", stickerId) }); }
private async Task EchoImageAsync(string replyToken, string messageId, string blobDirectoryName) { var imageName = messageId + ".jpeg"; var previewImageName = messageId + "_preview.jpeg"; var imageStream = await MessagingClient.GetContentStreamAsync(messageId); var image = Image.FromStream(imageStream); var previewImage = image.GetThumbnailImage((int)(image.Width * 0.25), (int)(image.Height * 0.25), () => false, IntPtr.Zero); var blobImagePath = await BlobStorage.UploadImageAsync(image, blobDirectoryName, imageName); var blobPreviewPath = await BlobStorage.UploadImageAsync(previewImage, blobDirectoryName, previewImageName); await MessagingClient.ReplyMessageAsync(replyToken, new[] { new ImageMessage(blobImagePath.ToString(), blobPreviewPath.ToString()) }); }
protected override async Task OnMessageAsync(MessageEvent ev) { Log.WriteInfo($"SourceType:{ev.Source.Type}, Id:{ev.Source.Id}, MessageType:{ev.Message.Type}"); var template = new TemplateMessage("DataTimePickerTest", new ButtonsTemplate( text: "DateTimePicker TEST", thumbnailImageUrl: null, title: "Select a date or time.", actions: new[] { new DateTimePickerTemplateAction("Date", "Date", DateTimePickerMode.Date, DateTime.Today, new DateTime(2000, 1, 1), new DateTime(2020, 12, 31)), new DateTimePickerTemplateAction("Time", "Time", DateTimePickerMode.Time, DateTime.Now.ToString("HH:mm"), "00:00", "23:59"), new DateTimePickerTemplateAction("DatetTime", "DateTime", DateTimePickerMode.Datetime, DateTime.Now, new DateTime(2000, 1, 1, 0, 0, 0), new DateTime(2020, 12, 31, 23, 59, 59)) })); await MessagingClient.ReplyMessageAsync(ev.ReplyToken, new[] { template }); }
protected override async Task OnFollowAsync(FollowEvent ev) { Log.WriteInfo($"SourceType:{ev.Source.Type}, SourceId:{ev.Source.Id}"); await SourceState.AddAsync(ev.Source.Type.ToString(), ev.Source.Id); var userName = ""; if (!string.IsNullOrEmpty(ev.Source.Id)) { var userProfile = await MessagingClient.GetUserProfileAsync(ev.Source.Id); userName = userProfile?.DisplayName ?? ""; } await MessagingClient.ReplyMessageAsync(ev.ReplyToken, $"Hello {userName}! Thank you for following !"); }
private async Task ReplyImageCarouselAsync(string replyToken, string blobDirectoryName) { var columns = BlobStorage.ListBlobUri(blobDirectoryName) .Select(uri => new ImageCarouselColumn(uri.ToString(), new MessageTemplateAction(uri.Segments.Last(), $"I selected image {uri.Segments.Last()}!"))).ToList(); if (columns.Count == 0) { await MessagingClient.ReplyMessageAsync(replyToken, "Upload image for \"Carousel Message\"."); return; } var template = new ImageCarouselTemplate(columns); await MessagingClient.ReplyMessageAsync(replyToken, new[] { new TemplateMessage("imageCarousel", template) }); }
protected override async Task OnMessageAsync(MessageEvent ev) { Log.WriteInfo($"SourceType:{ev.Source.Type}, SourceId:{ev.Source.Id}, MessageType:{ev.Message.Type}"); switch (ev.Message.Type) { case EventMessageType.Image: await ReplyImagemapAsync(ev.ReplyToken, ev.Message.Id, ev.Source.Type + "_" + ev.Source.Id); break; case EventMessageType.Text: await MessagingClient.ReplyMessageAsync(ev.ReplyToken, ((TextEventMessage)ev.Message).Text); break; } }
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 UploadImageAsync(string replyToken, string messageId, string blobDirectoryName) { var imageStream = await MessagingClient.GetContentStreamAsync(messageId); var image = System.Drawing.Image.FromStream(imageStream); var imageCount = BlobStorage.ListBlobUri(blobDirectoryName).Count(); if (imageCount == 5) { await BlobStorage.DeleteDirectoryAsync(blobDirectoryName); imageCount = 0; } await BlobStorage.UploadImageAsync(image, blobDirectoryName, (imageCount + 1) + ".jpeg"); await MessagingClient.ReplyMessageAsync(replyToken, $"Image uploaded ({imageCount + 1})."); }
protected override async Task OnMessageAsync(MessageEvent ev) { Log.WriteInfo($"SourceType:{ev.Source.Type}, SourceId:{ev.Source.Id}, MessageType:{ev.Message.Type}"); var textMessage = ev.Message as TextEventMessage; bool isRefresh = (textMessage?.Text?.Trim()?.ToLower() == "refresh"); var memuList = await CreateRichMenuAsync(isRefresh); var menuA = memuList.FirstOrDefault(m => m.Name == MenuNameA); if (menuA == null) { return; } await MessagingClient.LinkRichMenuToUserAsync(ev.Source.UserId, menuA.RichMenuId); await MessagingClient.ReplyMessageAsync(ev.ReplyToken, "Hello Rich Menu!"); }
private async Task ReplyImagemapAsync(string replyToken, string messageId, string blobDirectoryName) { var imageStream = await MessagingClient.GetContentStreamAsync(messageId); var image = Image.FromStream(imageStream); using (var g = Graphics.FromImage(image)) { g.DrawLine(Pens.Red, image.Width / 2, 0, image.Width / 2, image.Height); g.DrawLine(Pens.Red, 0, image.Height / 2, image.Width, image.Height / 2); } var uri = await UploadImageAsync(1040); await UploadImageAsync(700); await UploadImageAsync(460); await UploadImageAsync(300); await UploadImageAsync(240); var imageSize = new ImagemapSize(1024, (int)(1040 * (double)image.Height / image.Width)); var areaWidth = imageSize.Width / 2; var areaHeight = imageSize.Height / 2; var imagemapMessage = new ImagemapMessage(uri.ToString().Replace("/1040", ""), "Sample Imagemap", imageSize, new IImagemapAction[] { new MessageImagemapAction(new ImagemapArea(0, 0, areaWidth, areaHeight), "Area Top-Left"), new MessageImagemapAction(new ImagemapArea(areaWidth, 0, areaWidth, areaHeight), "Area Top-Right"), new MessageImagemapAction(new ImagemapArea(0, areaHeight, areaWidth, areaHeight), "Area Bottom-Left"), new MessageImagemapAction(new ImagemapArea(areaWidth, areaHeight, areaWidth, areaHeight), "Area Bottom-Right"), }); await MessagingClient.ReplyMessageAsync(replyToken, new[] { imagemapMessage }); async Task <Uri> UploadImageAsync(int baseSize) { var img = image.GetThumbnailImage(baseSize, image.Height * baseSize / image.Width, () => false, IntPtr.Zero); return(await BlobStorage.UploadImageAsync(img, blobDirectoryName + "/" + messageId, baseSize.ToString())); } }
private async Task ConfirmMapSearchAsync(string replyToken, string location, string searchWord) { var templateMessage = new TemplateMessage("Google map search", new ConfirmTemplate($"Select a search type.", new[] { new PostbackTemplateAction("Keyword", JsonConvert.SerializeObject( new { type = "keyword", searchWord, location })), new PostbackTemplateAction("Route", JsonConvert.SerializeObject( new { type = "route", searchWord, location })) })); await MessagingClient.ReplyMessageAsync(replyToken, new[] { templateMessage }); }
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 }); }
protected override async Task OnBeaconAsync(BeaconEvent ev) { Log.WriteInfo($"SourceType:{ev.Source.Type}, SourceId:{ev.Source.Id}"); var message = ""; switch (ev.Beacon.Type) { case BeaconType.Enter: message = "You entered the beacon area!"; break; case BeaconType.Leave: message = "You leaved the beacon area!"; break; case BeaconType.Banner: message = "You tapped the beacon banner!"; break; } await MessagingClient.ReplyMessageAsync(ev.ReplyToken, $"{message}(Dm:{ev.Beacon.Dm}, Hwid:{ev.Beacon.Hwid})"); }
protected override async Task OnPostbackAsync(PostbackEvent ev) { Log.WriteInfo($"SourceType:{ev.Source.Type}, EntryId:{ev.Source.Id}"); switch (ev.Postback.Data) { case "Date": await MessagingClient.ReplyMessageAsync(ev.ReplyToken, "You chose the date: " + ev.Postback.Params.Date); break; case "Time": await MessagingClient.ReplyMessageAsync(ev.ReplyToken, "You chose the time: " + ev.Postback.Params.Time); break; case "DateTime": await MessagingClient.ReplyMessageAsync(ev.ReplyToken, "You chose the date-time: " + ev.Postback.Params.DateTime); break; } }
protected override async Task OnPostbackAsync(PostbackEvent ev) { Log.WriteInfo($"SourceType:{ev.Source.Type}, SourceId:{ev.Source.Id}"); var data = JsonConvert.DeserializeAnonymousType(ev.Postback.Data, new { type = "", searchWord = "", location = "" }); var searchword = Uri.EscapeUriString(Regex.Replace(data.searchWord, "\\s", "+")); if (data.type == "keyword") { await MessagingClient.ReplyMessageAsync(ev.ReplyToken, $"https://www.google.co.jp/maps/search/?api=1&query={data.searchWord}&query={data.location}"); } else { await MessagingClient.ReplyMessageAsync(ev.ReplyToken, $"https://www.google.co.jp/maps/dir/?api=1&origin={data.location}&destination={searchword}"); } await SourceLocation.UpdateAsync(new EventSourceLocation() { SourceType = ev.Source.Type.ToString(), SourceId = ev.Source.Id, Location = null }); }
protected override async Task OnMessageAsync(MessageEvent ev) { Log.WriteInfo($"SourceType:{ev.Source.Type}, SourceId:{ev.Source.Id}, MessageType:{ev.Message.Type}"); var textMessage = ev.Message as TextEventMessage; if (textMessage?.Text?.StartsWith("Menu") ?? false) { return; } var memuList = await CreateRichMenuAsync(); var menuA = memuList.FirstOrDefault(m => m.Name == MenuNameA); if (menuA == null) { return; } await MessagingClient.LinkRichMenuToUserAsync(ev.Source.UserId, menuA.RichMenuId); await MessagingClient.ReplyMessageAsync(ev.ReplyToken, "Hello Rich Menu!"); }
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 }); }
private Task EchoAsync(string replyToken, string userMessage) { return(MessagingClient.ReplyMessageAsync(replyToken, userMessage)); }
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 }); }
protected override async Task OnJoinAsync(JoinEvent ev) { Log.WriteInfo($"SourceType:{ev.Source.Type}, SourceId:{ev.Source.Id}"); await MessagingClient.ReplyMessageAsync(ev.ReplyToken, $"Thank you for letting me join your {ev.Source.Type.ToString().ToLower()}!"); }
protected override async Task OnMessageAsync(MessageEvent ev) { var msg = ev.Message as TextEventMessage; if (msg == null) { return; } switch (msg.Text) { case "Rectangle-Cover": await ReplyButtonsTemplateMessageAsync(ImageAspectRatioType.Rectangle, ImageSizeType.Cover); break; case "Square-Contain": await ReplyButtonsTemplateMessageAsync(ImageAspectRatioType.Square, ImageSizeType.Contain); break; case "Square-Cover": await ReplyButtonsTemplateMessageAsync(ImageAspectRatioType.Square, ImageSizeType.Cover); break; case "Rectangle-Contein": default: await ReplyButtonsTemplateMessageAsync(ImageAspectRatioType.Rectangle, ImageSizeType.Contain); break; } async Task ReplyButtonsTemplateMessageAsync(ImageAspectRatioType imageAspectRatio, ImageSizeType imageSize) { var imageUri = BlobStorage.ListBlobUri(blobDirectoryName).FirstOrDefault(uri => uri.ToString().EndsWith(imageName)); if (imageUri == null) { imageUri = await BlobStorage.UploadImageAsync(Properties.Resources.sample_image, blobDirectoryName, imageName); } var actions = new[] { new MessageTemplateAction("Rectangle-Contain", "Rectangle-Contain"), new MessageTemplateAction("Rectangle-Cover", "Rectangle-Cover"), new MessageTemplateAction("Square-Contain", "Square-Contain"), new MessageTemplateAction("Square-Cover", "Square-Cover") }; var templateMessage = new TemplateMessage("ButtonsTemplate", new ButtonsTemplate( imageAspectRatio.ToString() + "-" + imageSize.ToString(), imageUri.ToString(), "Test of thumbnail image settings", actions, imageAspectRatio, imageSize, imageBackgroundColor: "#FF0000")); await MessagingClient.ReplyMessageAsync(ev.ReplyToken, new[] { templateMessage }); } }
protected override async Task OnMessageAsync(MessageEvent ev) { if (!(ev.Message is TextEventMessage msg)) { return; } var messages = new List <ISendMessage>(); var date1 = new DateTime(2018, 1, 1); var date2 = DateTime.Today - TimeSpan.FromDays(2); var date3 = DateTime.Today - TimeSpan.FromDays(1); var date4 = DateTime.Today; NumberOfSentMessages count1 = null, count2 = null, count3 = null, count4 = null; bool isDefault = false; switch (msg.Text) { case "Reply": count1 = await MessagingClient.GetNumberOfSentReplyMessagesAsync(date1); count2 = await MessagingClient.GetNumberOfSentReplyMessagesAsync(date2); count3 = await MessagingClient.GetNumberOfSentReplyMessagesAsync(date3); count4 = await MessagingClient.GetNumberOfSentReplyMessagesAsync(date4); break; case "Push": await MessagingClient.PushMessageAsync(ev.Source.Id, "This is pushed message."); count1 = await MessagingClient.GetNumberOfSentPushMessagesAsync(date1); count2 = await MessagingClient.GetNumberOfSentPushMessagesAsync(date2); count3 = await MessagingClient.GetNumberOfSentPushMessagesAsync(date3); count4 = await MessagingClient.GetNumberOfSentPushMessagesAsync(date4); break; case "Multicast": await MessagingClient.MultiCastMessageAsync(new[] { ev.Source.Id }, "This is sent message by multicast API."); count1 = await MessagingClient.GetNumberOfSentMulticastMessagesAsync(date1); count2 = await MessagingClient.GetNumberOfSentMulticastMessagesAsync(date2); count3 = await MessagingClient.GetNumberOfSentMulticastMessagesAsync(date3); count4 = await MessagingClient.GetNumberOfSentMulticastMessagesAsync(date4); break; default: isDefault = true; break; } if (!isDefault) { var message = $@"Number of ""{msg.Text}"" messages. {date1.ToString("yyyy/MM/dd")}: ({count1.Status}){count1.Success} {date2.ToString("yyyy/MM/dd")}: ({count2.Status}){count1.Success} {date3.ToString("yyyy/MM/dd")}: ({count3.Status}){count1.Success} {date4.ToString("yyyy/MM/dd")}: ({count4.Status}){count1.Success}"; messages.Add(new TextMessage(message)); } messages.Add(new TemplateMessage("sampleTemplate", new ButtonsTemplate( text: "Select the type of message.", actions: new[] { new MessageTemplateAction("Num of reply", "Reply"), new MessageTemplateAction("Num of push", "Push"), new MessageTemplateAction("Num of multicast", "Multicast") }))); await MessagingClient.ReplyMessageAsync(ev.ReplyToken, messages); }