[LINE BOT] C# 實作 LINE BOT

其實本來是想要用node JS去寫,但不知道為什麼我利用iisnode去架設NodeJS卻一直無法成功。

只好退而求其次,去嘗試利用C# WEB API

 


如何建立WebAPI

在下面這篇連結中,我是透過上面點選webAPI,但Mark跟我說通常建立webAPI並不會使用mvc架構。

https://dotblogs.com.tw/chichiblog/2018/02/26/175538

因此我們需要的只是建立web API。

一開始我很納悶WebAPI他預設就有MVC架構,我該怎麼辦呢??

mark 說 要先建立新專案並且點選 empty 裡面勾選 Web API

webAPI 僅會有 controller 跟 modules 。現在開始來設立linebot吧

設立lineBot

line的申請流程請自己去網路上找吧~~

1. 首先我們再nuget 下載 LineBotSDK

2. 在controller的地方加入一個控制器。

3.在此我們這邊設立叫作LineChatController,在裡面建立一個方法。

namespace lineConnect.Controllers
{
    public class LineChatController : ApiController
    {    
        [HttpPost]
        public IHttpActionResult POST()
        {
            string ChannelAccessToken = "LINE的TOKEN";

             try
            {
                //取得 http Post RawData(should be JSON)
                string postData = Request.Content.ReadAsStringAsync().Result;
                //剖析JSON
                var ReceivedMessage = isRock.LineBot.Utility.Parsing(postData);
                //回覆訊息
                string Message;
                Message = "你說了:" + ReceivedMessage.events[0].message.text;
                //回覆用戶
                isRock.LineBot.Utility.ReplyMessage(ReceivedMessage.events[0].replyToken, Message, ChannelAccessToken);
                //回覆API OK
                return Ok();
            }
            catch (Exception ex)
            {
                return Ok();
            }
           
        }
    }
}

照理來說,這樣就設置OK啦~~待會再來說我碰到的問題

IIS架設

因為LINE的webhook 需要SSL認證,所以記得一定要是Https的,架站如同一般的.net網站一樣(記得將https 指定資料夾路徑為你的程式目錄)。

那我們該如何呼叫我們的API呢??

我們剛剛的controller 名稱叫作 LineChat 

因此我們要呼叫API時,https://domain/api/LineChat 去呼叫,因為我們是寫POST所以如果直接在網址上KEY會出現以下的圖片

提外話,如果你說我要怎麼知道這個API到底怎麼呼叫呢??

在app_start裡面有個webApiConfig,其實他就是一個route ,這個API怎麼開始的路口就在這邊

我們將我們剛剛的網址複製到line的webhook,點選virify ,Success就代表成功囉~~

接下來就去跟機器人講話吧


架到iis上出現的錯誤

當我架到IIS上時,出現了以下的錯誤訊息

當時很納悶到底是怎麼了!!網路上有人說是Global.asax 沒有對應到.cs,但是怎麼改也都不對。

解決辦法:

我突如其來重新建置了一次整個專案,在丟上去卻突然好了!!??

不知道是不是裝了SDK,導致衝突。

如果有人也碰到這個問題,看看是否重建會解決這個問題吧~~


多個方法導致webApi 錯誤


ERROR : Mutilple actions were found 

先來看看我的動作方法 有兩個 register msg 


一開始我以為是因為不能使用switch 去動作,後來才發現 原來我們必須將方法改成 private 才不會被偵測到太多action 


 

參考資料:

http://studyhost.blogspot.tw/2016/12/linebot4-aspnetlinewebhook.html