使用手冊
連接訊息管道
每個頻道都是選配:填了憑證才會真的送出,沒填的頻道一律走沙盒(訊息只會出現在主控台的模擬手機,不會送到任何人手上)。下面是主控台「頻道設定」頁會一步一步帶你走的內容——先看過再決定要不要開始,也可以直接進主控台照著做。
共同規則
- 憑證以
HUB_SECRET_KEY加密儲存,存檔後只顯示「已設定」,任何頁面都不會再把密鑰吐回瀏覽器。 - 按「驗證並啟用」時 Herald 會先呼叫供應商驗證一次,失敗不會覆蓋原本可用的憑證。
- 「停用」會刪除該頻道憑證並回到沙盒,已排入佇列的訊息改以沙盒處理。
- 啟用只代表能送;還要有收件人——LINE 需真人加好友、Email 需聯絡對象有信箱、Web push 需完成訂閱。
LINE 官方帳號
推播、回覆與對話劇本的主要管道。學生與家長最常用,也是唯一支援 LIFF 收件匣的頻道。
還沒有帳號?先準備
- 登入 LINE Business ID
用公司/學校的共用 email 註冊(也可以用個人 LINE 帳號登入,但共用 email 之後交接比較容易)。同一個 Business ID 可以管理多個官方帳號。
LINE Official Account Manager ↗ - 建立 LINE 官方帳號
按「建立帳號」,填帳號名稱(會顯示在使用者的聊天室與好友清單)、業種與國家。免費方案就能開始,之後再依訊息量升級。
直接去建立帳號 ↗ - 關掉 LINE 內建的自動回應
新帳號預設會自動回覆罐頭訊息。在該帳號的「設定 → 回應設定」把「自動回應訊息」與「加入好友的歡迎訊息」關閉、把「聊天」打開,改由 Herald 的劇本接手,否則兩邊會同時回話。 - 啟用 Messaging API
在該帳號的「設定 → Messaging API → 啟用」,選一個 Provider(沒有就新建,通常填公司或學校名稱)。這一步會在 LINE Developers 產生對應的 channel——這才是 Herald 要接的東西。
到 OA Manager 設定 ↗
已經有帳號的話這一段可以整段跳過。
連接到 Herald
- 抄下 Channel ID 與 Channel secret
在 LINE Developers Console 打開該 channel →「Basic settings」分頁:最上方是 Channel ID(10 位數字),往下捲到 Channel secret。
LINE Developers Console ↗ - 發行 Channel access token
切到「Messaging API」分頁 → Channel access token (long-lived) → 按 Issue,複製整串。這串只會完整顯示一次,先貼到右邊欄位再說。
LINE Developers Console ↗ - 按「驗證並啟用」
Herald 會用這三個值呼叫 LINE 的 /v2/bot/info;成功才會存檔,失敗會保留原本可用的憑證。 - 把 Webhook URL 貼回 LINE
啟用後複製本頁顯示的 Webhook URL →「Messaging API」分頁 → Webhook settings → 貼上、按 Verify、打開 Use webhook。沒有這一步,使用者的回話與加好友事件不會進到 Herald。
LINE Developers Console ↗ - 用自己的手機加一次好友
在 OA Manager 取得加好友的 QR 或連結,自己先加一次。有人加好友(follow)Herald 才會建立對應的聯絡對象——剛啟用時好友數是 0,推播自然沒有收件人。
取得加好友連結 ↗
| 要填的欄位 | 哪裡拿 | |
|---|---|---|
| Channel ID | Basic settings 分頁最上方的數字。 | 必填 |
| Channel secret | Basic settings 分頁;Herald 用它驗證 webhook 簽章。 | 必填 |
| Channel access token(long-lived) | Messaging API 分頁按 Issue 產生;用來送訊息。 | 必填 |
「測試連線」做什麼:呼叫 LINE 的 /v2/bot/info,成功會顯示官方帳號名稱。不會送出任何訊息。
Email(SMTP)
沒有加好友、或推播失敗時的後備管道;正式通知留存也常靠它。
還沒有帳號?先準備
- 準備一個可對外寄信的 SMTP 帳號
校內/公司郵件主機的服務帳號,或 SendGrid、Amazon SES、Mailgun 等服務開通後給的 SMTP 憑證。已經有現成的寄信帳號就跳過這步。
已經有帳號的話這一段可以整段跳過。
連接到 Herald
- 找出主機與連接埠
587 = STARTTLS(最常見,建議);465 = SSL。兩者 Herald 都支援,填錯埠會在驗證時就失敗。 - 取得帳號與密碼
外部服務多半以 API key 當密碼(例如 SendGrid 的帳號固定是 apikey,密碼是 SG.xxx)。校內主機若允許內網轉送,帳密可以留空。 - 決定寄件地址
必須是該主機/網域允許的地址,格式可用「台大傳訊 <noreply@ntu.edu.tw>」。請先在 DNS 設好 SPF / DKIM,否則容易被判為垃圾信。 - 按「驗證並啟用」
Herald 會連上 SMTP 主機做一次登入驗證(SMTP verify),不會寄出任何信。
| 要填的欄位 | 哪裡拿 | |
|---|---|---|
| SMTP 主機 | 郵件主機網域或 IP。 | 必填 |
| 連接埠 | 587(STARTTLS)或 465(SSL)。 | 選填 |
| 帳號 | 免驗證的內部轉送可留空。 | 選填 |
| 密碼 / API key | 以 HUB_SECRET_KEY 加密後儲存,之後只顯示「已設定」。 | 選填 |
| 寄件地址 | 收件者看到的寄件人;必須是主機允許的地址。 | 必填 |
「測試連線」做什麼:對 SMTP 主機做一次連線與登入驗證(不會寄信)。
瀏覽器推播(Web Push)
學生在校園網站或 LIFF 訂閱後,用瀏覽器通知送達;可另接 FCM 給校園 App。
連接到 Herald
- 產生 VAPID 金鑰對
按下面的「自動產生金鑰並啟用」最省事;也可以自己跑 npx web-push generate-vapid-keys 再貼進來。這一步不需要任何外部帳號。 - 填寫聯絡方式(subject)
以 mailto: 或 https:// 開頭,例如 mailto:noreply@ntu.edu.tw。推播服務(Google/Mozilla)遇到問題時用它聯絡你。 - 把公開金鑰放進網頁前端
網頁訂閱時 pushManager.subscribe 的 applicationServerKey 必須是同一組公開金鑰;換金鑰等於讓所有舊訂閱失效。訂閱成功後把整個 PushSubscription JSON 當作 address 註冊給 Herald(見下方 API)。
Push API 說明(MDN) ↗ - 按「驗證並啟用」
這個頻道的驗證完全在本機做:確認私鑰推得出公鑰、VAPID JWT 可簽可驗、subject 格式正確,不會連外。
要推到自己開發的 App(Android/iOS)?
同一個頻道也吃 FCM registration token:Herald 依地址形狀自動選 VAPID 或 FCM,所以組織裡有人用瀏覽器、有人用 App 都沒問題。注意同一個人在同一個管道只會保留最新的一筆地址——先訂閱網頁再註冊 App token,網頁那筆會被退役。iOS 也走 FCM(內部轉 APNs),不必另外接 APNs。
- 建立 Firebase 專案並加入你的 App
Firebase 主控台 → 新增專案 → 加入 Android/iOS 應用程式,把 google-services.json/GoogleService-Info.plist 放進 App。iOS 另需在 Firebase 上傳 APNs 金鑰。
Firebase 主控台 ↗ - 下載服務帳戶 JSON 並貼到上面的欄位
專案設定 → 服務帳戶 → 產生新的私密金鑰,把整份 JSON 貼進「FCM 服務帳戶 JSON」。Herald 會用它換 OAuth token 呼叫 FCM HTTP v1。
Admin SDK 設定說明 ↗ - App 取得 registration token
Android/iOS 各自用 FCM SDK 取得 token(權限要先向使用者要)。換手機、重裝、清資料都會換一組,所以要在每次啟動時回報。
Android 用戶端設定 ↗ - 把 token 註冊成這個人的地址
由你的後端呼叫 Identity API:PUT /v1/subjects/{校內帳號}/addresses/webpush,body 帶 {"address":"<FCM token>","providerHint":"fcm","source":"app","verified":true}。同一支 API 重打即可換手機——舊 token 會在同一個請求裡退役。
API 快速上手 ↗ - 確認分類的管道計畫含 webpush
分類的 channel plan 沒有把 webpush 放進 preferred 或 fallback 的話,訊息永遠不會走這個管道。
| 要填的欄位 | 哪裡拿 | |
|---|---|---|
| VAPID 公開金鑰 | base64url,前端訂閱時要用同一組。 | 必填 |
| VAPID 私密金鑰 | 加密儲存;外洩等同可冒名推播。 | 必填 |
| 聯絡方式(subject) | 必須是 mailto: 或 https:// 開頭。 | 必填 |
| FCM 服務帳戶 JSON(推到自製 App 才需要) | 見下方「要推到自己開發的 App」。 | 選填 |
「測試連線」做什麼:本機驗證金鑰對與 VAPID JWT,不連外、不推播;FCM 的服務帳戶在第一次送出時才會被使用。
WhatsApp(Cloud API)
境外學生與國際交流常用;24 小時客服視窗外只能送已核准的範本訊息。
還沒有帳號?先準備
- 建立 Meta 商業帳號與應用程式
Meta for Developers → 建立應用程式 → 類型選「企業」。需要一個 Meta 商業帳號(Business Manager),沒有的話建立流程中會一併帶你開。
Meta for Developers ↗ - 加入 WhatsApp 產品並綁定門號
在應用程式的產品清單加入 WhatsApp,依指示綁定一支可接收簡訊/電話驗證的門號(測試門號也可以)。這一步完成才會有 Phone number ID。
Cloud API 入門文件 ↗
已經有帳號的話這一段可以整段跳過。
連接到 Herald
- 取得 Phone number ID
WhatsApp → API Setup 頁面上的 Phone number ID(一串數字,不是電話號碼本身)。 - 取得 Access token
同一頁的臨時 token 只能用 24 小時,正式上線請到「企業設定 → 系統使用者」建立 System User 並產生長期 token。 - 取得 App secret
應用程式設定 → 基本資料 → 應用程式密鑰(App secret)。Herald 用它驗證 webhook 簽章。 - 自訂 Verify token
這串由你自己決定(右邊已幫你產生一組),等一下在 Meta 設定 webhook 時要填一模一樣的值。 - 設定 Webhook 並訂閱欄位
WhatsApp → Configuration → Webhook:Callback URL 填本頁的網址、Verify token 填上一步的值,然後訂閱 messages 欄位。
| 要填的欄位 | 哪裡拿 | |
|---|---|---|
| Phone number ID | API Setup 頁的數字 ID。 | 必填 |
| Access token | 建議用 System User 的長期 token。 | 必填 |
| App secret | 應用程式設定 → 基本資料。 | 必填 |
| Webhook verify token | 自訂字串;Meta 設定 webhook 時要填一樣的。 | 必填 |
| Graph API 版本(可選) | 留空則用 v20.0。 | 選填 |
「測試連線」做什麼:呼叫 Graph API 讀取該門號資料,成功會顯示已驗證名稱與品質評分。
Facebook Messenger
粉絲專頁私訊。24 小時視窗外的推播必須帶訊息標籤(tag)。
還沒有帳號?先準備
- 建立 Facebook 粉絲專頁
客戶是私訊「粉絲專頁」而不是應用程式,所以要先有一個專頁。已經有的話跳過這步。
建立粉絲專頁 ↗ - 建立 Meta App 並加入 Messenger
Meta for Developers → 建立應用程式 → 在產品清單加入 Messenger。
Meta for Developers ↗
已經有帳號的話這一段可以整段跳過。
連接到 Herald
- 連結粉絲專頁並產生 Page access token
Messenger → 設定 → 存取權杖 → 加入粉絲專頁 → 產生權杖。專頁 ID 在專頁的「關於」頁或同一區塊可看到。 - 取得 App secret
應用程式設定 → 基本資料 → 應用程式密鑰,用來驗證 webhook 簽章。 - 自訂 Verify token
右邊已幫你產生一組,Meta 設定 webhook 時要填一樣的值。 - 設定 Webhook 並訂閱欄位
Messenger → 設定 → Webhooks:Callback URL 填本頁網址、Verify token 填上一步的值,訂閱 messages 與 messaging_postbacks。 - 選一個預設訊息標籤
超過 24 小時客服視窗的推播,Meta 要求帶 tag。校園通知一般用 CONFIRMED_EVENT_UPDATE(活動提醒)或 ACCOUNT_UPDATE(帳號狀態)。
| 要填的欄位 | 哪裡拿 | |
|---|---|---|
| 粉絲專頁 ID | 權杖必須屬於這個專頁,否則驗證會失敗。 | 必填 |
| Page access token | Messenger → 設定 → 存取權杖產生。 | 必填 |
| App secret | 應用程式設定 → 基本資料。 | 必填 |
| Webhook verify token | 自訂字串;Meta 設定 webhook 時要填一樣的。 | 必填 |
| 預設訊息標籤(可選) | 超過 24 小時視窗的推播會帶上這個標籤。 | 選填 |
「測試連線」做什麼:呼叫 Graph API 的 /me,成功會顯示專頁名稱,並確認權杖屬於填入的專頁 ID。