# line 機器人 第一堂 ###### tags: `LineBot` ![](https://i.imgur.com/sOBTqS4.png) 1. **終端機指令輸入 =="npm init --yes"==** `初始化產生"package.json"` 2. **package.json 加入 "type":"midule"** `使用 ECMAScript 語法 import / export` :::warning ![](https://i.imgur.com/M2dT7g4.png) ::: 3. **安裝<a href="https://www.npmjs.com/package/linebot"> linebot</a>套件 指令:=="npm i linebot"==** linebot套件 `產生"package-lock.json"紀錄linebot相依的套件 ` `產生 node_modules 資料夾 (套件包)` :::warning ![](https://i.imgur.com/VlD11tL.png) ::: 4. **建立檔案".gitignore"** 用來上傳git時,忽略不需要上傳的檔案 :::warning ![](https://i.imgur.com/qJPNlZ6.png) ::: 5. **建立檔案".env"** 用來放置需要加密的資料ex:linebotID、金鑰等等。 6. **安裝<a href="https://www.npmjs.com/package/dotenv">dotenv</a> 指令:=="npm i dotenv"==** 用來讀取.env檔案的套件 可以安裝<a href="https://marketplace.visualstudio.com/items?itemName=mikestead.dotenv">dotENV_VScods套件</a> 讓.env有顏色 *如果有安裝成功,package.json會顯示已安裝套件及版本* 7. **安裝<a href="https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint">ESLint-VScode套件</a>** 用於安裝eslint 8. **安裝enlint 指令:=="npm i -D eslint"==*** <a href="https://hackmd.io/@ChiaJung/rku_5Dzvq">安裝指南</a> :::info - 安裝 VSCode 套件 ESLint 並新增下面的設定,驗證程式碼並保持風格一致 (在VScode的settings.json) ```json= "editor.codeActionsOnSave": { "source.fixAll.eslint": true }, ``` - 安裝 **<a href="https://www.npmjs.com/package/nodemon">nodemon</a>** 指令 : npm i -D nodemon 只需要在 package.json 將啟動的 node 改成 nodemon 就好 ==如果更改.env還是必須手動重開== ```json= "scripts": { "dev": "nodemon index.js", }, ``` 終端機指令 : npm run dev (要中斷ctrl+c) ::: 9. **建立 "index.js"** ```javascript= import 'dotenv/config' //引用dotenv套件 (config.js檔) 詳情看文件 import linebot from 'linebot' //引用linebot套件 const bot = linebot({ //放在.env檔案裡的資料,用 process.env.(key值) 引用 channelId: process.env.CHANNEL_ID, channelSecret: process.env.CHANNEL_SECRET, channelAccessToken: process.env.CHANNEL_ACCESS_TOKEN }) bot.listen('/',process.env.PORT || 3000, () => { console.log('機器人啟動') }) // 機器人.監聽('根目錄',port號,()=>{顯示是否有成功啟動}) // process.env.PORT (server的port) // 連進來的 http://localhost:3000/ ``` :::success > #### <a href="https://zh.m.wikipedia.org/zh-tw/%E9%80%9A%E8%A8%8A%E5%9F%A0" title="維基資料">通訊埠(英語:port)</a> > 又稱為連接埠、埠、協定埠(protocol port)在電腦網路中是一種經由軟體建立的服務,在一個電腦作業系統中扮演通訊的端點(endpoint)。每個通訊埠都會與主機的IP位址及通訊協定關聯。通訊埠以16位元數字來表示,這被稱為通訊埠編號(port number)。 ::: 10. **開啟 ngrok** <a href="https://hackmd.io/@ChiaJung/BJPhBUGv9">ngrok 開啟指南</a> 11. **設置 Webhook URL** 開啟後將ngrok位址, 複製貼上至 <a href="https://developers.line.biz/en/">line Developers </a> 機器人內 API 的 Webhook URL 。 點選 Verify 審核測試 ,出現*成功*。 ::: danger (注意! 機器人開啟ngrok後需要重啟) ::: :::warning ![](https://i.imgur.com/h80VnGs.png) ![](https://i.imgur.com/i46gjZH.png) ::: 12. 設定回覆 開啟 "LINE Official Account Manager" :::warning ![](https://i.imgur.com/d0Ad9Ee.png) ![](https://i.imgur.com/MIt4eF0.png) ::: 13. 測試 注意 : 每一次修改要測試都必須重啟機器人。 ```javascript= import 'dotenv/config' import linebot from 'linebot' const bot = linebot({ channelId: process.env.CHANNEL_ID, channelSecret: process.env.CHANNEL_SECRET, channelAccessToken: process.env.CHANNEL_ACCESS_TOKEN }) bot.on('message', (event) => { //監測機器人收到訊息,執行 console.log(event) if (event.message.type === 'text') { //當訊息 是文字 event.reply(event.message.text) // 回覆 傳來的文字 } }) bot.listen('/', process.env.PORT || 3000, () => { console.log('機器人啟動') }) ``` ```javascript= bot.on('message', (event) => { console.log(event) switch (event.message.text) { //文字訊息 case '1': //文字訊息 = "1" 的時候 event.reply('尼好') //回覆 "尼好" break //停止執行 case '2': //文字訊息 = "2" 的時候 event.reply('晚安') // 回覆"晚安" break // 停止執行 } }) } ``` 14. **<a href="https://developers.line.biz/en/docs/">LINEBOT 文件</a>** <a href="https://developers.line.biz/en/docs/messaging-api/message-types/">Message types</a> 15. **指令 :"npm i axios" 串接API用的套件** 引入套件 ```javascript= import axios from 'axios' ``` 16.