Twilio 簡訊教學:從試用限制到確認傳送結果

Twilio簡訊整合指南:分清新版試用與legacy Console,核對台灣SMS限制、中文分段費用及Verify通道費,並用Node.js範例追蹤Message SID與錯誤,說明WhatsApp Sandbox和正式上線差異。

用 AI 摘要這篇文章:

Twilio是讓程式發送簡訊、語音與WhatsApp的通訊平台。開始整合前,先確認試用限制、目的地規則與費用;取得訊息SID後,還要追蹤狀態才能判斷傳送結果。

Twilio 是什麼?先選通知、驗證碼或客服對話

Twilio把簡訊、語音與WhatsApp等通訊能力提供給程式呼叫。產品不必自己建置電信交換設備,但仍要處理收件人同意、帳號權限、目的地規則和失敗通知。VoIP語音通訊是其中一種應用,不能拿來代表整個通訊平台。

訂單通知可先看Programmable Messaging;登入驗證碼則要比較Verify,因為發出一串數字之外,還要檢查使用者輸入的驗證碼。若希望用畫面串接流程,Twilio Studio提供視覺化編輯器,因此Twilio並非只有API、完全沒有圖形介面。

選通道先看客戶實際使用什麼。WhatsApp可以處理對話,但不能憑全球用戶數就判定你的客戶會使用;只有通知需求,也不必同時導入客戶資料平台或客服中心。這篇從一條訊息的試用、發送到查狀態說起。

免費試用先看 Console 版本與收件人限制

2026年9月9日的Twilio試用文件列出:試用期30天,分別提供100則SMS、100則WhatsApp、3,000封Email及75分鐘語音等產品用量,不是共用15至20美元餘額。實際剩餘用量可在Console的Free units tracker查看。文件同時保留legacy Console的舊流程,不能把不同帳號介面的條件混用。

Twilio官方試用文件列出30天試用與各產品免費用量Pin
Twilio官方試用文件列各產品用量,並非共用美元餘額。

新版試用限制包含:SMS和語音限註冊電話號碼所屬國家、最多5個已驗證收件號碼,以及使用Twilio提供的預設內容;不能直接換成自己的訊息本文。試用電話號碼也可能依產品或收件人不同,並非每個帳號都得到同一支可自由選用的號碼。

  1. 開啟Console的試用入口,先確認使用新版Console還是legacy Console,再看對應教學。
  2. 使用自己控制的收件號碼完成驗證,確認目的地與剩餘產品用量。
  3. 依畫面提供的預設訊息測試,記錄結果;若不允許自訂內容,就先停在此處,不套用下方自訂SMS範例。
  4. 要改用正式用途,再檢查升級、發送者與目的地要求;升級不會免除當地登記、內容規則或收件人同意。

台灣 SMS 能發送,不代表可以回覆

Twilio的台灣SMS指南明列不支援雙向SMS。因此,發到+886的訂單通知,不應設計成「回覆1確認收件」後期待Twilio收到回覆。要互動,可改規劃其他支援的通道;若簡訊需要附網址,還必須先確認網址允許條件。

依該指南,訊息開頭應帶公司、組織、品牌或活動名稱,並依頁面提供的流程登記品牌。網址尤其短網址受限制,完整網址需聯繫Twilio登記/加入允許名單;WhatsApp與LINE聊天連結也列為不允許。Sender ID可能被電信路由改寫,不要把程式裡的from值當成收件人一定會看到的名稱。

這些是Twilio對該路由的公開要求,不等於所有法規義務的完整清單。Twilio Messaging Policy也要求適當同意與退出機制;不能因為只發SMS,就認為任何內容都能主動傳送。台灣指南列的行銷禁發時段為12:30–13:30及21:00至次日09:00,排程前應一併檢查,並確認排程器的時區設定。

電話格式使用E.164,例如示意號碼0912-345-678轉成+886912345678;範例號碼不是可供測試的收件人,執行時請換成你控制並已獲准使用的號碼。

用後端程式建立訊息,再追蹤 Message SID

下面是依Twilio認證文件整理的Node.js示範,適用已允許自訂訊息、具備合適發送者與目的地權限的帳號。它不是新版免費試用的通用捷徑。本文沒有對外發送簡訊;本機語法檢查也不能證明你的帳號或路由可用。

