如何建立可Echo的基本LINE Bot

Overview

本Lab介紹如何透過 C# 以程式碼,以 .net core 開發框架,搭配 LineBotSDK ,快速建立一個可以回應用戶訊息(Echo)的LINE Bot。

Prerequisites

  1. 請先建立好LINE Bot帳號,並取得Channel Access Token與UserId 參考這裡

  2. 下載安裝 .net core sdk 3.1 以上版本 here

  3. 安裝 Visual Studio Code 開發工具 here

  4. 建立 .net core WebAPI 專案,在專案中引用 nuget 上的 LineBotSDK 套件。

  5. 安裝好 Ngrok 便於在開發環境測試 here

Steps

建立 .net core WebAPI專案

在命令列模式建立資料夾,接著透過 dotnet new 指令建立專案

PS D:\> md linetest
PS D:\> cd linetest
PS D:\linetest> dotnet new webapi

系統會出現類似底下畫面...

PS D:\linetest> dotnet new webapi  
The template "ASP.NET Core Web API" was created successfully.  
  
Processing post-creation actions...  
Running 'dotnet restore' on D:\linetest\linetest.csproj...  
D:\linetest\linetest.csproj 的還原於 210.75 ms 完成。  
  
Restore succeeded.

接著執行底下指令, 安裝 LineBotSDK 套件...

PS D:\linetest> dotnet add package linebotsdk

系統會出現類似底下畫面...

PS D:\linetest> dotnet add package linebotsdk
  正在判斷要還原的專案...
  Writing C:\Users\...\AppData\Local\Temp\tmpC537.tmp
info : 正在將套件 'linebotsdk'  PackageReference 新增至專案 'D:\linetest\linetest.csproj'
info : 正在還原 D:\linetest\linetest.csproj 的封裝...
info :   GET https://api.nuget.org/v3-flatcontainer/linebotsdk/index.json
info :   OK https://api.nuget.org/v3-flatcontainer/linebotsdk/index.json 1088 毫秒
info : 套件 'linebotsdk' 與專案 'D:\linetest\linetest.csproj' 中的所有架構相容。
info : 已將套件 'linebotsdk' 版本 '2.2.23'  PackageReference 新增至檔案 'D:\linetest\linetest.csproj'
info : 正在認可還原...
info : 正在將資產檔案寫入磁碟。路徑: D:\linetest\obj\project.assets.json
log  : 已還原 D:\linetest\linetest.csproj (3.16 sec )。

安裝完成後我們建置(Build)一下,看結果如何:

PS D:\linetest> dotnet build
Microsoft (R) Build Engine for .NET Core 16.6.0+5ff7b0c9e 版
Copyright (C) Microsoft Corporation. 著作權所有,並保留一切權利。

  正在判斷要還原的專案...
  已還原 D:\linetest\linetest.csproj (712 ms )。
  linetest -> D:\linetest\bin\Debug\netcoreapp3.1\linetest.dll

建置成功。
    0 個警告
    0 個錯誤

經過時間 00:00:05.39

如果可以順利建置,你應該會收到類似上面這樣的訊息。

透過底下指令,開啟 VS Code進入開發環境

請在命令列輸入 code (空格) .

PS D:\linetest> code .
PS D:\linetest>
注意:
註銷上面的39行,是關閉強制使用 https 的設定。由於我們待會要在用戶端進行測試,關閉 https 將有助於測試的便利,避免在用戶端被其他應用程式阻擋,或是 ngrok, postman 等軟體無法測試的狀況。但在正式環境,我們建議你還原此設定,將會讓安全性更加的嚴謹。

安裝範本 (此動作只需做一次)

若你第一次執行,請在terminal執行底下指令安裝 LINE WebHook範本:

dotnet new --install isRock.Template.LineWebHook

當你確定有該範本後,可在 Terminal (或VS Code中的終端機環境亦可)執行 dotnet new linewebhook 指令,你應當會看到類似底下訊息:

PS D:\linetest> dotnet new linewebhook  
The template "isRock.Template.LineWebHook" was created successfully.

完成後,在 VS Code的專案清單的Controller資料夾中(除了原本的WeatherForecastController.cs是系統內建的之外),還會多出只少五支 *.cs 程式碼:

請先關注 LineWebHookController.cs 這支(如上圖)。

修改 Channel Access Token 與 AdminUserId

在 LineWebHookController.cs 這支程式碼中,找到 "Repleace_it_with_your_Channel_Access_Token",並置換成你的 channel access token,接著找到 "Repleace_it_with_your_Admin_User_ID",並置換成你的UserID。

請留意最上面一行的

[Route("api/LineBotWebHook")]

這就是你的WebHook endpoint位置。

執行WebHook

請確定所有修改的程式碼都有儲存後,在 terminal(VS Code亦可)環境中執行該程式:

dotnet run

雖然看到上面的畫面,但結果是對的。

上述畫面是因為我們試圖用 http get方式去access只支援http post方法的endpoint。
(因為line bot要求採用 http post作為WebHook。你也可以使用postman以http post方式呼叫該endppint,應當會收到 http response 200的正常結果)

使用ngrok讓LINE Bot可以運行

請不要關閉應用程式的執行狀態。 請註冊 NGROK帳號 https://dashboard.ngrok.com/login 下載 NGROK: https://dashboard.ngrok.com/get-started/setup 接著,將下載好的ngrok.zip壓縮檔解開,會看到其中有ngrok.exe執行檔,請將其放置在你覺得方便的資料夾下,並進入該資料夾,並取得token, 並執行指令,類似

ngrok authtoken 2eeXX2nML9kBGsaa_5FtqZEnXSt2Ho7BXgPV3Ar4

接著,執行下列指令:

ngrok http 5000 --host-header="localhost:5000" --region us
https://814273058c22.ngrok.io/api/LineBotWebHook

設定LINE Bot後台

這表示已成功設定,一切完成。

測試LINE Bot

接著,請確定您先前已經將你的LINE Bot加為好友,若確定無誤,你可以跟LINE Bot對話。不管你說什麼,你的LINE Bot都會原封不動的Echo你:

因為我們在程式碼當中撰寫著:

  //準備回覆訊息
  if (LineEvent.type.ToLower() == "message" && LineEvent.message.type == "text")
     responseMsg = $"你說了: {LineEvent.message.text}";

就這樣,你的第一個LINE Bot就完成了...

備註

若要中止此LINE Bot,可在VS Code的終端機中按下 Ctrl+C    
若要中止Ngrok,可在Ngrok執行所在的command line中按下 Ctrl+C

相關參考資料

電子書:https://www.pubu.com.tw/ebook/103305 實體書:https://www.tenlong.com.tw/products/9789865022662 線上課程:https://www.udemy.com/line-bot/ LineBotSDK:https://www.nuget.org/packages/LineBotSDK

如果需要即時取得更多相關訊息,可按這裡加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。

Last updated