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

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

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

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

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

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

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

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

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

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

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

หากใช้ Browser Use คุณสามารถวางตรรกะอ่านและตรวจรหัสไว้ใน custom tool ได้ เอกสารทางการของ Browser Use อธิบายการลงทะเบียนฟังก์ชันผ่าน Tools แล้วส่งให้ agent วิธีนี้ช่วยแยกจุดตัดสินใจออกจากคำสั่งนำทางบนหน้าเว็บ แต่แอปยังต้องดูแลสถานะการรอและเซสชันเอง

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

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

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

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

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

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

ข้อกำหนดเครื่องมือ MCP อธิบายขั้นตอนเหล่านี้ รวมทั้งแนะนำให้กำหนด timeout ของการเรียกเครื่องมือ และตรวจผลลัพธ์ก่อนส่งต่อให้ LLM

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

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

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

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

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 ที่ผ่านเงื่อนไขออกจากคำสั่งแฝงในอีเมล
เนื้อหาอีเมลใช้เป็นข้อมูลตรวจรหัส ไม่ได้มีสิทธิ์สั่งงานเอเจนต์

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

เก็บคีย์ API ไว้ฝั่งบริการ ไม่วางในหน้าเว็บที่เอเจนต์กำลังควบคุม ใช้ขอบเขตกลุ่มที่จำเป็นและสิทธิ์ read เท่านั้น คุณดูรายละเอียดที่เกี่ยวข้องกับการปกป้องข้อมูลได้ในหน้าความปลอดภัยของ Mailera

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

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

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

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

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

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

ให้เอเจนต์ AI ใช้กล่องจดหมายของคุณผ่าน MCP

เพิ่มเซิร์ฟเวอร์ MCP ของ Mailera ลงใน Claude, Cursor หรือ VS Code เพื่อให้เอเจนต์อ่าน จัดหมวดหมู่ และตอบอีเมลได้

ดูวิธีใช้ MCP