在Node.js專案安裝npm install twilio,將程式存成send-sms.cjs。於執行環境設定下列變數:TWILIO_ACCOUNT_SIDTWILIO_API_KEYTWILIO_API_SECRETTWILIO_FROMTWILIO_TOTWILIO_MESSAGE_BODY。最後一項填入符合目的地規則的訊息,發送前先確認品牌與網址條件。

API key SID和secret用來認證;Account SID指定帳號。官方建議應用程式使用API keys,以便獨立撤銷。金鑰要留在後端的環境設定或安全儲存機制,不能放進網頁JavaScript、公開儲存庫或分享的截圖。環境變數檔若含密鑰,也不能提交到Git。

const twilio = require('twilio');
const required = [
  'TWILIO_ACCOUNT_SID', 'TWILIO_API_KEY', 'TWILIO_API_SECRET',
  'TWILIO_FROM', 'TWILIO_TO', 'TWILIO_MESSAGE_BODY'
];
for (const name of required) {
  if (!process.env[name]) throw new Error(`Missing environment variable: ${name}`);
}
const client = twilio(
  process.env.TWILIO_API_KEY,
  process.env.TWILIO_API_SECRET,
  { accountSid: process.env.TWILIO_ACCOUNT_SID }
);
async function main() {
  const message = await client.messages.create({
    body: process.env.TWILIO_MESSAGE_BODY,
    from: process.env.TWILIO_FROM,
    to: process.env.TWILIO_TO
  });
  console.log({ sid: message.sid, status: message.status });
}
main().catch(error => {
  console.error({ status: error.status, code: error.code });
  process.exitCode = 1;
});

確認變數與收件人後,執行node send-sms.cjs會嘗試發送一次訊息,可能產生費用。回傳SID表示已建立訊息資源,不表示簡訊已到手機。請用同一個SID在Console訊息紀錄查看狀態,或依傳送狀態文件設定StatusCallback接收後續變化。

看到的結果可以判斷什麼下一步
有SID,狀態為accepted或queued訊息已建立或排入處理保留SID並查後續狀態,不直接標記客戶已收到
sent已交給後續傳送環節繼續查送達回報;不能當作客戶已閱讀
delivered已收到該路由可提供的送達回報確認回報層級;台灣指南只列SMSC回報
failed或undelivered處理或傳送遇到失敗查看error_code與官方錯誤說明,修正原因後才考慮重試

台灣指南只支援SMSC送達回報,也就是簡訊中心層級的回報,不能等同手機已顯示、使用者已讀。第一次驗證流程時,應同時核對收件手機與SID紀錄;正式產品若需要使用者確認,另設確認動作,別只靠delivered更新重要業務狀態。

沒有收到簡訊時,先查哪一層失敗

  1. 程式顯示Missing environment variable:補齊指出的變數,確認是在同一個執行環境設定;不要把密鑰貼到錯誤報告。
  2. API回傳錯誤:依HTTP狀態與Twilio錯誤碼查認證、帳號、發送者、地區權限及試用限制。不要只看到失敗就一直換號碼重送。
  3. 有SID但收件手機沒有訊息:用SID查error_code、status與目的地指南;台灣另查品牌、網址、Sender ID及時段要求。
  4. 請求逾時、沒有拿到SID:先查Console是否已建立或發出訊息,再決定是否重送;逾時不代表服務端一定沒收到。
  5. 停止測試時:停止本機程式與應用排程,停用測試Webhook或觸發器;不用的API key再撤銷。已發出的SMS無法靠關掉程式收回,電話號碼等資源費也要另外檢查。

收取Webhook時,HTTPS保護傳輸仍不夠。依Twilio安全文件使用SDK驗證X-Twilio-Signature,以實際請求URL與參數進行核對,再處理事件;不要只因端點回200就認為來源可信。WordPress網站安全措施可以保護網站其他部分,但不能取代Twilio簽章驗證。

若通知串接在WordPress,先用WordPress測試環境檢查觸發條件,確保同一筆訂單不會因重複事件發出多則通知。測試站也可能連到真實Twilio帳號,必須使用受控收件人與測試設定,不能把測試站當作不會發訊的保證。

Twilio 費用要算段數、通道費與持續資源

截至2026年9月9日,Twilio台灣SMS價格頁列國際號碼發送US$0.0842/段。這不是每封任意長度簡訊的總價,也不能套到所有亞洲國家。頁面另提醒可能有電信商附加費,終止於Failed狀態的訊息另列US$0.001處理費;請依實際產品、路由與帳單確認費用。

