# 用 iPhone 把簡訊驗證碼送進 CI 與 QA 自動化

> 把簡訊一次性驗證碼從團隊 iPhone 送到你自己的 Webhook，讓 CI 和 QA 執行能自行完成登入。包含做法、設定與限制。

最後更新：2026-10-24
標準 HTML 頁面：https://www.fwrdsms.com/zh-hant/blog/sms-otp-codes-ci-automation-iphone
Published: 2026-10-17

要把簡訊一次性驗證碼送進 CI 或 QA 自動化，就把接收驗證碼的 SIM 卡放進一支團隊 iPhone，讓「捷徑」的「訊息」自動化操作把每則驗證碼簡訊交給 Fwrd，由它以 JSON 格式 POST 到你自己的 HTTPS Webhook。接著你的 CI 工作從該端點讀取最新的驗證碼，並輸入到登入畫面。

**你需要：** 一支執行 iOS 26 或以上版本、裝有接收驗證碼號碼 SIM 卡的 iPhone、「捷徑」App（手機本來就有）、[Fwrd](https://apps.apple.com/app/apple-store/id6759069713?pt=128544281&ct=zht-blog-otp-qa&mt=8)，以及一個 CI 讀得到的公開 HTTPS 網址，例如預備環境的路由或 n8n 工作流程。Fwrd 會拒絕 IP 位址以及 .local 或 .internal 名稱，而且不傳送登入標頭，所以請在網址裡放一段很長的金鑰。

## 為什麼簡訊驗證碼很難自動化？

簡訊驗證碼會卡住 CI，因為它們送到的是手機，而不是你的執行器，除非有東西把每則簡訊送到你的管線讀得到的地方。

撰寫這類檢查的團隊，大多只有自己的手機可以接收驗證碼。裝著 Fwrd 的團隊 iPhone，能讓這支手機變成你的管線可以讀取的來源。

## 什麼時候適合用團隊 iPhone？

當驗證碼必須送到某個特定的電信業者號碼時，它很適合：例如你要登入的第三方服務、已經綁定公司手機號碼的預備帳號，或依號碼類型區別對待的流程。Twilio 的 [Lookup 文件](https://www.twilio.com/docs/lookup/v2-api/line-type-intelligence)（2026 年 10 月 17 日查閱）指出，App 能區分行動號碼和非固定 VoIP 號碼，後者被描述為在線上取得的虛擬號碼。團隊 iPhone 裡的 SIM 卡是真正的電信業者號碼，所以驗證碼會像寄給客戶時一樣送到。

取捨在於：一支手機只有一個號碼，而且必須保持開機並連上網路。下面的段落會談到這兩點。

## 如何把 iPhone 上的簡訊驗證碼傳送到 CI

在 Fwrd 中加入一個只保留驗證碼的 Webhook 轉寄目標，再建立一個把每則驗證碼簡訊交給 Fwrd 的「訊息」自動化操作。端點這一側的做法，[Webhook 指南](https://www.fwrdsms.com/zh-hant/guides/webhook)裡有完整說明。

1. **在 Fwrd 中加入 Webhook。** 打開 Fwrd，點一下 +，選擇 Webhook。把你端點完整的 HTTPS 網址貼到「設定」欄位，點一下「傳送測試訊息」，讓你的端點看到這些欄位，然後點一下 ✓ 儲存。

2. **只保留驗證碼。** 在同一個轉寄目標中，於「轉寄哪些簡訊」底下選擇「只轉寄部分簡訊」，並開啟「看起來像驗證碼」，它會保留含有 4 到 8 位數驗證碼的簡訊。這只算一個條件，所以免費方案也能用。

3. **建立「訊息」自動化操作。** 在 iOS 27 上，打開「捷徑」，依序點一下「資料庫」、「自動化」和 +。如果看到「描述捷徑」，點一下「編輯」。點一下「自動化操作」，再點一下「訊息」，把「寄件人」改成「訊息」，然後輸入 code，或你的服務寄來的簡訊所用的字詞。在 iOS 26 上，打開「自動化」標籤頁，點一下 +，選擇「訊息」，並在「訊息包含」底下輸入它。

4. **讓它無需詢問便自動執行。** 在 iOS 27 上，點一下觸發器旁的箭頭，確認「執行前確認」已關閉。依序點一下 ⓘ 和「隱私權」，確認「鎖定時允許執行」已開啟。在 iOS 26 上，選擇「立即執行」，然後點一下「下一步」和「新增捷徑」。

5. **加入 Fwrd 的動作。** 搜尋「轉寄」，加入「轉寄訊息到所有轉寄目標」。把它的「訊息」設為「捷徑輸入」（在 iOS 26 上，依序選擇「捷徑輸入」和「訊息」）。點一下返回來儲存（iOS 26 上是「完成」）。

6. **在 CI 中讀取驗證碼。** 讓你的端點把每個內文連同收到的時間一起儲存下來。在你的執行請求驗證碼之後，輪詢此後收到的最新簡訊，並用規則運算式取出其中的數字。

7. **這樣就完成了。** 含有驗證碼的新簡訊現在會自動送到你的端點，不論 iPhone 是否鎖定。

### 端點會收到什麼？

一個 POST 請求，JSON 內文裡是原封不動的簡訊文字，同時放在 `content` 和 `text` 中。其中沒有時間戳記，所以請在你這一側記錄時間。

```json
{
  "content": "Your verification code is 482913",
  "text": "Your verification code is 482913"
}
```

同一則簡訊的每次嘗試都帶有相同的 `Idempotency-Key` 標頭，所以你可以丟棄重複的請求。如果傳送逾時、遇到 429 或 5xx，或是連線中斷，Fwrd 最多會再試兩次。15 秒內回傳的任何 2xx 回應都算已送達，重新導向會被拒絕。在 Fwrd 的「設定」中開啟「附上寄件人」，並在 Fwrd 的動作上選擇「寄件人」，內文還會多出一個 `sender` 欄位，當多個服務寄簡訊到同一個號碼時很有用。

## 這個做法做不到什麼

- **一個號碼一次只能服務一次執行。** 平行的工作在同一個號碼上請求驗證碼，可能讀到對方的驗證碼，所以請讓登入步驟排隊，或把每個驗證碼與請求它的那次執行對應起來。
- **免費方案每月涵蓋 15 則驗證碼。** 超過之後，驗證碼要到下個月才會繼續轉寄，忙碌的管線很快就會用完；Fwrd Pro 可取消這個限制，每月 $4.99 或每年 $29.99，均為美國售價，以美元計。
- **它只能接收。** Fwrd 無法替你的 CI 從 iPhone 傳送簡訊。
- **手機必須保持開機並連上網路。** 重新啟動後，轉寄要等有人解鎖一次才會繼續；連續三天沒有解鎖的 iPhone 會自行重新啟動。請讓它保持充電，並放在有人拿得到的地方。
- **Fwrd 的動作會送到每個已啟用的轉寄目標。** 如果同一支手機還要轉寄到別處，請改用「轉寄訊息到轉寄目標」，再選擇這個 Webhook。
- **只處理新簡訊。** 自動化操作建立之前收到的驗證碼不會被傳送。

如果你要的是給人看的驗證碼，而不是給管線用的，[在 Slack 中與團隊共用 2FA 驗證碼](https://www.fwrdsms.com/zh-hant/blog/share-2fa-codes-with-team-slack)介紹了那種設定。

## 關於自動化中的簡訊驗證碼的問題

### Selenium 或 Playwright 能直接讀取簡訊驗證碼嗎？

不能。瀏覽器自動化看不到手機裡的訊息。必須先有東西把簡訊從手機上移出來，例如由「捷徑」自動化操作加上 Fwrd，把它傳送到你的指令碼輪詢的 Webhook。

### 驗證碼會經過 Fwrd 的伺服器嗎？

不會。Fwrd 沒有帳號，也沒有自己的伺服器；每則簡訊從 iPhone 直接傳送到你的 HTTPS 端點，網址儲存在 iPhone 的鑰匙圈中。

### 它支援簡碼寄件人嗎？

支援。自動化操作比對的是簡訊的內容，而不是寄件人，所以來自不在你聯絡人裡的簡碼的驗證碼，也能符合 code 這樣的字詞。

### 我可以用 n8n 工作流程作為端點嗎？

可以。加入一個設為 POST 的 Webhook 節點，使用它的 Production URL，並發布工作流程，否則它不會回應。[把 iPhone 簡訊傳送到 Zapier、Make 或 n8n](https://www.fwrdsms.com/zh-hant/iphone-sms-to-zapier-make-n8n) 裡有具體步驟。

## 繼續閱讀

- [把 iPhone 簡訊轉寄到 Webhook](https://www.fwrdsms.com/zh-hant/iphone-sms-to-webhook)
- [iPhone 有簡訊 API 嗎？在 iOS 上取得簡訊](https://www.fwrdsms.com/zh-hant/blog/iphone-sms-api)
