1.前置作業(以node js為例)
環境:
node版本:v6.11.0
npm版本:v3.10.10
express:4.X
2.安裝@line/bot-sdk
LINE官方有提供nodejs版本的SDK,可以到GitHub或使用npm指令安裝
npm install @line/bot-sdk
3.用express建立一個簡單的webhook應用程式
我們的程式資料夾最基本應該要長這樣:
打開app.js,首先我們導入3個必要的模組
const express = require('express');
const line = require('@line/bot-sdk');
const crypto = require('crypto');
定義必要的變數
const app = express();
const client = new line.Client({
channelID: 65464,
channelSecret:"your Channel Secret"
channelAccessToken:"jowrwer"
});
接著設定webhook的路由,並指定該路由由line官方提供的SDK來parse request
app.post('/webhook', line.middleware({
channelID: 65464,
channelSecret:"your Channel Secret"
channelAccessToken:"jowrwer"
}), (req, res) => {
});
parse完成後,我們還需要驗證這個request是否由LINE官方發出,而不是來自其他奇奇怪怪的地方
app.post('/webhook', line.middleware({
channelID:...
}), (req, res) => {
let signInKey = '';
try {
signInKey = crypto.createHmac('sha256', your_channelSecret).
update(Buffer.from(JSON.stringify(req.body)), 'utf8').digest('base64');
} catch (e) {
}
if(signInKey !== req.header('x-Line-Signature')){
return res.send(error);
}
});
驗證的作業結束後,就可以開始撰寫ChatRobot的具體行為了!這裡我們來建立一個簡單的應聲蟲程式!
首先建立一個function,並能夠傳入一個參數,這項參數為使用者傳送過來的訊息內容
接著是要作為回應的物件,這個物件的格式必須按照LINE官方文件給出的規範,這裡以純文字作為範例
function handleEvent(event) {
let cReply = {
type: 'text',
text: `你剛才說了"${event.message.text}"`
};
}
type : 回應的種類,除了一般的純文字、貼圖以外,chatRobot還擁有其他種類,詳細可以參考官方文件
text : 回應的訊息內容,此項會根據type而改變。
接著寫一個簡單的判斷,我們判斷使用者傳送過來的訊息種類是不是文字訊息
是的話,機器人就會回應:你剛才說了XXX;不是的話,機器人就回應:"拍謝,看不懂" 的文字訊息
function handleEvent(event) {
let cReply = {
type: 'text',
text: `你剛才說了"${event.message.text}"`
};
if (event.type !== 'message' || event.message.type !== 'text') {
cReply.text = '拍謝,看不懂';
}
return client.replyMessage(event.replyToken, cReply);
}
應聲蟲的程式完成後,我們回到剛才路由的部份,在回應上呼叫剛剛完成的應聲蟲程式
app.post('/webhook', line.middleware({
channelID:...
}), (req, res) => {
return res.json(handleEvent(req.body.events[0]));
});
最後開啟webServer,並自定port,此處port設為3060
app.listen(3060, () => {
console.log(`Webhook listening on 3060`);
});
做到這裡,我們的應聲蟲應用程式完成了!下一章,我們就準備將他佈署到伺服器上!