Logo FwrdFwrdTải về từ App Store

Đưa mã OTP SMS vào CI và QA bằng một chiếc iPhone

Bởi Fwrd · · Cập nhật

Để đưa mã OTP gửi qua SMS vào CI hoặc QA tự động, hãy đặt chiếc SIM nhận mã vào một iPhone của nhóm, và để một tự động hóa Tin nhắn trong Phím tắt giao từng tin nhắn mã cho Fwrd, Fwrd sẽ đăng nó lên webhook HTTPS của riêng bạn dưới dạng JSON. Sau đó, job CI của bạn đọc mã mới nhất từ endpoint đó và nhập vào màn hình đăng nhập.

Bạn cần: một iPhone chạy iOS 26 trở lên có chiếc SIM mà số của nó nhận mã, ứng dụng Phím tắt (đã có sẵn trên điện thoại), Fwrd, và một địa chỉ HTTPS công khai mà CI của bạn đọc được, chẳng hạn một route staging hoặc một quy trình n8n. Fwrd từ chối địa chỉ IP và các tên .local hoặc .internal, và không gửi header đăng nhập, nên hãy đặt một chuỗi bí mật dài trong địa chỉ.

Vì sao mã OTP qua SMS khó tự động hóa?

Mã SMS làm CI bị kẹt vì chúng đến một chiếc điện thoại, không đến runner của bạn, cho đến khi có thứ gì đó đưa từng tin nhắn đến nơi pipeline của bạn đọc được.

Hầu hết các nhóm viết các bước đăng nhập tự động này chỉ có điện thoại của chính họ để nhận mã. Một chiếc iPhone của nhóm cùng Fwrd biến chiếc điện thoại đó thành thứ mà pipeline của bạn đọc được.

Khi nào một iPhone của nhóm phù hợp?

Nó phù hợp khi mã phải đến một số cụ thể của nhà mạng: một dịch vụ bên thứ ba mà bạn đăng nhập, một tài khoản staging đã gắn với điện thoại của công ty, hoặc một luồng xử lý khác nhau theo loại số. Tài liệu Lookup của Twilio (thông tin tính đến ngày 17 tháng 10 năm 2026) cho thấy các ứng dụng có thể phân biệt số di động với số “non-fixed VoIP”, mà họ mô tả là số ảo lấy được trên mạng. Một chiếc SIM trong iPhone của nhóm là số của nhà mạng thực sự, nên mã đến như khi nó đến với một khách hàng.

Đổi lại, một chiếc điện thoại nghĩa là một số, và nó phải luôn bật và có kết nối internet. Các phần bên dưới nói về cả hai.

Cách gửi mã SMS từ iPhone đến CI của bạn

Thêm một nơi nhận Webhook trong Fwrd chỉ giữ lại mã, rồi một tự động hóa Tin nhắn giao từng tin nhắn mã cho Fwrd. Hướng dẫn webhook nói đầy đủ về phía endpoint.

  1. Thêm webhook trong Fwrd. Mở Fwrd, chạm vào +, rồi chọn Webhook. Dán toàn bộ địa chỉ HTTPS của endpoint vào trường “Configuration”, chạm vào “Send Test Message” để endpoint của bạn thấy các trường, rồi lưu bằng dấu tích.

  2. Chỉ giữ mã. Trong cùng nơi nhận này, chọn “Only Some Texts” trong “Which Texts” và bật “Looks Like a Code”, mục giữ lại các tin nhắn có mã từ 4 đến 8 chữ số. Đó là một điều kiện, nên nó dùng được ở gói miễn phí.

  3. Tạo tự động hóa Tin nhắn. Trên iOS 27, mở Phím tắt, chạm vào “Thư viện”, rồi “Tự động hóa”, rồi +. Nếu thấy “Mô tả phím tắt”, chạm vào “Sửa”. Chạm vào “Tự động hóa”, rồi “Tin nhắn”, đổi “Người gửi” thành “Tin nhắn”, và nhập “mã” hoặc “OTP”, hay từ mà các tin nhắn của dịch vụ bạn dùng. Trên iOS 26, mở tab “Tự động hóa”, chạm vào +, chọn “Tin nhắn”, và nhập từ đó trong “Tin nhắn chứa”.

  4. Cho nó chạy mà không hỏi. Trên iOS 27, chạm vào mũi tên bên cạnh điều kiện kích hoạt và xem “Xác nhận trước khi chạy” đã tắt chưa. Trong ⓘ, rồi “Quyền riêng tư”, xem “Cho phép chạy khi bị khóa” đã bật chưa. Trên iOS 26, chọn “Chạy ngay lập tức”, rồi chạm vào “Tiếp” và “Tạo phím tắt mới”.

  5. Thêm tác vụ của Fwrd. Tìm “Forward” và thêm “Forward Message to All Destinations”. Đặt “Message” của nó thành “Đầu vào phím tắt”. Chạm vào nút quay lại để lưu (trên iOS 26 là “Xong”).

  6. Đọc mã trong CI. Cho endpoint của bạn lưu từng nội dung kèm giờ nó đến. Sau khi lần chạy của bạn yêu cầu một mã, hãy poll liên tục để lấy tin nhắn mới nhất nhận được kể từ lúc đó và lấy các chữ số ra bằng một biểu thức chính quy.

  7. Xong. Từ giờ, tin nhắn mã mới sẽ tự động đến endpoint của bạn, dù iPhone đang khóa hay không.

