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 });
        }
示例#2
0
        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());
        }
示例#3
0
        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());
        }
示例#4
0
        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.");
        }
示例#5
0
        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()));
            }
        }
示例#6
0
        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}");
        }
示例#7
0
        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)
            });
        }
示例#8
0
        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()) });
        }
示例#9
0
        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 });
        }
示例#10
0
        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 !");
        }
示例#11
0
        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) });
        }
示例#12
0
        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;
            }
        }
示例#13
0
        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 });
        }
示例#14
0
        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}).");
        }
示例#15
0
        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!");
        }
示例#16
0
        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()));
            }
        }
示例#17
0
 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 });
        }
示例#19
0
        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})");
        }
示例#20
0
        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;
            }
        }
示例#21
0
        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!");
        }
示例#23
0
        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 });
        }
示例#24
0
 private Task EchoAsync(string replyToken, string userMessage)
 {
     return(MessagingClient.ReplyMessageAsync(replyToken, userMessage));
 }
示例#25
0
        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 });
        }
示例#26
0
 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 });
            }
        }
示例#28
0
        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);
        }