การทดสอบ Webhook ของ Twilio บนเครื่องโลคัล ช่วยให้คุณรับการตอบกลับ SMS, คอลแบ็กเสียง และการอัปเดตสถานะข้อความบนเครื่องของคุณได้ Twilio ส่ง Webhook เป็นคำขอ HTTP POST พร้อม payload แบบ form-encoded — localhost ของคุณต้องมี URL HTTPS สาธารณะเพื่อรับมันระหว่างพัฒนา
ทำไมคอลแบ็กของ Twilio จึงต้องมี URL สาธารณะ
เมื่อมีคนส่ง SMS มายังหมายเลข Twilio ของคุณหรือจบสายโทร Twilio จะ POST ข้อมูลเหตุการณ์ไปยัง URL Webhook ที่ตั้งค่าไว้ ที่อยู่โลคัลอย่าง http://localhost:3000/sms เข้าถึงไม่ได้จากโครงสร้างพื้นฐานของ Twilio ทันเนล localhost เชื่อมช่องว่างนั้นด้วย endpoint HTTPS สาธารณะ
ประเภท Webhook ของ Twilio ที่ควรทดสอบบนเครื่องโลคัล
- SMS ขาเข้า: เมื่อผู้ใช้ส่งข้อความมายังหมายเลข Twilio ของคุณ
- คอลแบ็กสถานะ SMS: การยืนยันการส่ง (sent, delivered, failed)
- คอลแบ็กเสียง: คำขอ TwiML เมื่อสายเชื่อมต่อหรือเข้าสู่เมนู
- ข้อความ WhatsApp: Webhook ขาเข้าและสถานะของ WhatsApp Business API
- Conversations API: เหตุการณ์เพิ่มข้อความและผู้เข้าร่วม
ทีละขั้นตอน: ทดสอบ Webhook ของ Twilio บนเครื่องโลคัล
- เริ่มแอปโลคัลที่มี route Webhook ของ Twilio (เช่น
/sms/inbound) - รัน
npx portpreview 3000เพื่อสร้าง URL HTTPS สาธารณะ - ใน Twilio Console ตั้งค่า URL Webhook ของหมายเลขโทรศัพท์เป็น URL ทันเนลบวก path ของ route
- ตั้งค่าเมธอด HTTP (โดยทั่วไปคือ POST) และตรวจสอบว่า content type ตรงกับ handler ของคุณ
- ส่ง SMS ทดสอบหรือโทรทดสอบเพื่อทริกเกอร์ Webhook
- ตรวจคำขอที่จับไว้ — Twilio ส่ง payload แบบ form-encoded ไม่ใช่ JSON
- ยืนยันว่า handler ตรวจสอบลายเซ็น Twilio และคืนค่า TwiML ที่ถูกต้องหรือการตอบกลับ 2xx
ตรวจสอบลายเซ็นคำขอของ Twilio บนเครื่องโลคัล
Twilio เซ็นทุกคำขอด้วย header X-Twilio-Signature ที่คำนวณจาก URL เต็มและพารามิเตอร์ POST โดยใช้ auth token ของคุณ handler ของคุณควร:
- ใช้ URL สาธารณะที่ตรงเป๊ะ (รวมถึง hostname ของทันเนล) ในการตรวจสอบลายเซ็น
- ส่งพารามิเตอร์ POST ทั้งหมดเข้าสู่ฟังก์ชันตรวจสอบ
- ปฏิเสธคำขอที่มีลายเซ็นไม่ถูกต้อง แม้ระหว่างการทดสอบโลคัล
เมื่อ URL ทันเนลเปลี่ยนระหว่างเซสชัน ให้อัปเดตทั้ง URL Webhook ใน Twilio Console และ URL ที่ใช้ตรวจสอบให้ตรงกัน
เคล็ดลับการดีบักเฉพาะ Twilio
payload แบบ form-encoded
ต่างจาก Stripe หรือ GitHub Twilio ส่งข้อมูล application/x-www-form-urlencoded ตรวจสอบให้แน่ใจว่า handler parse body แบบฟอร์มได้ถูกต้อง ไม่ใช่แค่ JSON
การตอบกลับ TwiML
handler ของเสียงและ SMS ต้องคืนค่า XML TwiML ที่ถูกต้อง ทดสอบการจัดรูปแบบการตอบกลับบนเครื่องโลคัลก่อนที่ Twilio จะทำเครื่องหมายการส่งว่าล้มเหลว
พฤติกรรม timeout
Twilio คาดหวังการตอบกลับภายใน 15 วินาทีสำหรับ Webhook ส่วนใหญ่ handler ที่ช้าทำให้เกิดการลองใหม่และการส่งซ้ำ — ใช้ การรีเพลย์ Webhook เพื่อทดสอบการจัดการการลองใหม่
ห่วงโซ่คอลแบ็กสถานะ
ฟลว์ SMS มักเชื่อม Webhook ขาเข้ากับคอลแบ็กสถานะ ทดสอบทั้งสอง endpoint บนเครื่องโลคัลโดยตั้งค่า route หรือ path ของทันเนลแยกกัน
การทดสอบ Twilio บนเครื่องโลคัล กับ Twilio CLI
Twilio CLI สามารถจำลองคำขอขาเข้าด้วย twilio phone-numbers:update และปลั๊กอินทันเนลโลคัล ทันเนล localhost เฉพาะที่มีการจับคำขอให้การมองเห็นทุกคอลแบ็กอย่างต่อเนื่อง ความสามารถรีเพลย์ และเวิร์กโฟลว์ที่สเกลข้ามหลายผู้ให้บริการ ไม่ใช่แค่ Twilio
สำหรับรูปแบบการดีบัก Webhook ทั่วไป อ่าน วิธีดีบัก Webhook บนเครื่องโลคัล
เข้าร่วม waitlist ของ PortPreview สำหรับการทดสอบ Webhook ของ Twilio และหลายผู้ให้บริการจากทันเนลเดียว