Twilio台灣SMS價格表列國際號碼發送每段0.0842美元,接收欄不支援Pin
台灣SMS價格表按段計費;發送與接收能力應分開查看。

中文簡訊通常會使用UCS-2。依Twilio字元與分段文件,單段上限70個字元;需要串接時通常每段67個字元,因為要留重組資訊。純GSM-7則常見為單段160、串接每段153。表情符號及特殊字元也會影響計數,不要把「中文字數」直接當成全部計費單位,應用Console紀錄或官方分段計算器核對完整訊息。

例如只含一般中文字的71字訊息,按每段67字計算為2段;若適用上述台灣單價,純發送費示意為2×US$0.0842=US$0.1684,尚未計入其他適用費用。實際發送時,品牌名稱、標點與網址都會增加長度,不能只算主要通知文字。

用途主要計費基礎不能漏掉的條件
發送台灣SMS本次頁面列US$0.0842/段段數、適用附加費與Failed處理費;不是跨國通用價
Verify驗證US$0.05/成功驗證+通道費SMS、WhatsApp等通道分開計費;失敗傳送也不能直接推定完全免費
WhatsApp訊息Twilio US$0.005/則,收發皆計另加適用的Meta範本訊息費,依類型、目的地與服務視窗判斷
電話號碼等持續資源依號碼類型及方案即使當月沒有發訊,也可能仍有月租;不能將隨用隨付寫成全服務無月費

Verify價格頁的US$0.05是每次成功驗證的基本費,另加通道費,不是發一次SMS就包到底。自建驗證碼則要自行處理到期、重試、濫用和驗證結果;無法只憑每天幾百或幾千次就判斷哪個一定划算。需要Verify時,流程是建立Service、發起Verification,再提交Verification Check;不要以「已傳送驗證碼」代替驗證通過。

比較其他供應商時,請拿同一個目的地、訊息內容、段數、月量、發送者類型與送達需求詢價。把美國SMS起價拿來比較台灣通知,或把WhatsApp處理費當成全部成本,都會讓預算失真。

WhatsApp 測試環境與正式上線分開看

Twilio WhatsApp Sandbox文件指出:Sandbox只在legacy Console提供,新版試用Console應使用Try out WhatsApp。Sandbox使用共享號碼,只能發給已加入你這個Sandbox的使用者;加入狀態3天後到期,需要重新加入。它用於功能測試,不適合正式服務或負載測試。

Sandbox不是永久免費通道:文件列標準WhatsApp計價,試用帳號另有100則WhatsApp用量。Sandbox發送頻率上限為每3秒1則;商家主動訊息限預先核准的範本,不可自行新增範本。未加入的收件人會遇到63015錯誤。

客戶主動傳來WhatsApp訊息後,會開啟24小時客服視窗,期間可回覆自由格式訊息;視窗外則需用核准範本。依Twilio WhatsApp價格頁,Twilio每則收/發訊息處理費為US$0.005;Meta的範本費另外計算。客服視窗內utility範本及自由格式訊息免Meta費,行銷與驗證範本仍可能收費,不能說「24小時內全部免費」。

要正式上線,依WhatsApp Self Sign-up文件準備已升級的Twilio帳號、Meta Business Portfolio管理權限與符合要求的電話號碼,再完成WABA與發送者登記,依流程處理企業驗證及範本。通過Sandbox測試,不等於正式發送者、範本與全部目的地都已可用。

開始整合前,把成功條件寫清楚

如果只是想知道Twilio能否用在產品,先用Console預設流程測試你控制的收件人,再確認實際目的地限制與預估總價。要開始寫程式,才進到後端金鑰、發送與狀態處理;不要跳過前置條件,直接把範例貼到正式網站。

第一條流程完成的標準應包含:發送內容與目的地合規、SID可追蹤、收件端結果已核對、失敗能停止或排查,以及實際段數與費用可說明。這比只印出一個SID,更接近產品真正需要的通知功能。

Sliven 褚崇名
Sliven 褚崇名

每日分享科技新知、免費資源以及 WordPress、虛擬主機相關主題,任何問題歡迎在科技月球下方留言,或是發送 Email 至 [email protected] 與我聯繫。

文章: 1284

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


Share to...