Laravel + Google Form = 快速且簡易的問卷系統

Stephen Chen
5 min readDec 25, 2022

TL;DR

使用 Google Form 的 Pre-filled 機制拿到 URL 再把 Query String 替換掉,然後透過 API 方式同步 Google Sheet 資料來達成簡易的問卷系統

Made from DALL·E

我的情境

這次紀錄一個快速且簡單的問卷系統給 iOS 跟 Android

目前有會員機制需要使用者填寫問卷並且對資料識別又沒太多時間

一開始找了一些廠商 ( Ex: survicate ),但發現都要付錢又或者是不支援 iOS 跟 Android,於是想說試看看大家最常用的 Google Sheet 看有沒有辦法。

大綱

1. 創 Google Cloud Project
2. 創 Google Form 以及 Pre-filled
3. 整合 Laravel 專案跟 Google Sheet API

1. 創建 Google Cloud Project

創建 GCP Projects

創建 Service Account ( 註 1 )

輸入資料

給此 Service Account 權限

創建好之後會在這邊出現( 以信箱的方式呈現,但畫面碼掉 ),點擊鉛筆編輯

下載 Json 檔案,等等會使用到

然後要記得啟用 API,可以直接透過上方搜尋欄打 Google Sheet API

2. 創 Google Form 以及 Pre-fill

設定好表單內容,然後點選 Pre-fill link,顧名思義就是預先幫使用者把資料填好

到 Pre-fill link 頁面把資料填好並且複製連結,你會發現在 URL 的 query string 會相對應到指定的欄位還有值

所以把這串 URL Link 透過類似 API 的方式 ( 或者信件、FB、Line 及其他分享方式….等 ) 吐給前端並且把 AAAAA 這串文字替換成使用者的 ID, 比如 BBBBB

Replqce string

當使用者一打開表單就預先看到填好資料( 以上面情境是 BBBBB ),大大的提高辨識度,然後使用者也可以少填寫一欄,但真的還是無法完全避免掉那些不小心或者故意點擊的人

記得創建 Sheet

資料進來大概長這樣,然後注意 Sheet ID 還有 Sheet Name 等等會用到

然後分享給在 GCP 創建的 Service Account,這樣才有權限存取

3. 整合 Laravel 專案跟 Google Sheet API

安裝

composer require revolution/laravel-google-sheets

Publish

php artisan vendor:publish --provider="PulkitJalan\Google\GoogleServiceProvider" --tag="config"

把從 GCP 下載好的 json 檔案轉成 Array ( 這邊也可以用 path 的做法 ),還有 Sheet ID 跟 Sheet Name 也一起貼上

以上全部

結論

這機制的好處是可以很快速做出一個問卷系統,不需要刻手機端的 UI,但缺點是有可能使用者會把 Pre-filled 的資料刪除這樣就會追蹤不到。

備註

  • 註一:Service Account

類似 User Account,但不能 browser 登入也沒有密碼只有 RSA Key Pair,通常代表 Machine 又或者是 Application ( 可以想成不是人的方式 )。其他 User Account 擁有的都,比如給予 Certain Resources、Actions 或者 IAM Roles.

Reference

--

--