public IHttpActionResult Post() { try { //驗證是否為LINE過來的訊息 if (!LineChannel.VaridateSignature(Request, "輸入你的 Channel Secret")) { return(BadRequest()); } //建立channel物件 LineChannel channel = new LineChannel("輸入你的 Channel Access Token"); //取得LINE POST過來的JSON資料 var rawdata = Request.Content.ReadAsStringAsync().Result; //序列化成物件 LineMessageApiSDK.LineReceivedObject.LineReceivedMsg ReceivedObject = JsonConvert.DeserializeObject <LineMessageApiSDK.LineReceivedObject.LineReceivedMsg>(rawdata); //取得event物件 var eventObj = ReceivedObject.events[0]; LineMessageApiSDK.LineReceivedObject.UserProfile userprofile = null; string toid = string.Empty; //可以判斷傳送訊息者的類型 switch (eventObj.source.type) { case SourceType.user: //傳送訊息者為一般使用者時 可以利用userid取得 使用者資料 userprofile = channel.Get_User_Data(eventObj.source.userId); toid = eventObj.source.userId; break; case SourceType.group: toid = eventObj.source.groupId; break; case SourceType.room: toid = eventObj.source.roomId; break; } //可以判斷事件類型 switch (eventObj.type) { case EventType.message: //使用者傳送訊息 //取得訊息類型 switch (eventObj.message.type) { case MessageType.text: //被動回復文字訊息 channel.SendReplyMessage(eventObj.replyToken, new LineMessageApiSDK.LineMessageObject.TextMessage("你說:" + eventObj.message.text)); //主動推送訊息 if (userprofile == null) { channel.SendPushMessage(toid, new LineMessageApiSDK.LineMessageObject.TextMessage("第一次主動推送"), new LineMessageApiSDK.LineMessageObject.TextMessage("第二次主動推送")); } else { channel.SendPushMessage(userprofile.userId, new LineMessageApiSDK.LineMessageObject.TextMessage($"Hello {userprofile.displayName} 你是不是說{eventObj.message.text}")); //推送貼圖 channel.SendPushMessage(userprofile.userId, new LineMessageApiSDK.LineMessageObject.StickerMessage(1, 1)); } break; case MessageType.image: break; case MessageType.video: break; case MessageType.audio: break; case MessageType.file: break; case MessageType.location: break; case MessageType.sticker: break; default: break; } break; case EventType.follow: break; case EventType.unfollow: break; case EventType.join: break; case EventType.leave: break; case EventType.postback: break; case EventType.beacon: break; default: break; } return(Ok()); } catch (Exception ex) { return(InternalServerError(ex)); } }
public IHttpActionResult Post() { LineChannel ChannelObj = null; LineEvents LineEvent = null; if (ChannelObj == null) { if (LineChannel.VaridateSignature(Request, Channel_secret)) { ChannelObj = new LineChannel(Channel_Access_Token); LineEvent = JsonConvert.DeserializeObject <LineReceivedMsg>(Request.Content.ReadAsStringAsync().Result).events.FirstOrDefault(); } } if (ChannelObj == null) { return(BadRequest()); } if (LineEvent != null) { Models.LineUserSpeak dbModel = new Models.LineUserSpeak(LineEvent, ChannelObj); switch (LineEvent.type) { case EventType.message: if (LineEvent.message.type == MessageType.text) { string strLineMsg = LineEvent.message.text; if (strLineMsg == "$統計") { /*GET DATA*/ string msg = dbModel.GetReportsDefault(strConn); ChannelObj.SendReplyMessage(LineEvent.replyToken, new NewLineMessageApi.MessageObj.TextMessage(msg)); dbModel = null; } else if (strLineMsg == "$功能" || strLineMsg.ToLower() == "$menu") { NewLineMessageApi.TemplatesMsg.CarouselMessage msgObj = GetCarouselMsg(strConn, LineEvent, ChannelObj); ChannelObj.SendReplyMessage(LineEvent.replyToken, new NewLineMessageApi.MessageObj.TemplateMessage() { altText = "我要查資料", template = msgObj }); dbModel = null; } } if (dbModel != null) { /*save*/ dbModel.Save(strConn); } break; case EventType.follow: break; case EventType.unfollow: break; case EventType.join: switch (LineEvent.source.type) { case SourceType.user: break; case SourceType.group: if (LineEvent.source.groupId != "123") { ChannelObj.Leave(LineEvent.source.groupId, SourceType.group); } break; case SourceType.room: ChannelObj.Leave(LineEvent.source.roomId, SourceType.room); break; default: break; } break; case EventType.leave: break; case EventType.postback: if (LineEvent.postback.data == "統計資料日期") { if (LineEvent.postback.Params != null) { var time = LineEvent.postback.Params.date; if (time.HasValue) { ChannelObj.SendReplyMessage(LineEvent.replyToken, new NewLineMessageApi.MessageObj.TextMessage(dbModel.GetReportsDefault(strConn, time.Value))); } } } break; case EventType.beacon: break; default: break; } } return(Ok()); }