#GAS #Google App Script #Telegram

用Google App Script 建立 Telegram Bot

楊哲儒 2020/11/03 17:11:00
5430
介紹:
Google App Script (GAS)
Google Apps Script 是一個可快速建置開發的後端服務,且可基於Google的服務平台上,簡單、快速地建置商業性服務,他可使用JavaScript語言去做開發建置,也可以透過Browser 直接在網頁是上在Google服務端上開發,亦可以套用Google App,像是Gmail, Calendar, Google Drive...等等,且不用特別安裝,因為這都是Google 所提供的服務。
 
基本應用:
    1. 嵌入執行:依附在某一個應用程式裡執行。這個部分有點 類似巨集之於 Excel 的關係。在 Google Docs, Spreadsheet, Forms 都可以嵌入指令碼。 
    2. 獨立執行:可直接在以網頁為基礎的 Script Edit 撰寫完畢 並執行。 
    3. Web應用程式:透過 HTML Service 來建構使用者界面, Apps Script 也可以直接成為一個獨立的 Web 應用程式。
    4. 協作平台小工具:Goolge Sites Gadgets 。讓協作平台不只有呈現資訊的能力,還可以用 Apps script 建立小工具。 綜合以上幾個重大功能,Apps Scripts 可          說已成了 Google 上的準伺服端語言。
(上述基本應用摘自   Google Apps Script 入門與應用 第四頁, 高中資訊學科中心教材  - 國立高師大附中 - 江其勳教師)
 
優點:
他透過簡單的JavaScript 語法實現 [Serverless]的目的,讓你不需要自己架後端, 就可以擁有後端和類資料庫的功能。
 
缺點:
1. GAS是一個獨立的環境,有別於前端(VueJs,ReactJs,…)跟後端(nodeJS)的另一個封閉的生態系統。不能使用全部的npm的相關套件
2. 沒有GAS版本的套件是不能用的
3. 在GAS中所有可使用的函式庫,全部都是全域變數,例如 UrlFetchApp,ContentService,HtmlService
 
 
建立環境:
 
 
建立Telegram回覆系統(程式碼.gs):
回傳user的input訊息
var TelegramBotToken = "這裡放你的權杖";
var TelegramBotAPI = "https://api.telegram.org/bot" + TelegramBotToken + "/";
//程式碼由 Boris @ http://www.youtube.com/borispcp 設計,歡迎使用但請保留此聲明。
function doPost(e) {
  var userData = JSON.parse(e.postData.contents);    //取得 Telegram Bot 收到的資訊
  var clientID = userData.message.chat.id;
  if (!userData.message.text) {return;}    //不對文字以外的訊息進行處理
  var searchContent = userData.message.text;
  pushTelegramBotMessage(searchContent, clientID);
}

//傳送 Telegram 訊息給使用者
function pushTelegramBotMessage(message, clientID) {
  var payload = {
    "chat_id": clientID,
    "text": message,
  }
  var options = {
    "method": "post",
    "contentType": "application/json",
    "payload": JSON.stringify(payload)
  };
  UrlFetchApp.fetch(TelegramBotAPI + "sendMessage", options);
}
※注意:每次修改程式,必須要重新發佈到網路上,程式碼才會生效。
 
 
設定Telegram Bot:
1. 搜尋BotFather
2. 對他輸入/newbot
3. 輸入機器人名稱和輸入username,並 取得telegram 權杖(token)
4. Set GAS depolyed (取得GAS對外url)
 
設定公開
5. Set Telegram webhook
https://api.telegram.org/bot{機器人token}/setWebhook?url={GAP生成的網址} /webhook
 
6. 搜尋剛剛建立的@username
 
7. /start
 
8. Google使用限制
https://developers.google.com/apps-script/guides/services/quotas
 
9. 使用google排程器寄送email
將方法放入 程式碼.gs
function sendEmail(){
  var recipient  = "elon.chiu@tpisoftware.com,uhkm728@gmail.com,ex051240@gmail.com", // 收件人
      subject    = "我是標題", // 信件標題
      quota      = MailApp.getRemainingDailyQuota(), // 每日 sendMail 額度
      htmlBody   = '我是內容'; // 信件內容
  
    htmlBody += "</br></br>今日 Google script MailApp.sendEmail 額度剩下 " + quota + " 封, 每個 Google 帳號每日可寄信的額度為 100 封。";
    
    MailApp.sendEmail({
      to: recipient,
      subject: subject,
      htmlBody: htmlBody
    });
}
按此鈕
新增觸發事件
 
 
設定條件
儲存
 
10. 搭配google sheet 透過字串篩選,寄送email給同事
 
 
 
 
Reference
https://woodloch.blog/2020/01/10/google-apps-script-basic-backend-2/
http://icerc.tnssh.tn.edu.tw/download/rs/1030429_3.pdf
https://www.youtube.com/watch?v=-QVaOs0Cr7U&list=PLLrJ9DEA0QKNJwMddxisa2F_RZ7v6xAgu&ab_channel=LuBoris
https://script.google.com/u/1/home/my
https://shian420.pixnet.net/blog/post/351753424-%5Bgoogle%5D-google-script-mail-%E5%8A%9F%E8%83%BD%E9%96%8B%E7%99%BC
https://medium.com/@dustfantasy/google-app-script-%E5%88%B0%E5%BA%95%E6%98%AF%E4%BB%80%E9%BA%BC-6a37a06a85a8
楊哲儒