public async Task <HttpResponseMessage> Post() { var content = await Request.Content.ReadAsStringAsync(); var signature = Request.Headers.GetValues("X-Line-Signature").FirstOrDefault(); if (signature == null || !Client.ValidateSignature(content, signature)) { return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "not found")); } var events = Client.ParseEvent(content); foreach (var ev in events) { switch (ev) { case MessageEvent mev: switch (mev.Message.Type) { case MessageType.Text: { var message = (TextEventMessage)mev.Message; if (Regex.IsMatch(message.Text, "buttons", RegexOptions.IgnoreCase)) { await SendButtonsAsync(mev.ReplyToken); } if (Regex.IsMatch(message.Text, "confirm", RegexOptions.IgnoreCase)) { await SendConfirmAsync(mev.ReplyToken); } if (Regex.IsMatch(message.Text, "carousel", RegexOptions.IgnoreCase)) { await SendCarouselAsync(mev.ReplyToken); } if (Regex.IsMatch(message.Text, "datetime", RegexOptions.IgnoreCase)) { await SendDateTimePickerAsync(mev.ReplyToken); } break; } } break; case PostbackEvent pev: var text = $"Received a PostbackEvent\nData: {pev.Postback.Data}\nParams.Date: {pev.Postback.Params?.Date}\nParams.Time: {pev.Postback.Params?.Time}\nParams.DateTime: {pev.Postback.Params?.DateTime}"; await Client.ReplyTextAsync(pev.ReplyToken, text); break; } } return(Request.CreateResponse(HttpStatusCode.OK, "OK")); }
public async Task <HttpResponseMessage> Post() { var content = await Request.Content.ReadAsStringAsync(); var signature = Request.Headers.GetValues("X-Line-Signature").FirstOrDefault(); if (signature == null || !Client.ValidateSignature(content, signature)) { return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "not found")); } var events = Client.ParseEvent(content); foreach (var ev in events) { switch (ev) { case MessageEvent mev: switch (mev.Message) { case TextEventMessage message when Regex.IsMatch(message.Text, "start", RegexOptions.IgnoreCase): await SetupRichMenuAsync(mev.ReplyToken, mev.Source.Id); break; case TextEventMessage message when Regex.IsMatch(message.Text, "finish", RegexOptions.IgnoreCase): await ResetRichMenuAsync(mev.ReplyToken, mev.Source.Id); break; case TextEventMessage message when Regex.IsMatch(message.Text, "list", RegexOptions.IgnoreCase): await ListRichMenus(mev.ReplyToken); break; } break; } } return(Request.CreateResponse(HttpStatusCode.OK, "OK")); }
public async Task <HttpResponseMessage> Post() { var content = await Request.Content.ReadAsStringAsync(); var signature = Request.Headers.GetValues("X-Line-Signature").FirstOrDefault(); if (signature == null || !Client.ValidateSignature(content, signature)) { return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "not found")); } var events = Client.ParseEvent(content); foreach (var ev in events) { switch (ev.Type) { case EventType.Message: var mev = (MessageEvent)ev; switch (mev.Message.Type) { case MessageType.Text: { var message = (TextEventMessage)mev.Message; if (Regex.IsMatch(message.Text, "imagemap")) { await SendImageMapAsync(mev.ReplyToken); } break; } } break; } } return(Request.CreateResponse(HttpStatusCode.OK, "OK")); }
public async Task <HttpResponseMessage> Post() { var content = await Request.Content.ReadAsStringAsync(); var signature = Request.Headers.GetValues("X-Line-Signature").FirstOrDefault(); if (signature == null || !Client.ValidateSignature(content, signature)) { return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "not found")); } var events = Client.ParseEvent(content); foreach (var ev in events) { switch (ev.Type) { case EventType.Message: var mev = (MessageEvent)ev; switch (mev.Message.Type) { case MessageType.Text: { var message = (TextEventMessage)mev.Message; await Client.ReplyTextAsync(mev.ReplyToken, message.Text); break; } case MessageType.Image: { var message = (ImageEventMessage)mev.Message; var image = await Client.GetContentAsync(message.Id); var key = AddToCache(image); await Client.ReplyMessageAsync(mev.ReplyToken, new ImageMessage { OriginalContentUrl = GetContentUrl(key), PreviewImageUrl = GetContentUrl(key), }); break; } case MessageType.Video: { var message = (VideoEventMessage)mev.Message; var video = await Client.GetContentAsync(message.Id); var key = AddToCache(video); var thumb = MakeThumbnail(video); var thumbkey = AddToCache(thumb); await Client.ReplyMessageAsync(mev.ReplyToken, new VideoMessage { OriginalContentUrl = GetContentUrl(key), PreviewImageUrl = GetContentUrl(thumbkey), }); break; } case MessageType.Audio: { var message = (AudioEventMessage)mev.Message; var audio = await Client.GetContentAsync(message.Id); var key = AddToCache(audio); await Client.ReplyMessageAsync(mev.ReplyToken, new AudioMessage { OriginalContentUrl = GetContentUrl(key), Duration = 0.5, }); break; } case MessageType.Location: { var message = (LocationEventMessage)mev.Message; await Client.ReplyMessageAsync(mev.ReplyToken, new LocationMessage { Address = message.Address, Title = message.Title, Latitude = message.Latitude, Longitude = message.Longitude, }); break; } case MessageType.Sticker: { var message = (StickerEventMessage)mev.Message; await Client.ReplyMessageAsync(mev.ReplyToken, new StickerMessage { PackageId = message.PackageId, StickerId = message.StickerId, }); break; } } break; } } return(Request.CreateResponse(HttpStatusCode.OK, "OK")); }
public void ParseTest() { var eventStr = ReadResource("events.json"); var client = new LineClient("xx", "xx", "xx"); var events = client.ParseEvent(eventStr).ToArray(); Assert.IsInstanceOf <MessageEvent>(events[0]); var event0 = (MessageEvent)events[0]; Assert.IsInstanceOf <UserSoruce>(event0.Source); Assert.IsInstanceOf <TextEventMessage>(event0.Message); Assert.IsInstanceOf <MessageEvent>(events[1]); var event1 = (MessageEvent)events[1]; Assert.IsInstanceOf <UserSoruce>(event1.Source); Assert.IsInstanceOf <ImageEventMessage>(event1.Message); Assert.IsInstanceOf <MessageEvent>(events[2]); var event2 = (MessageEvent)events[2]; Assert.IsInstanceOf <UserSoruce>(event2.Source); Assert.IsInstanceOf <VideoEventMessage>(event2.Message); Assert.IsInstanceOf <MessageEvent>(events[3]); var event3 = (MessageEvent)events[3]; Assert.IsInstanceOf <UserSoruce>(event3.Source); Assert.IsInstanceOf <AudioEventMessage>(event3.Message); Assert.IsInstanceOf <MessageEvent>(events[4]); var event4 = (MessageEvent)events[4]; Assert.IsInstanceOf <UserSoruce>(event4.Source); Assert.IsInstanceOf <LocationEventMessage>(event4.Message); Assert.IsInstanceOf <MessageEvent>(events[5]); var event5 = (MessageEvent)events[5]; Assert.IsInstanceOf <UserSoruce>(event5.Source); Assert.IsInstanceOf <StickerEventMessage>(event5.Message); Assert.IsInstanceOf <FollowEvent>(events[6]); var event6 = (FollowEvent)events[6]; Assert.IsInstanceOf <UserSoruce>(event6.Source); Assert.IsInstanceOf <UnfollowEvent>(events[7]); var event7 = (UnfollowEvent)events[7]; Assert.IsInstanceOf <UserSoruce>(event7.Source); Assert.IsInstanceOf <JoinEvent>(events[8]); var event8 = (JoinEvent)events[8]; Assert.IsInstanceOf <GroupSoruce>(event8.Source); Assert.IsInstanceOf <LeaveEvent>(events[9]); var event9 = (LeaveEvent)events[9]; Assert.IsInstanceOf <GroupSoruce>(event9.Source); Assert.IsInstanceOf <PostbackEvent>(events[10]); var event10 = (PostbackEvent)events[10]; Assert.IsInstanceOf <UserSoruce>(event10.Source); Assert.AreEqual("action=buyItem&itemId=123123&color=red", event10.Postback.Data); Assert.IsInstanceOf <BeaconEvent>(events[11]); var event11 = (BeaconEvent)events[11]; Assert.IsInstanceOf <UserSoruce>(event11.Source); Assert.AreEqual("d41d8cd98f", event11.Beacon.Hwid); }