LineBot第六堂課
4/13 2022
類別:程式教學
翻譯機器人的製作
在LineBot的第四課中,我們將LineBot的名稱取為翻譯機器人,原因就是要在此堂課透過上堂課連結Google試算表的方法,讓它能具有即時翻譯的功能,且翻譯的語言還可以自己作設定使它變為一個多國語言翻譯機,如中翻英、中翻日、英翻日... 等等,在未來讀原文書、旅行都相當實用,製作方法如下:
1、延續單元4的課程,請開啟已建立好的google 試算表。
2、在B1格輸入「原文」,在C1格輸入「語系代碼」,在D1格輸入「翻譯」。
3、在C2格輸入「en-us」,這是要翻譯成「英文」的代碼,若要翻其他語言可參考 各國語言代碼。
4、在D2的儲存格輸入「=GOOGLETRANSLATE(B2,"auto",C2) 」,此為google試算表內建的翻譯函式。
函式中的B2是要翻譯原文的儲存格,"auto"是讓試算表自動偵測原文為哪一種語言,C2是要翻譯語言代碼的儲存格。
*可試試在B2儲存格隨意打上文字,看D2是否有順利翻譯成英文,若沒有,則檢查此步驟有無做錯。
5、開啟單元4中已編寫好的google apps script程式碼,並修改下方所列的程式碼。
var data = sheet.getRange(2,1);改成 var data = sheet.getRange(2,2);
在 data.setValue(event.message.text);下面新增下列兩行
Utilities.sleep(1000);
//延遲1秒後再執行之後的程式,為的是讓試算表來的及翻譯
var reply = sheet.getRange(3,4).getValue(); 改成 var reply = sheet.getRange(2,4).getValue();
並移至 Utilities.sleep(1000); 的下面。
程式中,//後方寫的中文是註解,程式不會去讀,是寫給人看的,讓人了解這段程式碼的意義。
完整程式碼如下:
var channel_access_token = "你的LineBot的token"
var ss = SpreadsheetApp.openById("你的試算表ID"); //試算表ID
var sheet = ss.getSheetByName("工作表1"); //要讀取工作列的名稱
var data = sheet.getRange(2,2); //存對話資料的儲存格 (2,1)表示為試算表的A2
function doPost(e) {
var posted_json = JSON.parse(e.postData.contents);
var events = posted_json.events;
events.forEach(function(event) {
ME=event.source.userId; //使用者的userId
if(event.message.type == "text"){
data.setValue(event.message.text);
Utilities.sleep(1000);
//延遲1秒後再執行之後的程式,為的是讓試算表來的及翻譯
var reply = sheet.getRange(2,4).getValue();
push_message(ME,reply);
}
});
};
//下面是po訊息的函數
function push_message(to,msg) {
var postData = {
"to": to,
"messages": [{
"type": "text",
"text": msg,
}]
};
var url = "https://api.line.me/v2/bot/message/push";
var headers = {
"Content-Type": "application/json",
'Authorization': 'Bearer ' + channel_access_token,
};
var options = {
"method": "post",
"headers": headers,
"payload": JSON.stringify(postData)
};
var response = UrlFetchApp.fetch(url, options);
}
6、點選「發佈」中的「佈署為網路應用程式......」,專案版本記得一定要選「新增」再更新才會真的更新。
7、打開你的LineBot,輸入一段話,看他是否會翻譯成英文的內容回來。