/// <summary> /// イメージマップメッセージ追加 /// </summary> /// <param name="baseUrl">画像URL</param> /// <param name="altText">代替テキスト</param> /// <param name="width">画像幅</param> /// <param name="height">画像幅を1040とした時の高さ</param> /// <param name="imageMapActionFfactoryService">画像がタップされた時のアクション</param> /// <returns></returns> public MessageFactoryService AddImageMapMessage( string baseUrl, string altText, ImageMapActionFactoryService imageMapActionFfactoryService, int height, int width = 1040 ) { Trace.TraceInformation("Start"); if (!this.RegulateMessageArray()) { Trace.TraceWarning("Regulate Message Array is False"); Trace.TraceInformation("End"); return(this); } ImageMapMessage imageMapMessage = new ImageMapMessage() { baseUrl = baseUrl, altText = altText, baseSize = new BaseSize() { width = width, height = height }, actions = imageMapActionFfactoryService.Actions }; this.Messages[this.Messages.Length - 1] = imageMapMessage; Trace.TraceInformation("End"); return(this); }
public async Task <IList <IRequestMessage> > GetReplyMessagesAsync() { var actions = new List <IAction>() { new UriAction("https://github.com/kyleap/NetCoreLineBotSDK", "Github") { area = new ActionArea() { x = 0, y = 586, width = 520, height = 454 } }, new MessageAction("Hello") { area = new ActionArea() { x = 520, y = 586, width = 520, height = 454 } } }; var msg = new ImageMapMessage("https://via.placeholder.com/1040x1040/333.png/fff", 1040, 1040, actions); await Task.CompletedTask; return(new List <IRequestMessage> { msg }); }
public async Task HandleTextMessage() { var textMessage = JsonConvert.DeserializeObject <TextMessage>(lineEvent.Message.ToString()); Message replyMessage = null; if (textMessage.Text.ToLower() == "buttons") { List <TemplateAction> actions = new List <TemplateAction>(); actions.Add(new MessageTemplateAction("Message Label", "sample data")); actions.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data")); actions.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu")); ButtonsTemplate buttonsTemplate = new ButtonsTemplate("https://github.com/apple-touch-icon.png", "Sample Title", "Sample Text", actions); replyMessage = new TemplateMessage("Buttons", buttonsTemplate); } else if (textMessage.Text.ToLower() == "confirm") { List <TemplateAction> actions = new List <TemplateAction>(); actions.Add(new MessageTemplateAction("Yes", "yes")); actions.Add(new MessageTemplateAction("No", "no")); ConfirmTemplate confirmTemplate = new ConfirmTemplate("Confirm Test", actions); replyMessage = new TemplateMessage("Confirm", confirmTemplate); } else if (textMessage.Text.ToLower() == "carousel") { List <TemplateColumn> columns = new List <TemplateColumn>(); List <TemplateAction> actions = new List <TemplateAction>(); actions.Add(new MessageTemplateAction("Message Label", "sample data")); actions.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data")); actions.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu")); columns.Add(new TemplateColumn() { Title = "Casousel 1 Title", Text = "Casousel 1 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions }); columns.Add(new TemplateColumn() { Title = "Casousel 2 Title", Text = "Casousel 2 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions }); CarouselTemplate carouselTemplate = new CarouselTemplate(columns); replyMessage = new TemplateMessage("Carousel", carouselTemplate); } else if (textMessage.Text.ToLower() == "imagemap") { var url = HttpContext.Current.Request.Url; var imageUrl = $"{url.Scheme}://{url.Host}:{url.Port}/images/githubicon"; List <ImageMapAction> actions = new List <ImageMapAction>(); actions.Add(new UriImageMapAction("http://github.com", new ImageMapArea(0, 0, 520, 1040))); actions.Add(new MessageImageMapAction("I love LINE!", new ImageMapArea(520, 0, 520, 1040))); replyMessage = new ImageMapMessage(imageUrl, "GitHub", new BaseSize(1040, 1040), actions); } else { replyMessage = new TextMessage(textMessage.Text); } await Reply(replyMessage); }
public async Task <IList <IRequestMessage> > GetReplyMessagesAsync() { var actions = new List <IAction>() { new UriAction("https://github.com/kyleap/NetCoreLineBotSDK", "Github") { area = new ActionArea() { x = 0, y = 586, width = 520, height = 454 } }, new MessageAction("Hello") { area = new ActionArea() { x = 520, y = 586, width = 520, height = 454 } } }; var msg = new ImageMapMessage("https://via.placeholder.com/1040x1040/333.png/fff", 1040, 1040, actions, video: new ImageMapVideo() { originalContentUrl = "https://i.imgur.com/n8QsXTk.mp4", previewImageUrl = "https://i.imgur.com/oLvTjtu.png", area = new ActionArea() { x = 0, y = 0, width = 1040, height = 585 }, externalLink = new Externallink() { linkUri = "https://github.com/kyleap/NetCoreLineBotSDK", label = "See More" } }); await Task.CompletedTask; return(new List <IRequestMessage> { msg }); }
public async Task HandleTextMessage() { var textMessage = JsonConvert.DeserializeObject <TextMessage>(lineEvent.Message.ToString()); Message replyMessage = null; if (textMessage.Text.ToLower() == "buttons") { List <TemplateAction> actions = new List <TemplateAction>(); actions.Add(new MessageTemplateAction("Message Label", "sample data")); actions.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data")); actions.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu")); ButtonsTemplate buttonsTemplate = new ButtonsTemplate("https://github.com/apple-touch-icon.png", "Sample Title", "Sample Text", actions); replyMessage = new TemplateMessage("Buttons", buttonsTemplate); } else if (textMessage.Text.ToLower() == "confirm") { List <TemplateAction> actions = new List <TemplateAction>(); actions.Add(new MessageTemplateAction("Yes", "yes")); actions.Add(new MessageTemplateAction("No", "no")); ConfirmTemplate confirmTemplate = new ConfirmTemplate("Confirm Test", actions); replyMessage = new TemplateMessage("Confirm", confirmTemplate); } else if (textMessage.Text.ToLower() == "carousel") { List <TemplateColumn> columns = new List <TemplateColumn>(); List <TemplateAction> actions1 = new List <TemplateAction>(); List <TemplateAction> actions2 = new List <TemplateAction>(); // Add actions. actions1.Add(new MessageTemplateAction("Message Label", "sample data")); actions1.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data")); actions1.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu")); // Add datetime picker actions actions2.Add(new DatetimePickerTemplateAction("DateTime Picker", "DateTime", DatetimePickerMode.Datetime, "2017-07-21T13:00")); actions2.Add(new DatetimePickerTemplateAction("Date Picker", "Date", DatetimePickerMode.Date, "2017-07-21")); actions2.Add(new DatetimePickerTemplateAction("Time Picker", "Time", DatetimePickerMode.Time, "13:00")); columns.Add(new TemplateColumn() { Title = "Casousel 1 Title", Text = "Casousel 1 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions1 }); columns.Add(new TemplateColumn() { Title = "Casousel 2 Title", Text = "Casousel 2 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions2 }); CarouselTemplate carouselTemplate = new CarouselTemplate(columns); replyMessage = new TemplateMessage("Carousel", carouselTemplate); } else if (textMessage.Text.ToLower() == "imagecarousel") { List <ImageColumn> columns = new List <ImageColumn>(); UriTemplateAction action = new UriTemplateAction("Uri Label", "https://github.com/kenakamu"); columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action)); columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action)); columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action)); columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action)); columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action)); ImageCarouselTemplate carouselTemplate = new ImageCarouselTemplate(columns); replyMessage = new TemplateMessage("Carousel", carouselTemplate); } else if (textMessage.Text.ToLower() == "imagemap") { var url = HttpContext.Current.Request.Url; var imageUrl = $"{url.Scheme}://{url.Host}:{url.Port}/images/githubicon"; List <ImageMapAction> actions = new List <ImageMapAction>(); actions.Add(new UriImageMapAction("http://github.com", new ImageMapArea(0, 0, 520, 1040))); actions.Add(new MessageImageMapAction("I love LINE!", new ImageMapArea(520, 0, 520, 1040))); replyMessage = new ImageMapMessage(imageUrl, "GitHub", new BaseSize(1040, 1040), actions); } else if (textMessage.Text.ToLower() == "addrichmenu") { // Create Rich Menu RichMenu richMenu = new RichMenu() { Size = new RichMenuSize(1686), Selected = false, Name = "nice richmenu", ChatBarText = "touch me", Areas = new List <RichMenuArea>() { new RichMenuArea() { Action = new PostbackTemplateAction("action=buy&itemid=123"), Bounds = new RichMenuBounds(0, 0, 2500, 1686) } } }; var richMenuId = await lineClient.CreateRichMenu(richMenu); var image = new MemoryStream(File.ReadAllBytes(HttpContext.Current.Server.MapPath(@"~\Images\richmenu.PNG"))); // Upload Image await lineClient.UploadRichMenuImage(richMenuId, image); // Link to user await lineClient.LinkRichMenuToUser(lineEvent.Source.UserId, richMenuId); } else if (textMessage.Text.ToLower() == "deleterichmenu") { // Get Rich Menu for the user var richMenuId = await lineClient.GetRichMenuIdForUser(lineEvent.Source.UserId); await lineClient.UnlinkRichMenuToUser(lineEvent.Source.UserId); await lineClient.DeleteRichMenu(richMenuId); } else if (textMessage.Text.ToLower() == "deleteallrichmenu") { // Get Rich Menu for the user var richMenuList = await lineClient.GetRichMenuList(); foreach (var richMenu in richMenuList) { await lineClient.DeleteRichMenu(richMenu["richMenuId"].ToString()); } } else { replyMessage = new TextMessage(textMessage.Text); } await Reply(replyMessage); }
/// <summary> /// Reply image message /// </summary> /// <param name="replyToken"></param> /// <param name="to"></param> /// <param name="imageMapMessages"></param> /// <returns></returns> public async Task <LineClientResult <ResponseItem> > ReplyImageMapMessage(string replyToken, string to, ImageMapMessage imageMapMessages) { var replyMessageRequest = new ReplyMessageRequest() { replyTokens = new List <string>() { replyToken } , messages = new List <Message>() { imageMapMessages } }; return(await messageClient.ReplyMessage(replyMessageRequest)); }
/// <summary> /// Send image map messages /// </summary> /// <param name="to"></param> /// <param name="imageMapMessages"></param> /// <returns></returns> public async Task <LineClientResult <ResponseItem> > PushImageMapMessage(string to, ImageMapMessage imageMapMessages) { var pushMessageRequest = new PushMessageRequest() { to = to, messages = new List <Message>() { imageMapMessages } }; return(await messageClient.PushMessage(pushMessageRequest)); }
public async Task HandleTextMessage() { var textMessage = JsonConvert.DeserializeObject <TextMessage>(lineEvent.Message.ToString()); Message replyMessage = null; if (textMessage.Text.ToLower() == "ボタン") { List <TemplateAction> actions = new List <TemplateAction>(); actions.Add(new MessageTemplateAction("Message Label", "sample data")); actions.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data")); actions.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu")); ButtonsTemplate buttonsTemplate = new ButtonsTemplate("https://github.com/apple-touch-icon.png", "Sample Title", "Sample Text", actions); replyMessage = new TemplateMessage("Buttons", buttonsTemplate); } else if (textMessage.Text.ToLower() == "こんにちは")//confirm { List <TemplateAction> actions = new List <TemplateAction>(); actions.Add(new MessageTemplateAction("はい", "yes")); actions.Add(new MessageTemplateAction("いいえ", "no")); ConfirmTemplate confirmTemplate = new ConfirmTemplate("こんにちは!テニスコートを予約しますか?", actions); replyMessage = new TemplateMessage("Confirm", confirmTemplate); //if (confirmTemplate.ToString() == "yes") //{ // confirmFlg = true; // //replyMessage = new TextMessage("一覧を表示します♪"); //} //else //{ // confirmFlg = false; // //replyMessage = new TextMessage("しねーのかよ(# ゚Д゚)"); //} } else if (textMessage.Text.ToLower() == "テニスコート予約したい" || textMessage.Text.ToLower() == "yes") { //replyMessage = new TextMessage("どこのコートを予約しますか?");//最初にメッセを出したかったが動作しない string aobayamaimg = @"~\Images\aobayama.PNG";//青葉山庭球場の画像パスあああああ string tyoumeigaokaimg = @"~\Images\tyoumeigaoka.PNG"; List <TemplateColumn> columns = new List <TemplateColumn>(); List <TemplateAction> actions1 = new List <TemplateAction>(); List <TemplateAction> actions2 = new List <TemplateAction>(); actions1.Add(new UriTemplateAction("HP", "http://www.spf-sendai.jp/sisetsu/moshikomi.html")); actions1.Add(new UriTemplateAction("場所", "https://www.google.com/maps?ll=38.31376,140.83363&z=12&t=m&hl=ja&gl=US&mapclient=embed&cid=9042741886630709754")); actions1.Add(new UriTemplateAction("予約", "https://www.cm2.epss.jp/sendai/web/view/user/homeIndex.html")); columns.Add(new TemplateColumn() { Title = "長命ヶ丘庭球場", Text = "宮城県仙台市泉区長命ケ丘五丁目14", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions1 }); actions2.Add(new UriTemplateAction("HP", "http://www.spf-sendai.jp/sisetsu/moshikomi.html")); actions2.Add(new UriTemplateAction("場所", "https://www.google.com/maps?ll=38.31376,140.83363&z=12&t=m&hl=ja&gl=US&mapclient=embed&cid=9042741886630709754")); actions2.Add(new UriTemplateAction("予約", "https://www.cm2.epss.jp/sendai/web/view/user/homeIndex.html")); columns.Add(new TemplateColumn() { Title = "青葉山庭球場", Text = "宮城県仙台市青葉区花壇1-1", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions2 }); //// Add actions. //actions1.Add(new MessageTemplateAction("Message Label", "sample data")); //actions1.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data")); //actions1.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu")); //// Add datetime picker actions //actions2.Add(new DatetimePickerTemplateAction("DateTime Picker", "DateTime", DatetimePickerMode.Datetime, "2017-07-21T13:00")); //actions2.Add(new DatetimePickerTemplateAction("Date Picker", "Date", DatetimePickerMode.Date, "2017-07-21")); //actions2.Add(new DatetimePickerTemplateAction("Time Picker", "Time", DatetimePickerMode.Time, "13:00")); //columns.Add(new TemplateColumn() { Title = "Casousel 1 Title", Text = "Casousel 1 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions1 }); //columns.Add(new TemplateColumn() { Title = "Casousel 2 Title", Text = "Casousel 2 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions2 }); CarouselTemplate carouselTemplate = new CarouselTemplate(columns); replyMessage = new TemplateMessage("Carousel", carouselTemplate); } else if (textMessage.Text.ToLower() == "イメージカルーセル")//imagecarousel { List <ImageColumn> columns = new List <ImageColumn>(); UriTemplateAction action = new UriTemplateAction("Uri Label", "https://github.com/kenakamu"); columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action)); columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action)); columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action)); columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action)); columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action)); ImageCarouselTemplate carouselTemplate = new ImageCarouselTemplate(columns); replyMessage = new TemplateMessage("Carousel", carouselTemplate); } else if (textMessage.Text.ToLower() == "イメージマップ")//imagemap { var url = HttpContext.Current.Request.Url; var imageUrl = $"{url.Scheme}://{url.Host}:{url.Port}/images/githubicon"; List <ImageMapAction> actions = new List <ImageMapAction>(); actions.Add(new UriImageMapAction("http://github.com", new ImageMapArea(0, 0, 520, 1040))); actions.Add(new MessageImageMapAction("I love LINE!", new ImageMapArea(520, 0, 520, 1040))); replyMessage = new ImageMapMessage(imageUrl, "GitHub", new BaseSize(1040, 1040), actions); } else if (textMessage.Text.ToLower() == "アッドリッチメニュー")//addrichmenu { // Create Rich Menu RichMenu richMenu = new RichMenu() { Size = new RichMenuSize(1686), Selected = false, Name = "nice richmenu", ChatBarText = "touch me", Areas = new List <RichMenuArea>() { new RichMenuArea() { Action = new PostbackTemplateAction("action=buy&itemid=123"), Bounds = new RichMenuBounds(0, 0, 2500, 1686) } } }; var richMenuId = await lineClient.CreateRichMenu(richMenu); var image = new MemoryStream(File.ReadAllBytes(HttpContext.Current.Server.MapPath(@"~\Images\richmenu.PNG"))); // Upload Image await lineClient.UploadRichMenuImage(richMenuId, image); // Link to user await lineClient.LinkRichMenuToUser(lineEvent.Source.UserId, richMenuId); } else if (textMessage.Text.ToLower() == "デリートリッチメニュー")//deleterichmenu { // Get Rich Menu for the user var richMenuId = await lineClient.GetRichMenuIdForUser(lineEvent.Source.UserId); await lineClient.UnlinkRichMenuToUser(lineEvent.Source.UserId); await lineClient.DeleteRichMenu(richMenuId); } else if (textMessage.Text.ToLower() == "デリートオールリッチメニュー")//deleteallrichmenu { // Get Rich Menu for the user var richMenuList = await lineClient.GetRichMenuList(); foreach (var richMenu in richMenuList) { await lineClient.DeleteRichMenu(richMenu["richMenuId"].ToString()); } } else//どの条件にも合わない物はオウム返し { //replyMessage = new TextMessage(textMessage.Text); } await Reply(replyMessage); }
public async Task HandleTextMessage() { var textMessage = JsonConvert.DeserializeObject <TextMessage>(lineEvent.Message.ToString()); Message replyMessage = null; var message = textMessage.Text.ToLower().Trim(); //if (message == "buttons") //{ // List<TemplateAction> actions = new List<TemplateAction>(); // actions.Add(new MessageTemplateAction("Message Label", "sample data")); // actions.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data")); // actions.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu")); // ButtonsTemplate buttonsTemplate = new ButtonsTemplate("https://github.com/apple-touch-icon.png", "Sample Title", "Sample Text", actions); // replyMessage = new TemplateMessage("Buttons", buttonsTemplate); //} //else if (message == "個人化" || message.Contains("專屬服務") || message.Contains("會員專屬服務,查詢快速又簡單")) { var url = HttpContext.Current.Request.Url; var imageUrl = $"{url.Scheme}://{url.Host}:{url.Port}/LineEvents/GetMapImage"; List <ImageMapAction> actions = new List <ImageMapAction>(); actions.Add(new UriImageMapAction($"{url.Scheme}://{url.Host}:{url.Port}{VirtualPathUtility.ToAbsolute("~/CornerKick/Index")}?X001={CurrentProfile.UserId}", new ImageMapArea(375, 0, 325, 1040))); actions.Add(new UriImageMapAction($"{url.Scheme}://{url.Host}:{url.Port}{VirtualPathUtility.ToAbsolute("~/CornerKick/TodayLesson")}?X001={CurrentProfile.UserId}", new ImageMapArea(0, 0, 375, 590))); actions.Add(new UriImageMapAction($"{url.Scheme}://{url.Host}:{url.Port}{VirtualPathUtility.ToAbsolute("~/CornerKick/Notice")}?X001={CurrentProfile.UserId}", new ImageMapArea(0, 590, 375, 450))); actions.Add(new UriImageMapAction($"{url.Scheme}://{url.Host}:{url.Port}{VirtualPathUtility.ToAbsolute("~/CornerKick/CheckBonusPointByLine")}?X001={CurrentProfile.UserId}", new ImageMapArea(700, 0, 350, 590))); actions.Add(new UriImageMapAction($"{url.Scheme}://{url.Host}:{url.Port}{VirtualPathUtility.ToAbsolute("~/CornerKick/CheckAttendance")}?X001={CurrentProfile.UserId}", new ImageMapArea(700, 590, 350, 450))); //actions.Add(new MessageImageMapAction("I love LINE!", new ImageMapArea(520, 0, 520, 1040))); replyMessage = new ImageMapMessage(imageUrl, "會員專屬服務,查詢快速又簡單", new BaseSize(1040, 1040), actions); } else if (message.Contains("帳號串連即可獲得beyond幣") || message.Contains("帳號串連") || message.Contains("beyond幣") || message.Contains("帳號beyond幣") || message.Contains("帳號活動")) { var url = HttpContext.Current.Request.Url; var imageUrl = $"{url.Scheme}://{url.Host}:{url.Port}/LineEvents/GetBeyondCoinMap"; List <ImageMapAction> actions = new List <ImageMapAction>(); actions.Add(new UriImageMapAction($"{url.Scheme}://{url.Host}:{url.Port}{VirtualPathUtility.ToAbsolute("~/CornerKick/Index")}?X001={CurrentProfile.UserId}", new ImageMapArea(0, 0, 1040, 1040))); replyMessage = new ImageMapMessage(imageUrl, "會員專屬服務,查詢快速又簡單", new BaseSize(1040, 1040), actions); } else if (message == "check" || message == "打卡") { var item = models.GetTable <UserProfileExtension>().Where(u => u.LineID == CurrentProfile.UserId) .Select(u => u.UserProfile).FirstOrDefault(); if (item == null) { List <TemplateAction> actions = new List <TemplateAction>(); ButtonsTemplate buttonsTemplate = new ButtonsTemplate(); buttonsTemplate.Title = "此支裝置尚未設定過專屬服務"; buttonsTemplate.Text = "請點選下方更多資訊/專屬服務/帳號設定才可使用!"; actions.Add(new UriTemplateAction("帳號設定", $"{ Settings.Default.HostDomain }{ VirtualPathUtility.ToAbsolute("~/CornerKick/Register")}?X001={ CurrentProfile.UserId}")); buttonsTemplate.Actions = actions; replyMessage = new TemplateMessage("上課打卡", buttonsTemplate); } else { var checkAttendance = item.CheckLessonAttendanceEvent(models); if (checkAttendance == null) { replyMessage = new TextMessage($"{(item.UserProfileExtension.Gender == "F" ? "親愛的" : "兄弟")}, 目前課程都有確實打卡喔!"); } else { List <TemplateAction> actions = new List <TemplateAction>(); ButtonsTemplate buttonsTemplate = new ButtonsTemplate(); buttonsTemplate.Title = item.UserProfileExtension.Gender == "F" ? "親愛的" : "兄弟"; buttonsTemplate.Text = $"還有{checkAttendance.CheckCount}堂課沒打卡"; actions.Add(new UriTemplateAction("👉立即打卡", $"{Settings.Default.HostDomain}{VirtualPathUtility.ToAbsolute("~/CornerKick/CheckAttendance")}?X001={CurrentProfile.UserId}")); buttonsTemplate.Actions = actions; replyMessage = new TemplateMessage("上課打卡", buttonsTemplate); } } } //else if (textMessage.Text.ToLower() == "confirm") //{ // List<TemplateAction> actions = new List<TemplateAction>(); // actions.Add(new MessageTemplateAction("Yes", "yes")); // actions.Add(new MessageTemplateAction("No", "no")); // ConfirmTemplate confirmTemplate = new ConfirmTemplate("Confirm Test", actions); // replyMessage = new TemplateMessage("Confirm", confirmTemplate); //} //else if (textMessage.Text.ToLower() == "carousel") //{ // List<TemplateColumn> columns = new List<TemplateColumn>(); // List<TemplateAction> actions1 = new List<TemplateAction>(); // List<TemplateAction> actions2 = new List<TemplateAction>(); // // Add actions. // actions1.Add(new MessageTemplateAction("Message Label", "sample data")); // actions1.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data")); // actions1.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu")); // // Add datetime picker actions // actions2.Add(new DatetimePickerTemplateAction("DateTime Picker", "DateTime", DatetimePickerMode.Datetime, "2017-07-21T13:00")); // actions2.Add(new DatetimePickerTemplateAction("Date Picker", "Date", DatetimePickerMode.Date, "2017-07-21")); // actions2.Add(new DatetimePickerTemplateAction("Time Picker", "Time", DatetimePickerMode.Time, "13:00")); // columns.Add(new TemplateColumn() { Title = "Casousel 1 Title", Text = "Casousel 1 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions1 }); // columns.Add(new TemplateColumn() { Title = "Casousel 2 Title", Text = "Casousel 2 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions2 }); // CarouselTemplate carouselTemplate = new CarouselTemplate(columns); // replyMessage = new TemplateMessage("Carousel", carouselTemplate); //} //else if (textMessage.Text.ToLower() == "imagecarousel") //{ // List<ImageColumn> columns = new List<ImageColumn>(); // UriTemplateAction action = new UriTemplateAction("Uri Label", "https://github.com/kenakamu"); // columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action)); // columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action)); // columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action)); // columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action)); // columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action)); // ImageCarouselTemplate carouselTemplate = new ImageCarouselTemplate(columns); // replyMessage = new TemplateMessage("Carousel", carouselTemplate); //} //else if (textMessage.Text.ToLower() == "imagemap") //{ // var url = HttpContext.Current.Request.Url; // var imageUrl = $"{url.Scheme}://{url.Host}:{url.Port}/LineEvents/GetIcon"; // List<ImageMapAction> actions = new List<ImageMapAction>(); // actions.Add(new UriImageMapAction($"{Settings.Default.HostDomain}{VirtualPathUtility.ToAbsolute("~/CornerKick/Index")}?lineID={CurrentProfile.UserId}", new ImageMapArea(0, 0, 520, 1040))); // actions.Add(new MessageImageMapAction("I love LINE!", new ImageMapArea(520, 0, 520, 1040))); // replyMessage = new ImageMapMessage(imageUrl, "GitHub", new BaseSize(1040, 1040), actions); //} //else if (textMessage.Text.ToLower() == "addrichmenu") //{ // // Create Rich Menu // RichMenu richMenu = new RichMenu() // { // Size = new RichMenuSize(1686), // Selected = false, // Name = "nice richmenu", // ChatBarText = "touch me", // Areas = new List<RichMenuArea>() // { // new RichMenuArea() // { // Action = new PostbackTemplateAction("action=buy&itemid=123"), // Bounds = new RichMenuBounds(0, 0, 2500, 1686) // } // } // }; // var richMenuId = await lineClient.CreateRichMenu(richMenu); // var image = new MemoryStream(File.ReadAllBytes(HttpContext.Current.Server.MapPath(@"~\Images\richmenu.PNG"))); // // Upload Image // await lineClient.UploadRichMenuImage(richMenuId, image); // // Link to user // await lineClient.LinkRichMenuToUser(lineEvent.Source.UserId, richMenuId); //} //else if (textMessage.Text.ToLower() == "deleterichmenu") //{ // // Get Rich Menu for the user // var richMenuId = await lineClient.GetRichMenuIdForUser(lineEvent.Source.UserId); // await lineClient.UnlinkRichMenuToUser(lineEvent.Source.UserId); // await lineClient.DeleteRichMenu(richMenuId); //} //else if (textMessage.Text.ToLower() == "deleteallrichmenu") //{ // // Get Rich Menu for the user // var richMenuList = await lineClient.GetRichMenuList(); // foreach (var richMenu in richMenuList) // { // await lineClient.DeleteRichMenu(richMenu["richMenuId"].ToString()); // } //} else if (message == "劉加菲" || message == "garfaild") { //replyMessage = new TextMessage("($_$)"); replyMessage = new StickerMessage("3", "256"); } else if (message == "笨小胖") { replyMessage = new StickerMessage("2", "43"); } else { replyMessage = new TextMessage(__SLOGAN); } if (replyMessage != null) { await Reply(replyMessage); } }
// 事件:文字 public async Task HandleTextMessage() { var textMessage = JsonConvert.DeserializeObject <TextMessage>(lineEvent.Message.ToString()); Message replyMessage = null; List <Models.Message> messages = db.Messages.Where(x => x.KeyWord.Contains(textMessage.Text) && x.Event == 5).ToList(); if (messages != null) { Dictionary <int, int> matchMessages = null; List <int> messageIds = null; List <Models.Message> frequentMessages = null; foreach (var message in messages) { string[] keywords = message.KeyWord.Split(','); int count = 0; foreach (var keyword in keywords) { if (textMessage.Text.Contains(keyword)) { matchMessages.Add(message.MessageId, count++); } } } // 排序 var sortMessages = from objDic in matchMessages orderby objDic.Value descending select objDic; foreach (KeyValuePair <int, int> kvp in sortMessages) { messageIds.Add(kvp.Key); } frequentMessages = db.Messages.Where(x => messageIds.Contains(x.MessageId)).ToList(); // 文字 if (frequentMessages.First().Type == 1) { replyMessage = new TextMessage(frequentMessages.First().Text); } // 貼圖 else if (frequentMessages.First().Type == 2) { // https://devdocs.line.me/files/sticker_list.pdf var stickerMessage = JsonConvert.DeserializeObject <StickerMessage>(lineEvent.Message.ToString()); replyMessage = new StickerMessage(frequentMessages.First().STKId, frequentMessages.First().STKPKGId); } // 圖片 else if (frequentMessages.First().Type == 3) { replyMessage = new ImageMessage(frequentMessages.First().ImageUrl, frequentMessages.First().Url); } // 影片 else if (frequentMessages.First().Type == 4) { replyMessage = new ImageMessage(frequentMessages.First().ImageUrl, frequentMessages.First().Url); } // 聲音 else if (frequentMessages.First().Type == 5) { replyMessage = new ImageMessage(frequentMessages.First().ImageUrl, frequentMessages.First().Url); } // 位置 else if (frequentMessages.First().Type == 6) { replyMessage = new LocationMessage( frequentMessages.First().Title, frequentMessages.First().Address, frequentMessages.First().Latitude, frequentMessages.First().Longitude); } // 圖片地圖 else if (frequentMessages.First().Type == 7) { // 待研究 var url = HttpContext.Current.Request.Url; var imageUrl = $"{url.Scheme}://{url.Host}:{url.Port}/images/githubicon"; List <ImageMapAction> actions = new List <ImageMapAction>(); actions.Add(new UriImageMapAction("http://github.com", new ImageMapArea(0, 0, 520, 1040))); actions.Add(new MessageImageMapAction("I love LINE!", new ImageMapArea(520, 0, 520, 1040))); replyMessage = new ImageMapMessage(imageUrl, "GitHub", new BaseSize(1040, 1040), actions); } // 模板:按鈕 else if (frequentMessages.First().Type == 8) { List <TemplateAction> actions = new List <TemplateAction>(); if (frequentMessages.First().Msg != "" || frequentMessages.First().Msg != null) { actions.Add(new MessageTemplateAction("傳送訊息", frequentMessages.First().Msg)); } if (frequentMessages.First().PostBack != "" || frequentMessages.First().PostBack != null) { actions.Add(new PostbackTemplateAction("執行動作", frequentMessages.First().PostBack)); } if (frequentMessages.First().Url != "" || frequentMessages.First().Url != null) { actions.Add(new UriTemplateAction("查看全部", frequentMessages.First().Url)); } ButtonsTemplate buttonsTemplate = new ButtonsTemplate(frequentMessages.First().ImageUrl, frequentMessages.First().Title, frequentMessages.First().Text, actions); replyMessage = new TemplateMessage("Buttons", buttonsTemplate); } // 模板:確認 else if (frequentMessages.First().Type == 9) { List <TemplateAction> actions = new List <TemplateAction>(); actions.Add(new MessageTemplateAction("是", frequentMessages.First().Yes)); actions.Add(new MessageTemplateAction("否", frequentMessages.First().No)); ConfirmTemplate confirmTemplate = new ConfirmTemplate(frequentMessages.First().Title, actions); replyMessage = new TemplateMessage("Confirm", confirmTemplate); } // 模板:輪播 else if (frequentMessages.First().Type == 10) { List <TemplateColumn> columns = new List <TemplateColumn>(); List <TemplateAction> actions = new List <TemplateAction>(); foreach (var message in frequentMessages.Where(x => x.Type == 10)) { actions = null; if (message.Msg != "" || message.Msg != null) { actions.Add(new MessageTemplateAction("傳送訊息", message.Msg)); } if (message.PostBack != "" || message.PostBack != null) { actions.Add(new PostbackTemplateAction("執行動作", message.PostBack)); } if (message.Url != "" || message.Url != null) { actions.Add(new UriTemplateAction("查看全部", message.Url)); } columns.Add(new TemplateColumn() { Title = message.Title, Text = message.Text, ThumbnailImageUrl = message.ImageUrl, Actions = actions }); } CarouselTemplate carouselTemplate = new CarouselTemplate(columns); replyMessage = new TemplateMessage("Carousel", carouselTemplate); } // 模板:圖片輪播 else if (frequentMessages.First().Type == 11) { List <ImageColumn> columns = new List <ImageColumn>(); foreach (var message in frequentMessages.Where(x => x.Type == 11)) { UriTemplateAction action = new UriTemplateAction("查看全部", message.Url); columns.Add(new ImageColumn(message.ImageUrl, action)); } ImageCarouselTemplate carouselTemplate = new ImageCarouselTemplate(columns); replyMessage = new TemplateMessage("Carousel", carouselTemplate); } // 模板:新增豐富菜單 else if (frequentMessages.First().Type == 12) { // Create Rich Menu RichMenu richMenu = new RichMenu() { Size = new RichMenuSize(1686), Selected = false, Name = frequentMessages.First().Title, ChatBarText = "touch me", Areas = new List <RichMenuArea>() { new RichMenuArea() { Action = new PostbackTemplateAction("action=buy&itemid=123"), Bounds = new RichMenuBounds(0, 0, 2500, 1686) } } }; var richMenuId = await lineClient.CreateRichMenu(richMenu); var image = new MemoryStream(File.ReadAllBytes(HttpContext.Current.Server.MapPath(@"~\Images\richmenu.PNG"))); // Upload Image await lineClient.UploadRichMenuImage(richMenuId, image); // Link to user await lineClient.LinkRichMenuToUser(lineEvent.Source.UserId, richMenuId); } // 模板:刪除豐富菜單 else { var richMenuId = await lineClient.GetRichMenuIdForUser(lineEvent.Source.UserId); await lineClient.UnlinkRichMenuToUser(lineEvent.Source.UserId); await lineClient.DeleteRichMenu(richMenuId); } } else { replyMessage = new TextMessage("不好意思!我不懂您的意思..."); } await Reply(replyMessage); }