Telegram Bot學習筆記-6:Google表單提交時收到通知

Telegram Bot學習筆記-6:Google表單提交時收到通知

本篇要解決的問題

現在愈來愈多的線上表單都是用 Google 表單製作而成的,而 Google 表單自身也不斷地有在優化。

前幾天看本站的 GA 時,看見有人搜了「google 表單 telegram 通知」的關鍵字進來,才知道「當 Google 表單收到新提交時,可以讓 Telegram Bot 主動發訊息通知」的這件事,會是一般使用者想要了解可以怎麼做的。

Augustus 研究了二天後,發現 Google 基本上就有這項功能,只是需要一點設定跟加上一點程式碼。而且,Google Apps Script 在額度內是免費的,Telegram Bot 的發訊息這項功能也是免費的,不用花錢就可以做出 Telegram Bot 發送有人提交表單的通知。

如果對程式碼不太熟的朋友,本篇 Augustus 也會附上程式碼,複製貼上再改幾個值就可以使用。


本篇許多部份以前就有寫了筆記文,可以先看一下,後面段落如果是用到以前做過的東西會快速帶過。

Telegram Bot學習筆記-2:用google apps script接收/推播訊息

Google Apps Script 基本使用:跨網域AJAX、接Firebase


Google表單收到新提交,Telegram Bot訊息通知流程圖

Google表單收到新提交,Telegram Bot訊息通知流程圖(點擊看原圖)
Google表單收到新提交,Telegram Bot訊息通知流程圖(點擊看原圖)

整體流程就是:

  1. Google 表單新增完成後,回覆部份選擇建立試算表,讓每筆回應會新增到試算表中
  2. 試算表上點選程式碼編輯器
  3. 程式碼編輯器寫入 Telegram Bot 發通知的程式
  4. 程式碼編輯器點擊「現有專案的啟動程序」
  5. 設定觸發程序,完成

第一點關於表單回覆的部份,建議要用「建立試算表」(圖上的綠色線),這樣就可以有一張表看所有回覆,而且程式碼也更簡單,不必做額外處理。

本篇最後會附上回覆不用試算表,只在表單的回覆區看回覆時,要怎麼處理接受資料這段。


1 新增Google表單,回覆選建立試算表

建立好 Google 表單,點擊「回覆」,會看見有一個 Excel 的圖示,點擊圖示:

點擊回覆,點擊 Excel 圖示
點擊回覆,點擊 Excel 圖示

點擊圖示,確認建立後,會進到回應的試算表,可以看見 Google 還很貼心的主動新增了一欄時間戳記:

回應試算表
回應試算表

2 試算表上點選程式碼編輯器

Google 的雲端 Office 有一項很特別的功能,就是可以在背後加上程式碼,這邊就是要在背後加上讓 Telegram Bot 發通知的程式碼。

要加上程式碼很簡單,點選上排的「工具」,再點選「指令碼編輯器」就可以了:

點選工具,點選指令碼編輯器
點選工具,點選指令碼編輯器

點了以後,會進到 Google Apps Script 的程式碼編輯畫面:

進到編輯程式碼的頁面
進到編輯程式碼的頁面

進到頁面後,刪掉 function myFunction 那段,然後存檔,下面開始就要準備進入程式碼的部份。

以下的程式碼都是 Augustus 整理過的,不會太難,複製貼上改個值就可以運作。


3 Telegram Bot 發通知的程式碼

要讓 Telegram Bot 發通知,需要二個東西:Telegram Bot Token、你的Telegram ID。

取得 Telegram Bot Token

會看到這篇的人,應該都已經有 Telegram Bot,這邊就快速帶過建立一個 Telegram Bot 跟取得 Token 的部份。

點擊以下連結,開始建立自己的機器人:BotFather

在 BotFather 上輸入一個斜線「/」,會出現功能選單,選第一個「/newbot」:

輸入 / 會出現選單,選 /newbot
輸入 / 會出現選單,選 /newbot

接著要輸入機器人的名稱:

輸入機器人名稱
輸入機器人名稱

最後輸入機器人的 id,一定要是「bot」結尾:

輸入機器人 id

以上都輸入完後,BotFather 會秀出一段訊息,最重要的就是那段 token,要把他存下來,我們寫的指令碼會用到:

Telegram Bot Token

在剛剛的指令碼上,我們存下 token:

var token = 機器人給的token
把 token 存進指令碼編輯器裡

取得了 token 後,下一個要取得的就是我們的 id,讓機器人知道訊息要發給誰。

取得接收訊息者的id

取得 id 的方式很簡單,我們先點進機器人的對話視窗後,隨便發一個訊息給機器人:

隨便發個訊息給機器人
隨便發個訊息給機器人

接下來,打開瀏覽器,輸入以下網址:

https://api.telegram.org/bot剛剛取得的機器人token/getUpdates

像是這邊的測試,就是輸入像這樣的網址:

https://api.telegram.org/bot1231370742:AAEKWTK3NQ8sfk5S7mRhMCaJj6GLNMG9NQ8/getUpdates

按下 enter 後,就可以看到這個機器人收到的訊息:

看見機器人收到的訊息

這件事告訴我們,token 千萬不要外流,不然大家都看得到它收到了哪些訊息。

