Line Bot -(1)在ASP.NET MVC 上使用 LineBot 回覆客戶傳的訊息

先在 Line Develop 裡面創建一個機器人

使用 Messaging API :

https://developers.line.me/en/docs/messaging-api/overview/

在這裡,Line Bot 使用 Json來傳遞資訊 :

https://developers.line.me/en/docs/messaging-api/reference/

故伺服器只是負責接收資料轉成 Model,組出回傳訊息的 Json,然後利用 WebClinet 將資料丟到 Line 的伺服器處理,回傳訊息給使用者。

1.接收資料

在 Web Api 使用 Request.Content.ReadAsStringAsync().Result 取得資料

string postData =  Request.Content.ReadAsStringAsync().Result;

2.轉成 Model

取得資料後,可以利用 JsonConvert 將資料轉換成 Model

var receivedMessage = JsonConvert.DeserializeObject<LineReceivedMessage>(postData);

目前可能會用到的資訊

string userid = receivedMessage.events[0].source.userId; //使用者 ID
string message = receivedMessage.events[0].message.text; //文字訊息
var replyToken = receivedMessage.events[0].replyToken; //回傳的 token

Model 樣式 (部分功能而已,並不完整)

        public class LineReceivedMessage
        {
            public List<Event> events;
            public LineReceivedMessage()
            {
                events = new List<Event>();
            }
        }
        public class Event
        {

            public string type { get; set; }
            public Source source { get; set; }
            public EventMessage message { get; set; }
            public string replyToken { get; set; }
            public Event()
            {
                source = new Source();
                message = new EventMessage();
            }
        }
        public class Source
        {
            public string userId { get; set; }
        }
        public class EventMessage
        {
            public string id { get; set; }
            public string type { get; set; }
            public string text { get; set; }
        }

3.回傳的資料,這邊直接使用匿名型別處理,然後才轉成 Json

var replyMessage = new
{
    replyToken = replyToken,
    messages = new object[] { new {
    type = "text",
    text = message
    }
    }
};

將資料轉成 Json 然後用 WebClient 傳給 Line Bot 的伺服器處理 :

string s = JsonConvert.SerializeObject(replyMessage);
byte[] bytes = Encoding.UTF8.GetBytes(s);

4.使用 WebClient 發送訊息

WebClient webClient = new WebClient();
webClient.Headers.Clear();
webClient.Headers.Add("Content-Type", "application/json");
webClient.Headers.Add("Authorization", "Bearer " + channelAccessToken);

webClient.UploadData("https://api.line.me/v2/bot/message/reply", bytes);

功能完成後,使用者說啥,他就會回復相同訊息(限文字) :

完整程式碼 :

public void PostReplyMessage(){

            var channelAccessToken = "{Cannel Access Token}";

            var postData = Request.Content.ReadAsStringAsync().Result;

            var receivedMessage = JsonConvert.DeserializeObject<LineReceivedMessage>(postData);
            string userid = receivedMessage.events[0].source.userId;
            string message = receivedMessage.events[0].message.text;
            var replyToken = receivedMessage.events[0].replyToken;

            var replyMessage = new
            {
                replyToken = replyToken,
                messages = new object[] { new {
                    type = "text",
                    text = message
                }
                }
            };

            string s = JsonConvert.SerializeObject(replyMessage);
            byte[] bytes = Encoding.UTF8.GetBytes(s);


            WebClient webClient = new WebClient();
            webClient.Headers.Clear();
            webClient.Headers.Add("Content-Type", "application/json");
            webClient.Headers.Add("Authorization", "Bearer " + channelAccessToken);

            webClient.UploadData("https://api.line.me/v2/bot/message/reply", bytes);


}
print

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *