LineBot

翻譯機器人的製作


在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,輸入一段話,看他是否會翻譯成英文的內容回來。



作業: 試著更改程式,讓使用此LineBot的人可以自己選擇要翻譯的語言,打造一個多國語言翻譯機器人。