Điểm cuối nhận được gì?

Một yêu cầu POST với nội dung JSON chứa tin nhắn đúng như lúc nó đến, trong cả content và text. Không có dấu thời gian, nên hãy ghi giờ ở phía bạn.

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

Mọi lần gửi cho cùng một tin nhắn đều mang cùng một header Idempotency-Key, nên bạn có thể bỏ các lần lặp. Nếu một lần gửi hết thời gian chờ, gặp lỗi 429 hoặc 5xx, hoặc mất kết nối, Fwrd tự gửi lại, tối đa hai lần. Mọi phản hồi 2xx trong vòng 15 giây đều được tính là đã gửi đi, và các chuyển hướng bị từ chối. Bật “Include Who Sent It” trong “Settings” của Fwrd và chọn “Sender” trong tác vụ của Fwrd, nội dung sẽ có thêm trường sender, tiện khi nhiều dịch vụ cùng nhắn đến một số.

Những điều cách thiết lập này không làm được

  • Một số chỉ phục vụ một lần chạy mỗi lúc. Các job chạy song song cùng xin mã trên một số có thể đọc nhầm mã của nhau, nên hãy xếp hàng bước đăng nhập hoặc ghép từng mã với lần chạy đã xin nó.
  • Gói miễn phí có 15 mã mỗi tháng. Sau đó, mã ngừng đến cho tới tháng sau, và các pipeline bận sẽ chạm mức này rất nhanh; Fwrd Pro bỏ giới hạn này.
  • Chỉ nhận. Fwrd không gửi được một tin nhắn từ iPhone cho CI của bạn.
  • Điện thoại phải luôn bật và có kết nối internet. Sau khi khởi động lại, việc chuyển tiếp chờ đến khi có người mở khóa một lần, và iPhone không được mở khóa trong 3 ngày cũng tự khởi động lại. Hãy giữ nó được sạc ở nơi có người với tới được.
  • Tác vụ của Fwrd đến mọi nơi nhận đang bật. Nếu chính chiếc điện thoại đó còn chuyển tiếp đến nơi khác, hãy dùng “Forward Message to Destination” và chọn webhook.
  • Chỉ tin nhắn mới. Những mã đến trước khi có tự động hóa sẽ không được gửi.

Với những người cần mã chứ không cần pipeline, chia sẻ mã 2FA với nhóm của bạn trên Slack nói về cách thiết lập đó.

Câu hỏi về mã SMS trong tự động hóa

Selenium hay Playwright có đọc thẳng được mã SMS không?

Không. Tự động hóa trình duyệt không thấy được tin nhắn của một chiếc điện thoại. Phải có thứ gì đó đưa tin nhắn ra khỏi điện thoại trước, chẳng hạn một tự động hóa Phím tắt với Fwrd đăng nó lên một webhook mà tập lệnh của bạn poll liên tục.

Mã có đi qua máy chủ của Fwrd không?

Không. Fwrd không có tài khoản và không có máy chủ riêng; mỗi tin nhắn đi thẳng từ iPhone đến endpoint HTTPS của bạn, và địa chỉ được giữ trong Chuỗi khóa của iPhone.

Có dùng được với người gửi là đầu số ngắn không?

Có. Tự động hóa khớp theo nội dung tin nhắn, không theo người gửi, nên mã từ các đầu số ngắn không có trong Danh bạ của bạn vẫn khớp với một từ như “mã”.

Tôi có thể dùng một quy trình n8n làm endpoint không?

Có. Thêm một node Webhook đặt là POST, dùng URL production của nó, và publish quy trình, nếu không nó sẽ không trả lời. Gửi tin nhắn iPhone đến Zapier, Make hoặc n8n có các bước.

Muốn mã SMS nằm ở nơi CI của bạn đọc được?

Fwrd đăng từng tin nhắn phù hợp từ một chiếc iPhone của nhóm lên webhook HTTPS của riêng bạn dưới dạng JSON, không cần tài khoản và không có máy chủ Fwrd ở giữa. Bắt đầu với 15 lượt chuyển tiếp miễn phí mỗi tháng.

Miễn phí 15 lượt chuyển tiếp mỗi tháng. Pro bỏ giới hạn số lượt chuyển tiếp và bộ lọc, thêm danh sách “Never Forward”, và gói theo năm có thời gian dùng thử miễn phí cho người đủ điều kiện.

Tải về từ App Store

iPhone · iOS 26 trở lên