---
title: "ให้ AI agent รอรหัสยืนยันอีเมล แล้วทำงานต่ออย่างปลอดภัย"
description: "ออกแบบจุดหยุดรอ OTP ในกล่องทดสอบของคุณด้วย Mailera MCP พร้อมตรวจคำขอ จำกัดสิทธิ์อ่าน และหยุดเมื่อรหัสกำกวมหรือเซสชันหมดอายุ"
url: https://mailera.app/th/blog/agent-wait-email-otp
published: 2026-10-25
updated: 2026-10-25
---

# ให้ AI agent รอรหัสยืนยันอีเมล แล้วทำงานต่ออย่างปลอดภัย

แยกการอ่าน OTP ออกจากการควบคุมเบราว์เซอร์ ให้แอปเก็บบริบทคำขอ และอนุญาตให้เอเจนต์ทำงานต่อเฉพาะเมื่อจับคู่รหัสได้ชัดเจน

## ต้องเตรียมอะไรบ้างก่อนให้เอเจนต์อ่านอีเมล?

ก่อนให้เอเจนต์กดขอรหัส ให้แอปหยุดงานถัดไปไว้ก่อน แล้วรอจนกว่าจะได้รหัสที่ผ่านเงื่อนไขของงานนั้นจริง ๆ ไม่ใช่แค่สั่งให้เบราว์เซอร์รอจนช่องกรอกรหัสปรากฏ เพราะช่องพร้อมใช้งานกับอีเมลมาถึงเป็นคนละเงื่อนไขกัน

