上一篇完成簡易版本的Push Message ,這邊要稍微注意一下使用量。Line 提供兩種模式給Message API使用 “Push”、”Reply”兩種模式,其中Push用來推廣方案銷售,所以次數限量上會限縮在500則,超過後需要付費才能使用。
Reply 目前使用上沒有任何限制,所以使用上可以不必要特別拘謹。
前置作業、工具
處理步驟需要修改 launchSetting.json url ,並執行ngrok、dotnet run就可以使用。
- launchSetting.json
- ngrok
- 後端技術 run
備註
ngrok 只要不中途離開,即使當下”網頁失效” ngrok 是會繼續執行。
程式碼範例
Reply Message - 1/2
Line Reply 需要使用者回覆訊息,Bots 部分會選擇適當回覆內容回覆給對方。當中 Reply 可以判別對方發的訊息是 Message 、Images 、貼圖 ,Json 回覆部分後續再探討。
完成【C#】Line BotsReply Message 前置作業,需要完成三步驟。
一、取得 JSON Body
1 2 3 4 5 6 7 8 9 10 11 12 13
| string strBody = ""; try{ using (StreamReader reader = new(Request.Body, System.Text.Encoding.UTF8)) { strBody = reader.ReadToEndAsync().Result; if (reader == null || string.IsNullOrEmpty(strBody)) return JsonConvert.SerializeObject(new { success = false, message = "error : message empty " }); } }catch(Exception ex){ bot.PushMessage(adminUserID, ex.Message); return JsonConvert.SerializeObject(new { success = false, message = ex.Message }); }
|
二、轉 JSON Data
1 2 3
| var ReceivedMessage = Utility.Parsing(strBody); if (ReceivedMessage == null) return JsonConvert.SerializeObject(new { success = false, message = "error : message empty " });
|
三、取得Line Event
1 2 3 4 5
| var LineEvent = ReceivedMessage.events.FirstOrDefault(); if (LineEvent == null) { return JsonConvert.SerializeObject(new { success = false, message = "error : not found event ! " }); }
|
Reply Message - 2/2
完成以上作業後,我的處理方式是把Event拆開,Line 有提供 Event 可以取得狀態。以下處理方式只有加入Join 以及message。
備註
如果使用這使用 images 貼上圖片,會直接執行到 message 。處理Line Event 方式需要留意一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| private void ReplyBotsMessage(Bot bot,Event lineEvent) { TextMessage textMessage = new ("");
switch (lineEvent.type) { case "join": textMessage = new TextMessage($"大家好啊~"); break; case "message": string text = lineEvent.message.text; if (text == null) break; textMessage = new TextMessage($"您回應是 : {text}"); break; } if(string.IsNullOrEmpty(textMessage.text)){ textMessage = new ($"你回覆的訊息無法判讀,請重新輸入!!"); } bot.ReplyMessage(lineEvent.replyToken, textMessage); }
|
完整程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| using System.Text; using isRock.LineBot; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json;
namespace dotnetCore_LineBot.Controllers { [ApiController] [Route("[controller]")] public class MessageController: ControllerBase { public string channelToken{get; private set;}=""; public string adminUserID{get; private set;}="";
[HttpPost] public string Post(){ Bot bot = InitialBots(); List<MessageBase> repMessage = new List<MessageBase>(); string strBody = ""; try{ using (StreamReader reader = new(Request.Body, System.Text.Encoding.UTF8)) { strBody = reader.ReadToEndAsync().Result; if (reader == null || string.IsNullOrEmpty(strBody)) return JsonConvert.SerializeObject(new { success = false, message = "error : message empty " }); } }catch(Exception ex){ bot.PushMessage(adminUserID, ex.Message); return JsonConvert.SerializeObject(new { success = false, message = ex.Message }); }
var ReceivedMessage = Utility.Parsing(strBody); if (ReceivedMessage == null) return JsonConvert.SerializeObject(new { success = false, message = "error : message empty " });
var LineEvent = ReceivedMessage.events.FirstOrDefault(); if (LineEvent == null) { return JsonConvert.SerializeObject(new { success = false, message = "error : not found event ! " }); } ReplyBotsMessage(bot,LineEvent);
return JsonConvert.SerializeObject(new { success = true, message = "" }); }
private Bot InitialBots(){ string channelToken = this.channelToken; return new Bot(channelToken); }
private void ReplyBotsMessage(Bot bot,Event lineEvent) { TextMessage textMessage = new ("");
switch (lineEvent.type) { case "join": textMessage = new TextMessage($"大家好啊~"); break; case "message": string text = lineEvent.message.text; if (text == null) break; textMessage = new TextMessage($"您回應是 : {text}"); break; } if(string.IsNullOrEmpty(textMessage.text)){ textMessage = new ($"你回覆的訊息無法判讀,請重新輸入!!"); } bot.ReplyMessage(lineEvent.replyToken, textMessage); }
} }
|
參考文件