如何做一個Line機器人
前置作業
- Heroku 註冊帳號
- Node.js 到官網下載14.0.0,再直接安裝
- Line Developers
- 用Line帳號登入Line Developers
- 建立一個provider
- 建立一個MessageAPI
- 用Line加好友
- 用github登入
- 下載ngrok
ngrok是用來轉發http內容跟line機器人溝通,我們自己在開發的時候用來測試的
專案設定
Node.js安裝套件
- 打開VSCode,為這個機器人建立一個專案目錄
- 打開VSCode終端機(推薦使用Cmd):
移動到你的專案目錄,如圖
npm init 初始化你的專案目錄
會產生package.json
如果你的package.json已有記錄你裝的套件,你可以用
npm install
指令來安裝所有套件編輯package.json,加入兩個指令
1
2
3
4
5
6
7
8{
...
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js"
},
...
}安裝nodemon套件
npm install -g nodemon
-g 全域安裝
modemon 存檔的時候就會幫忙重新啟動node.js安裝環境設定檔套件
npm install dotenv
安裝line機器人套件
npm install linebot
安裝API套件
npm install request
、npm install request-promise
安裝node.js的程式碼風格格式化的套件
npm install -g eslint
F1=>Create eslint…
終端機要在你的專案目錄
終端機會自動出現eslint初始化,照圖片回答即可
有上傳Git的話,記得把
node_modules/
加入.gitignore清單
ENV環境設定檔
- VSCode安裝DotEnv套件
- 專案目錄下建立.env檔案,內容寫入如下(變數裡面的自己去LineDevelop找)
1
2
3
4CHANNEL_ID=""
CHANNEL_SECRET=""
CHANNEL_ACCESS_TOKEN=""
PORT=3000 - 有上傳Git的話,記得把.env加入.gitignore清單
ESlint設定
VSCode 鍵盤F1=>搜尋setting=>喜好設定:開啟設定(JSON)
在setting.json內加入這一行
1
2
3
4
5{
...
"editor.codeActionsOnSave": {"source.fixAll.eslint": true}
...
}機器人設定
在專案目錄下建立index.js
輸入這些東西LineDevelopers裡面去把自動回應關閉
設定ngrok
ngrok.exe放到專案目錄
在終端機裡面輸入Ngrok提供的指令
ngrok authtoken ...
(記得./要拿掉)在終端機裡面輸入
ngrok http 3000
啟用ngrok http連線開另一個新的終端機輸入
npm run dev
啟用node.jsdev是
npm nodemon index.js
指令把ngrok給的https路徑貼到MessageAPI的URL,如果成功的話打開Use Webhook(可能要等一下才能驗證)
撈API
寫成下面這樣,當使用者跟機器人說話,機器人會回應kktix第一個活動的標題。
需要import request-promise 套件
相關連結
npm linebot
npm request-promise
heroku設定
這是一個雲端伺服器,用來存放機器人,Heroku自己有https,所以不用擔心ngrok換網址了
- 登入後,建立一個App
- 在這個app的後台的Deploy頁面,選用github連動,選擇到自己的儲存庫
- 到setting頁面設定Config Vars
- 部屬你的機器人,點Deploy branch,成功之後點view按鈕,把給的網址複製起來
- 貼到LineDevelopers的MessageAPI的Webhook URL
相關套件
解析HTML - cheerio
如果你想撈的資料是沒有API的話,可以用cheerio去解析HTML
搭配request-promise可以拿到的HTML資料,配合利用JQ語法解析
cheerio
解析XML - XML2js
排程 node-schedule
可以指定機器人每天幾點去做事情(撈資料之類的)