收到的訊息中,可以看見 from.id 的值是一串數字,那個數字就是你的 id,只要告訴機器人傳到這個 id,你就會收到機器人傳來的訊息。

同樣的,這個 id 我們也存到指令碼編輯器中:

將接收者的 id 存下
將接收者的 id 存下

Telegram Bot 發送訊息的程式碼

有了 token、id,接下來就可以先寫上讓機器人發送訊息的程式碼,如下:

像是本篇的範例會寫成以下:

機器人發送訊息的範例程式碼
機器人發送訊息的範例程式碼

function 寫好了以後,我們之後只要把 message 丟進去就好。

Google表單有新提交,取得提交的資料

Google的官方文件中,有提供當表單有新提交時,可以收到哪些訊息:Event Objects

Form Submit 時,我們可以收到的訊息主要都在「namedValues」這段,因此我們只要取出 namedValues 就可以知道新的提交有哪些資料。

以下先寫出收到新提交時,取出新提交的內容,並整理成給機器人發訊息用的程式碼:

這邊我們把處理的動作都包進 onSubmit 這個 function 裡,這樣當有新的提交時,只要執行 onSubmit 就行。


4 程式碼編輯器點擊「現有專案的啟動程序」

我們寫好了讓機器人發訊息的程式,也寫好了收到新提交時要做的事情的程式,但最重要的一個問題來了,我們要怎麼知道有新的提交?

在說明文件「Installable Triggers」中有說明如何安裝一個當有新提交時會執行的觸發程序,以下實際操作一次並說明。

在指令碼編輯器的介面中,點選上排的「編輯」> 「現有專案的啟動程序」:

點擊編輯編輯,點輯現有專案的啟動程序
點擊編輯編輯,點輯現有專案的啟動程序

5 設定觸發程序

點了「現有專案的啟動程序」後,會進到觸發條件的設定頁面中,點擊右下角的「新增觸發條件」:

觸發條件的設定介面很直覺,幾個項目點一點按下儲存就行:

設定觸發條件
設定觸發條件

在要執行的功能中,因為我們把收到新提交時要做的事都寫進 onSubmit 這個 function 中,所以這邊選的就是 onSubmit。

選取活動類型的部份,我們就選「提交表單時」。這邊也可以看到還有其他事件可以選,有其它需求的朋友可以另外寫幾個 function 來玩玩看。

選擇了以後按下「儲存」,Google會要確認授權,就一律都提供授權就行,因為程式碼都是我們自己寫的,所以沒有安全問題。

這中間會遇到Google提示未驗證的視窗,按下「進階」,再按下「前往XXX」:

未經驗證的提示
未經驗證的提示

最後按下允許後,就會看見我們的觸發條件新增了一項:

成功新增一項觸發條件
成功新增一項觸發條件

有了觸發條件,當表單有新提交時,就會執行我們寫好的 onSubmit,機器人就會發送通知,demo如截圖:

收到新提交,機器人發送通知
收到新提交,機器人發送通知

如果Google表單的回覆不用試算表

Google 表單的回覆也可以不新增在試算表上,同樣也可以用 Telegram Bot 做通知。

在 Google 表單的編輯頁面上,按下右上角的點點點,再按下指令碼編輯器,就一樣會進到寫程式的頁面上:

點指令碼編輯器

程式碼跟有試算表時是相同的,不同的是收到新提交後,取得提交內容的部份。

Google 文件有提供範例的程式碼:Class FormResponse

不過,文件中最後會取得的是所有回覆的資料,但我們總不能每次一有新提交,機器人就傳所有歷史回覆的內容來,這邊 Augustus 改寫成只抓最新的一筆提交資料:

裡面有一行是要寫 Google 表單的 id,這個在網址上。當我們進到表單的編輯頁面,網址會像這樣:

https://docs.google.com/forms/d/xxxxxxxxxxxxxxxxx/edit

那個 xxxxxxxxxxxxxxxxx 就是表單的 id,就複製後貼上程式碼裡就行。


原始碼

有用試算表

這邊附上 Google 表單的回覆有用試算表時,當有新提交 Telegram Bot 會發通知的完整程式碼,有打「*」號的就是記得替換成你自己的值的部份:

沒用試算表

以下是只用 Google 表單,回覆沒用試算表時的完整程式碼,一樣有打「*」號的就是記得要替換的部份:

如果你覺得這篇對你有所幫助,請多多按讚跟分享,支持一下 Augustus 的寫作動力。


Telegram Bot學習筆記系列

  1. 用GCP + node.js接收/推播訊息
  2. 用google apps script接收/推播訊息
  3. 鍵盤keyboard
  4. 命令列commands
  5. 取得使用者大頭照
  6. Google表單提交時收到通知
Summary
Telegram Bot學習筆記-6:Google表單提交時收到通知
Article Name
Telegram Bot學習筆記-6:Google表單提交時收到通知
Description
本篇大綱:本篇要解決的問題。1 新增Google表單,回覆選建立試算表。2 試算表上點選程式碼編輯器。3 Telegram Bot 發通知的程式碼。4 程式碼編輯器點擊「現有專案的啟動程序」。5 設定觸發程序。如果Google表單的回覆不用試算表。原始碼。
Augustus
Let's Write
Let's Write
Publisher Logo
訂閱
通知
guest
0 Comments
Inline Feedbacks
看所有留言