ใช้เฉพาะบัญชีและกล่องอีเมลทดสอบที่คุณเป็นเจ้าของหรือได้รับอนุญาตให้ใช้ เริ่มจากกล่องเดิมที่เชื่อมต่อ Mailera แล้ว และระบุรหัสกล่องเป้าหมายในแอปให้แน่นอน ไม่ให้เอเจนต์เลือกจากชื่อที่ดูคล้ายกันเอง หากยังไม่ได้เตรียมกล่อง อ่าน[พื้นฐานการอ่าน OTP จากกล่องของคุณ](https://mailera.app/th/blog/email-otp-api) ก่อน ส่วนการเตรียมข้อมูลเข้าสู่ระบบแยกไว้ใน[คู่มือรหัสผ่านสำหรับแอปสำหรับกล่องของเอเจนต์](https://mailera.app/th/blog/email-app-passwords)

ตั้งค่าคีย์สำหรับเส้นทางอ่าน OTP โดยเฉพาะ:

1. เปิด **การตั้งค่า** ไปที่แท็บ API key แล้วเลือก **สร้าง API key**
2. ตั้ง **ชื่อที่สื่อความหมาย** และเลือก **ขอบเขตกล่องจดหมาย** เป็นกลุ่มที่ใช้ทดสอบ ขอบเขตนี้เลือกได้ทีละกลุ่ม (บัญชี Admin เลือกได้ทุกกลุ่ม) จึงควรแยกกล่องทดสอบออกจากกลุ่มที่มีอีเมลงานอื่น
3. เลือกเฉพาะสิทธิ์ “อ่าน (Read)” ซึ่งตรงกับ scope `read` ไม่เพิ่มสิทธิ์ส่งอีเมลให้ขั้นตอนนี้
4. เก็บคีย์ไว้ฝั่งบริการเมื่อหน้าจอแสดง **สร้าง API key แล้ว — คัดลอกตอนนี้** เพราะคีย์จะแสดงเพียงครั้งเดียว
5. ใช้ **คัดลอกการกำหนดค่า MCP** สำหรับ Claude, Cursor หรือ VS Code ตามไคลเอนต์ที่คุณใช้

![การตั้งค่าคีย์ API สำหรับอ่าน OTP โดยจำกัดกลุ่มทดสอบและให้เฉพาะสิทธิ์อ่าน](https://mailera.app/media/58cd941b23f4b3e3/ai-agent-otp-read-key-th-1200.jpg)
_จำกัดคีย์ไว้ที่กลุ่มทดสอบและสิทธิ์อ่าน โดยไม่เพิ่มสิทธิ์ส่ง ย้าย หรือซิงก์อีเมล_

[การเชื่อมต่อ MCP ของ Mailera](https://mailera.app/th/mcp) ใช้ endpoint `https://mailera.app/api/public/v1/mcp` และมีเครื่องมือ `get_latest_otp` ที่ใช้สิทธิ์ `read` หากแอปเรียก HTTP เอง ทางเลือก REST คือ `GET /mailboxes/{id}/otp` ดูภาพรวมการเชื่อมต่อได้ที่[หน้าสำหรับนักพัฒนา](https://mailera.app/th/developers)

## จะกำหนดจุดหยุดรอและเงื่อนไขทำงานต่ออย่างไร?

ให้แอปเก็บสถานะของงานไว้เอง ไม่ฝากทุกอย่างไว้ในประวัติสนทนาของเอเจนต์ ก่อนกดขอรหัส ให้เก็บกล่องเป้าหมาย เวลาเริ่มคำขอ เซสชันเบราว์เซอร์ และบริบทของงาน เช่น เว็บไซต์ บัญชีทดสอบ และการกระทำที่กำลังยืนยัน

กำหนดเวลาสิ้นสุดการรอ ช่วงเว้นระหว่างการตรวจ และจำนวนครั้งที่อนุญาตให้ลองใหม่เป็นค่าของแอปด้วย อย่าให้การเรียกเครื่องมือสำเร็จแต่ละครั้งต่ออายุการรอออกไปเรื่อย ๆ จนงานไม่มีวันจบ

| สถานะของแอป | สิ่งที่ต้องทำ | เงื่อนไขออกจากสถานะ |
| --- | --- | --- |
| เริ่มคำขอยืนยัน | เก็บบริบทก่อนกดขอรหัส | ขอรหัสแล้วและยังอยู่ในเซสชันเดิม |
| รออีเมล | อ่านจากกล่องเป้าหมายตามช่วงที่กำหนด | พบข้อมูลให้ตรวจ หรือครบเวลารอ |
| ตรวจรหัส | เทียบข้อความกับคำขอปัจจุบัน | จับคู่ได้ชัดเจน หรือหยุดเมื่อกำกวม |
| กรอกรหัส | ส่งเฉพาะรหัสไปยังช่องที่กำหนด | กรอกและส่งแบบฟอร์มแล้ว |
| ตรวจผล | อ่านผลยืนยันบนเว็บไซต์ | เว็บไซต์แสดงความสำเร็จ หรือพบข้อผิดพลาด |
| สำเร็จหรือรอคนตรวจ | เดินหน้าต่อเฉพาะกรณีสำเร็จ | งานจบ หรือมีคนตัดสินใจขั้นต่อไป |

![ลำดับหยุดรอ OTP ตรวจคำขอ แล้วกรอกและตรวจผล พร้อมเส้นทางส่งต่อให้คนตรวจ](https://mailera.app/media/e9c67bbb4402309b/ai-agent-otp-wait-flow-th-1200.jpg)
_การอ่านได้เป็นเพียงขั้นตอนหนึ่ง แอปต้องอนุญาตให้ทำงานต่อหลังตรวจความสัมพันธ์กับคำขอแล้ว_

แยก timeout ของการเรียกเครื่องมือออกจากเวลารออีเมลทั้งหมด การเรียกครั้งหนึ่งอาจหยุดเพราะใช้เวลานานเกินไป แต่แอปยังต้องตัดสินใจว่าจะลองใหม่ภายในกรอบเดิมหรือจบงาน ไม่ควรปล่อยให้เอเจนต์ตัดสินใจเพิ่มเวลารอเอง

หากใช้ Browser Use คุณสามารถวางตรรกะอ่านและตรวจรหัสไว้ใน custom tool ได้ [เอกสารทางการของ Browser Use](https://github.com/browser-use/browser-use) อธิบายการลงทะเบียนฟังก์ชันผ่าน `Tools` แล้วส่งให้ agent วิธีนี้ช่วยแยกจุดตัดสินใจออกจากคำสั่งนำทางบนหน้าเว็บ แต่แอปยังต้องดูแลสถานะการรอและเซสชันเอง

## ขั้นตอนอ่าน OTP และให้เบราว์เซอร์ทำงานต่อ

### 1. ตรวจหน้ายืนยันและบันทึกคำขอ

ตรวจว่าเบราว์เซอร์อยู่บนเว็บไซต์และบัญชีทดสอบที่อนุญาต ก่อนกดขอรหัส ให้บันทึกเวลาเริ่มคำขอและผูกงานนี้กับกล่องเป้าหมาย หากหน้าเว็บแสดงบริบทของการยืนยัน ให้เก็บส่วนที่จำเป็นไว้ใช้เทียบภายหลังด้วย

จากนั้นหยุดการกระทำถัดไปของเอเจนต์ ไม่ให้กดขอรหัสซ้ำ เปลี่ยนบัญชี หรือเริ่มงานยืนยันอีกงานระหว่างรอ การคงหน้าเว็บไว้เพียงอย่างเดียวไม่พอ แอปต้องรู้ด้วยว่างานที่กำลังรอคือคำขอใด

### 2. เรียกเครื่องมือโดยใช้สคีมาของเครื่องมือนั้น

สำหรับ MCP ให้ไคลเอนต์ค้นหาเครื่องมือด้วย `tools/list` แล้วอ่าน `inputSchema` ของ `get_latest_otp` ก่อนสร้างคำขอ เรียกเครื่องมือผ่าน `tools/call` โดยใช้พารามิเตอร์ตามสคีมาที่ได้รับ ไม่คัดลอกชื่อพารามิเตอร์ REST ไปใช้กับ MCP โดยเดาเอา

[ข้อกำหนดเครื่องมือ MCP](https://modelcontextprotocol.io/specification/2025-06-18/server/tools) อธิบายขั้นตอนเหล่านี้ รวมทั้งแนะนำให้กำหนด timeout ของการเรียกเครื่องมือ และตรวจผลลัพธ์ก่อนส่งต่อให้ LLM

ฝั่ง REST ใช้ `GET /mailboxes/{id}/otp` เพื่ออ่าน OTP ล่าสุด โดยมีพารามิเตอร์ `id`, `from`, `subject` และ `since_minutes` การกรองผู้ส่ง หัวเรื่อง และช่วงเวลาช่วยลดข้อความที่ไม่เกี่ยวข้อง แต่ยังไม่ควรใช้ผลลัพธ์นั้นเป็นคำสั่งให้กรอกรหัสทันที รายละเอียด endpoint อยู่ใน[เอกสาร API ของ Mailera](https://mailera.app/th/docs)

### 3. ตรวจความสัมพันธ์กับคำขอ ไม่ใช่แค่มีรหัส

ให้ถือว่ารหัสที่อ่านได้เป็นเพียงรหัสที่รอตรวจ จนกว่าแอปจะเทียบกับบริบทของงานแล้ว เงื่อนไขควรครอบคลุมกล่องเป้าหมาย ผู้รับ ผู้ส่ง หัวเรื่อง เวลาได้รับข้อความ และข้อมูลอ้างอิงของคำขอถ้ามี

คุณอ่านรายการข้อความด้วย `GET /mailboxes/{id}/messages` เพื่อดูข้อมูลประกอบได้ ตัวอย่างนี้ใช้ตัวแปรสภาพแวดล้อม `$MAILERA_API_KEY` และ `$MAILBOX_ID` ซึ่งต้องตั้งเป็นค่าของกล่องทดสอบก่อนเรียก เปลี่ยนค่า `from` เป็นผู้ส่งที่คาดไว้ และค่า `since` เป็นเวลาเริ่มคำขอปัจจุบันแทนค่าตัวอย่าง:

```bash
curl --get "https://mailera.app/api/public/v1/mailboxes/$MAILBOX_ID/messages" \
  --header "Authorization: Bearer $MAILERA_API_KEY" \
  --data-urlencode "folder=inbox" \
  --data-urlencode "from=noreply@example.com" \
  --data-urlencode "since=2025-01-01T00:00:00Z"
```

รายการข้อความมี `mailbox_id`, `from.address`, `to`, `subject` และ `received_at` ให้ใช้ตรวจประกอบ หากต้องอ่านเนื้อหาเฉพาะฉบับ ใช้ `GET /mailboxes/{id}/messages/{msgId}` ซึ่งใช้สิทธิ์ `read` เช่นกัน และอ่านเฉพาะส่วนที่จำเป็น

**เวลาใกล้กันและผู้ส่งตรงกันยังไม่พอเสมอไป** หากมีหลายคำขอที่เข้ากับเงื่อนไขเดียวกัน อย่าเลือกข้อความล่าสุดเพียงเพราะอยู่บนสุด แม้พบข้อความเดียวในผลลัพธ์ ก็ยังต้องตรวจว่ามีข้อมูลเชื่อมโยงกับงานปัจจุบันพอหรือไม่ ถ้าข้อมูลไม่พอ ให้หยุดเพื่อให้คนตรวจแทนการเดา

### 4. กรอกรหัสแล้วตรวจผลบนเว็บไซต์

เมื่อผ่านเงื่อนไขแล้ว ตรวจอีกครั้งว่าเบราว์เซอร์ยังอยู่ในคำขอและเซสชันเดิม จากนั้นส่งเฉพาะรหัสไปยังช่องยืนยันที่แอปกำหนด ไม่ส่งเนื้อหาอีเมลทั้งฉบับให้เอเจนต์ตีความว่าจะทำอะไรต่อ

หลังกรอกและส่งแบบฟอร์ม ต้องตรวจผลบนหน้าเว็บตามเงื่อนไขความสำเร็จของงาน การกรอกช่องได้หรือกดปุ่มสำเร็จไม่ใช่จุดจบของการยืนยัน หากหน้าเว็บปฏิเสธรหัส อย่าเปลี่ยนไปลองรหัสอื่นโดยอัตโนมัติ

### 5. ตรวจซ้ำได้ แต่ต้องมีจุดสิ้นสุด

ถ้ายังไม่มีรหัสที่ผ่านเงื่อนไข ให้เว้นช่วงก่อนตรวจใหม่ และใช้เวลาสิ้นสุดเดิมของคำขอ เมื่อครบเวลาหรือเซสชันใช้ต่อไม่ได้ ให้หยุดงานพร้อมเหตุผลที่ชัดเจน เช่น รอเกินกำหนดหรือจับคู่ข้อความไม่ได้

## ข้อผิดพลาดที่พบบ่อยควรจัดการอย่างไร?

แยกปัญหาอีเมลออกจากปัญหาเบราว์เซอร์ก่อนแก้ การกดขอรหัสใหม่ทุกครั้งที่ยังอ่านไม่พบจะทำให้บริบทของงานซับซ้อนขึ้น โดยไม่ได้ช่วยบอกว่าปัญหาอยู่ตรงไหน

| อาการ | จุดที่ควรตรวจ | การตัดสินใจของแอป |
| --- | --- | --- |
| ยังไม่มีรหัสให้ใช้ | สถานะกล่องด้วย `get_mailbox_status` และตำแหน่งข้อความด้วย `GET /mailboxes/{id}/placement` | ตรวจซ้ำภายในเวลาที่กำหนด แล้วหยุดเมื่อครบเวลา |
| มีข้อความที่อาจตรงมากกว่าหนึ่งฉบับ | เวลาเริ่มคำขอ ผู้รับ และบริบทของงาน | หยุดงานแล้วส่งต่อให้คนตรวจ ไม่ลองรหัสทีละตัว |
| ข้อความดูเป็นของคำขอก่อนหน้า | เทียบ `received_at` และข้อมูลอ้างอิงกับคำขอปัจจุบัน | ไม่กรอกจนกว่าจะจับคู่ได้ชัดเจน |
| เซสชันเบราว์เซอร์หมดอายุ | งานเดิมยังเปิดอยู่และยืนยันต่อได้หรือไม่ | ยกเลิกบริบทเดิมก่อนเริ่มคำขอใหม่ |
| พบข้อความในโฟลเดอร์อีเมลขยะ/สแปม | ตรวจตำแหน่งข้อความแยกจากการย้าย | ไม่เพิ่มสิทธิ์ `move` เพียงเพื่ออ่าน OTP |
| ต้องซิงก์กล่องใหม่ | สถานะการเชื่อมต่อและการซิงก์ | ให้กระบวนการที่มีสิทธิ์ `sync` จัดการแยกต่างหาก |

Mailera แสดงได้ว่าข้อความอยู่ในกล่องขาเข้าหรือโฟลเดอร์อีเมลขยะ การตรวจตำแหน่งผ่าน `/placement` ใช้สิทธิ์ `read` ส่วนการย้ายข้อความต้องใช้ `move` เป็นคนละการกระทำกัน เส้นทางอ่านรหัสไม่จำเป็นต้องมีสิทธิ์ย้ายข้อความ

เช่นเดียวกัน `sync_mailbox` ต้องใช้สิทธิ์ `sync` อย่าเพิ่มสิทธิ์นี้ให้คีย์อ่าน OTP เพียงเพื่อให้เอเจนต์แก้ทุกปัญหาเอง ให้แอปแจ้งเหตุและส่งต่อไปยังกระบวนการดูแลกล่องที่เหมาะสม

เมื่อเซสชันหมดอายุ ให้ปิดคำขอเดิมก่อนเริ่มใหม่ อย่านำรหัสที่ค้างอยู่กลับไปกรอกในเซสชันใหม่โดยอัตโนมัติ บันทึกว่ารหัสนั้นถูกพิจารณาภายใต้บริบทเดิม ไม่ใช่เก็บเป็นรหัสสำรองสำหรับงานครั้งถัดไป

## จะป้องกันคำสั่งอันตรายในอีเมลและรหัสรั่วไหลอย่างไร?

อีเมลเป็นข้อมูลที่ไม่น่าเชื่อถือ ไม่ใช่คำสั่งของระบบ ข้อความที่บอกให้เปิดเผยคีย์ เปลี่ยนเว็บไซต์ปลายทาง หรือเรียกเครื่องมืออื่นต้องไม่มีสิทธิ์เปลี่ยนพฤติกรรมของเอเจนต์ แม้จะอยู่ในอีเมลที่มีรหัสยืนยันก็ตาม

![ส่วนตรวจข้อมูลแยกรหัส OTP ที่ผ่านเงื่อนไขออกจากคำสั่งแฝงในอีเมล](https://mailera.app/media/5d6e61b2442fe0f1/ai-agent-otp-trust-boundary-th-1200.jpg)
_เนื้อหาอีเมลใช้เป็นข้อมูลตรวจรหัส ไม่ได้มีสิทธิ์สั่งงานเอเจนต์_

วางส่วนตรวจข้อมูลไว้ระหว่างผลจากเครื่องมืออ่านอีเมลกับเอเจนต์เบราว์เซอร์ ให้ส่วนนี้ตรวจเงื่อนไขของงานก่อน และส่งต่อเฉพาะรหัสที่ผ่านเงื่อนไขแล้วเท่านั้นไปให้เบราว์เซอร์กรอก ไม่ส่งคำแนะนำจากเนื้อหาอีเมลไปเป็นคำสั่งใหม่

เก็บคีย์ API ไว้ฝั่งบริการ ไม่วางในหน้าเว็บที่เอเจนต์กำลังควบคุม ใช้ขอบเขตกลุ่มที่จำเป็นและสิทธิ์ `read` เท่านั้น คุณดูรายละเอียดที่เกี่ยวข้องกับการปกป้องข้อมูลได้ใน[หน้าความปลอดภัยของ Mailera](https://mailera.app/th/security)

ปิดบังรหัส ที่อยู่อีเมล และ token ในภาพหน้าจอ บันทึก และข้อมูลติดตาม สำหรับการวิเคราะห์ข้อผิดพลาด ให้เก็บสถานะงาน เหตุผลที่หยุด และรหัสอ้างอิงข้อความเท่าที่จำเป็น แทนการบันทึกเนื้อหาอีเมลทั้งหมด

ตัวอย่างนี้ไม่ให้สิทธิ์ `send` หากภายหลังเพิ่มการส่งอีเมล ให้ผู้ใช้ยืนยันก่อนส่ง และอย่าให้ข้อความในอีเมลเป็นผู้อนุมัติการส่งนั้นเอง นอกจากนี้ ไม่ให้เอเจนต์เปิดลิงก์จากอีเมลโดยอัตโนมัติ ขั้นตอนนี้ครอบคลุมการกรอก OTP ไม่ใช่ลิงก์ยืนยันทุกประเภท

## Mailera ทำอะไรไม่ได้ในขั้นตอนนี้?

Mailera เชื่อมกล่องอีเมลเดิมให้แอปและเอเจนต์อ่านผ่าน REST API หรือ MCP ไม่ได้สร้างกล่องจดหมายหรือที่อยู่อีเมลใหม่ คุณต้องเตรียมกล่องที่มีอยู่และได้รับอนุญาตให้ใช้ก่อน และ Mailera ไม่รับประกันว่าอีเมลยืนยันจะเข้ากล่องจดหมายเข้าเสมอ การตรวจตำแหน่งข้อความช่วยให้แอปรู้สถานะ แต่ไม่ได้เปลี่ยนผลการคัดกรองของผู้ให้บริการ

แอปของคุณควรกำหนดเวลาสิ้นสุดการรอ ตรวจผลยืนยันบนเว็บไซต์ และมีทางส่งต่อให้คนตรวจ

การพักงาน รักษาเซสชันเบราว์เซอร์ และตัดสินใจกลับมาทำงานต่อเป็นตรรกะของแอปที่ควบคุมเอเจนต์ ต้องแยกตรรกะนี้จากการอ่านอีเมลให้ชัด เพื่อไม่ให้เบราว์เซอร์เดินหน้าต่อเพียงเพราะพบรหัส โดยยังไม่ได้ตรวจ

**ให้เอเจนต์ AI ใช้กล่องจดหมายของคุณผ่าน MCP** — เพิ่มเซิร์ฟเวอร์ MCP ของ Mailera ลงใน Claude, Cursor หรือ VS Code เพื่อให้เอเจนต์อ่าน จัดหมวดหมู่ และตอบอีเมลได้ [ดูวิธีใช้ MCP](https://mailera.app/th/docs#mcp)
