Day 25:優惠券設定與 Coupon Message 實作
3.2k 字,約 3 分鐘
2025 iThome 鐵人賽:Line Bot × NestJS:30 天開發日記。 原文發表於 iThome,也可以在下方留言。
文章目錄
前言
LINE Official Account 的「優惠券」是提升顧客互動與忠誠度的重要功能。透過獎勵機制,不僅能吸引新客,更能有效促進回購。
本篇分為兩部分:前半部介紹優惠券後台設定與三種優惠券發放類型(No conditions applied、Lottery、Friend referral),後半部實作如何在 NestJS 中使用 Coupon Message 的方式發送優惠券給用戶。
本日程式碼的範例連結
優惠卷(Coupon)設定說明
優惠卷官方說明
登入 LINE Official Account 後台後,可以在左側導航欄的 Outreach 區塊中找到 Coupons 功能選項。
點擊進入優惠券管理頁面後,系統會將優惠券按照狀態分為三個類別:
- 即將生效/有效:正在使用中的優惠券
- 過期/已結束:已失效或過期的優惠券
- 草稿:尚未發布的草稿優惠券
僅有草稿狀態的優惠券才可以「編輯」、「刪除」。
建立新的優惠券,只需點擊頁面上的 「Create new」 按鈕即可開始設定。
優惠券的發放條件主要可分為以下三種類型:
- No conditions applied:任何用戶都能直接領取,適合一般性促銷活動
- Lottery:僅限通過抽獎機制選中的用戶才能領取,適用於限量優惠或增加互動趣味性的活動
- Friend referral:採用雙向獎勵機制,推薦者與被推薦者雙方都能獲得優惠券,有效促進用戶推廣
本篇將以
No conditions applied(無條件領取)為主要示範。
No conditions applied 無條件優惠券
優惠卷可以設置以下的資訊:
- 標題:優惠券名稱
- 起迄時間和時區:有效期間與適用時區
- 照片:優惠券封面圖片
- 使用說明:兌換方式、使用限制及注意事項。系統會自動帶入預設條款,包含結帳時需出示畫面、僅限使用一次,以及效期可能變更等說明
- 是否刊登至LY服務:可選擇是否顯示於 LINE 主頁等相關服務
- 使用次數:可選擇單次或不限次數使用
- 折扣類型:固定金額、百分比或免費贈品等折扣方式
- 使用條件:設定最低消費門檻或其他限制
優惠卷儲存之後可以選擇分享的方式:
- 設定成招呼語:新好友加入官方帳號時自動發送優惠券
- 以訊息的方式傳送給用戶:透過廣播功能指定特定族群或全部用戶接收優惠券
- 公布在 LINE VOOM:公開分享到動態消息區域
- 當作關鍵字的回覆:設定多組關鍵字,用戶輸入符合內容時自動回覆優惠券
分享追蹤設定
透過設定 URL 參數,可在不同社群平台(如 Facebook、Instagram、X 等)分享優惠券,並於後台 Insights 追蹤各管道的領取與使用成效。
Lottery 抽獎優惠券
基本設定項目與
No conditions applied相同,以下僅說明其差異之處。
抽獎流程
設定時,需要額外配置以下兩個參數:
- 抽獎機率:設定中獎的百分比機率
- 中獎者人數:限制可中獎的總人數上限
抽獎規則
- 只有中獎者才能獲得優惠券
- 每位用戶僅能參與一次抽獎,無論中獎與否都不可重複抽取
Friend referral 好友推薦優惠券
基本設定項目與
No conditions applied相同,以下僅說明其差異之處。
抽獎流程
運作流程:
- 官方帳號設定:建立推薦優惠券並發布推薦頁面
- 推薦者分享:現有用戶分享推薦頁面給潛在用戶
- 被推薦者加入:新用戶透過推薦頁面加入官方帳號並獲得優惠券
- 推薦者獲得獎勵:系統自動通知推薦者並發放優惠券
Friend referral 優惠券 = 推薦頁面 (Referral page) + 優惠券
1. 推薦頁面:
現有用戶分享給新用戶,新用戶加入後也能繼續分享,形成連鎖推薦效應
可設定項目:
- Top image(頂部圖片):選擇使用預設圖片或上傳自訂圖片
- Referral period(推薦期間):設定活動起始與結束日期時間,並指定時區
- Important(注意事項):填寫優惠券使用條款與聲明
2. 優惠券
透過
Number available可設定每位推薦者可獲得的優惠券數量上限
分享方式只存在兩種方式:
- Set as rich menu:將推薦頁面設定為圖文選單,方便用戶隨時存取分享
- Send as message:透過訊息推播方式將推薦頁面廣播給指定用戶
系統僅提供單一推薦 URL,無法針對不同社群平台生成專屬追蹤連結
Coupon Message 訊息類型
本系列文章原先使用的
@line/bot-sdk版本為 10.1.0,但該版本尚未包含 Coupon Message 功能。因此需要升級至 10.3.0 版本才能使用。
在 LINE Bot 的訊息系統中,除了我們先前介紹的:
- 六種基礎訊息(Text、Image、Video、Audio、Location、Sticker)
- Template Message
- ImageMap Message
- Flex Message
還有一種專門用於發送優惠券的訊息類型:Coupon Message。這讓開發者能在對話流程中靈活發送優惠券,實現更多元的行銷應用場景。
參數說明
- couponId(必填):優惠券的唯一識別碼,可從建立優惠券的 API 回應中取得,或透過優惠券列表 API 查詢
- deliveryTag(選填):優惠券發送路徑的標籤名稱,用於在後台 Insights 追蹤不同發送情境的成效分析
line-message/types/coupon-message
import { MessageCommon } from './message-common';
import { CouponMessage } from '@line/bot-sdk/lib/messaging-api/model/models';
export type CouponMessageReq = MessageCommon & Omit<CouponMessage, 'type'>;
實作流程
在使用 Coupon Message 前,需要先取得優惠券的 couponId,有以下兩種方式:
- 透過 API 建立優惠券:建立時會在回應中直接返回
couponId,可參考官方 API 說明 - 透過 LINE OA 後台建立:先在後台建立優惠券,再使用「查詢優惠券列表 API」取得
couponId,可參考官方 API 說明
本範例採用第二種方式,透過查詢優惠券列表 API 取得先前在後台建立的優惠券編號:
line-message/line-message.service.ts
createCouponMessage(couponMessageReq: CouponMessageReq): CouponMessage {
const { couponId, deliveryTag, sender, quickReplyItems } = couponMessageReq;
const couponMessage: CouponMessage = {
type: 'coupon',
couponId,
...(deliveryTag && { deliveryTag }), // 處理 deliveryTag 可選參數
...this.buildCommonMessageProps(sender, quickReplyItems),
};
return couponMessage;
}
成果展現
使用一開始創建的咖啡優惠券,我有換咖啡照片 ヽ(●´∀`●)ノ
如何查看已領取的優惠卷
Step 1:進入 LINE 服務選單
在 LINE 首頁點選「服務」區塊的「顯示全部」按鈕,顯示完整的服務列表。
Step 2:選擇「官方帳號」服務
在服務列表中找到並點選「官方帳號」項目。
Step 3:查看我的優惠券
進入官方帳號頁面後,點選「我的優惠券」即可查看所有已領取的優惠券。
本日結語
今天和大家分享生活中隨處可見的優惠券功能。身為容易被優惠券吸引而消費的人,這次我完整地探索了一遍相關機制,正好可以結合 Coupon Message 來說明實際應用。
我自己設想的使用情境是:當用戶登入會員後,系統自動發送一張「會員禮優惠券」作為歡迎禮。雖然後台本身提供關鍵字觸發優惠券的功能,但透過 Coupon Message,我們能更靈活地根據不同場景客製化發送優惠券,讓行銷策略可以更加精準有效。
留言
留言使用 GitHub 帳號登入(Giscus),留言會存在 GitHub Discussions。