iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
0
自我挑戰組

C# 從入門到WebApi系列 第 29

[Day29] 來做個簡單的Line機器人吧

  • 分享至 

  • xImage
  •  

申辦Line Developer

其實只要有Line帳號就行了
我相信大家都有吧XD
我們先到 https://developers.line.biz/en/
點選右上角的登入
然後使用LINE帳號登入
會看見這個頁面
輸入你的使用者名稱跟EMail
https://ithelp.ithome.com.tw/upload/images/20200929/20109549Z1ByzhYm6m.png

選擇Create Provider
打出你中意的名字
https://ithelp.ithome.com.tw/upload/images/20200929/20109549I2XpbQufyL.png

點選provider
https://ithelp.ithome.com.tw/upload/images/20200929/20109549ngXLIpYxCL.png

我們選擇 messaging api
https://ithelp.ithome.com.tw/upload/images/20200929/20109549CM5otxkQkl.png

這兩個不用動
https://ithelp.ithome.com.tw/upload/images/20200929/201095495RIBCHawkK.png

  • Channel icon: 機器人頭像
  • Channel name: 機器人名稱
  • Channel description: 頻道敘述
  • Category: 選擇你機器人適用的行業(我隨便填)
  • Subcategory:同上

https://ithelp.ithome.com.tw/upload/images/20200929/201095497j9W0MSq6M.png

有隱私政策跟服務條款就填
沒的話可以留空

https://ithelp.ithome.com.tw/upload/images/20200929/20109549b8BTK9FflU.png

選擇Messaging API 可以看見你的機器人ID跟QRCODE

完成之後我們先放在一邊

我們打開Visual Studio
建立一個新專案
參考第一支WebApi建立

然後一樣把WeatherForeCast.cs
跟Controller資料夾內的WeatherForeCastController.cs刪除

然後我們打開點選專案->管理NuGet套件
https://ithelp.ithome.com.tw/upload/images/20200929/20109549GiUnbfTLbx.png

搜尋Line.Messaging
選擇第一個
https://ithelp.ithome.com.tw/upload/images/20200929/20109549PporQFro8S.png

實際上LINE官方提供了許多語言的官方SDK
但是偏偏沒有C#的

麻煩順便下載Json.Net

但是幸好還是有廣大社群神人寫的
這個套件也是官方推薦的

接個我們在Controller資料夾下建立
BotController.cs

然後我們回到Line Developers 頁面
一樣選擇Messeaging API
https://ithelp.ithome.com.tw/upload/images/20200929/20109549v2f5qL0ClY.png
拉到最底有一個Channel access token
右邊有一個ISSUE
點下去
https://ithelp.ithome.com.tw/upload/images/20200929/20109549CiyWgneYyk.png
會出現一段Token
https://ithelp.ithome.com.tw/upload/images/20200929/20109549OdUXCDugAm.png
複製這段Token

回到我們的BotController.cs
引用命名空間

using Line.Messaging;

然後宣告一個Client 負責接收與發送line訊息

namespace MyLineBot.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class BotController : ControllerBase
    {
        private const string Token ="上面複製的Token";
        private LineMessagingClient lineMessagingClient = new LineMessagingClient(Token);
    }
}

然後我們要提供一個API 來讓LINE通知我們
這是官方的傳入Json格式

{
  "destination": "xxxxxxxxxx",
  "events": [
    {
      "replyToken": "0f3779fba3b349968c5d07db31eab56f",
      "type": "message",
      "mode": "active",
      "timestamp": 1462629479859,
      "source": {
        "type": "user",
        "userId": "U4af4980629..."
      },
      "message": {
        "id": "325708",
        "type": "text",
        "text": "Hello, world"
      }
    },
    {
      "replyToken": "8cf9239d56244f4197887e939187e19e",
      "type": "follow",
      "mode": "active",
      "timestamp": 1462629479859,
      "source": {
        "type": "user",
        "userId": "U4af4980629..."
      }
    }
  ]
}

實際上透過LineMessaging套件能把他轉成套件的一個event
但是本來的方法好像行不通
(有人有改寫擴充方法,所有參考資料放在文章尾)
所以我這邊用懶人作法先自己拆(我懶得建立MODEL,正確的作法應該要按照上方JSON轉成MODEL)

[HttpPost, Route("getMessage")]
        public ActionResult ReceiveMessage(object messages)
        {
            var request = JsonConvert.DeserializeObject<JObject>(messages.ToString());
            var jToken = request.Property("events").Value;
            var list = JArray.FromObject(jToken);
            foreach (var item in list)
            {
                lineMessagingClient.ReplyMessageAsync(item["replyToken"].ToString(), "你好");
            }
            return Ok();
        }

測試的部分留到明天
真的想要做LINEBOT可以參考這篇(https://ithelp.ithome.com.tw/articles/10217452)
介紹的很詳盡
我就爛0.0b


上一篇
[Day28] 模型驗證
下一篇
[Day30] 使用ngrok 測試API
系列文
C# 從入門到WebApi30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言