其實本來是想要用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