𝗖𝗙𝟳 𝗕𝗿𝗲𝘃𝗼 𝗜𝗻𝘁𝗲𝗴𝗿𝗮𝘁𝗶𝗼𝗻 𝗜𝘀𝘀𝘂𝗲: 𝗪𝗵𝘆 𝗪𝗲𝗹𝗰𝗼𝗺𝗲 𝗘𝗺𝗮𝗶𝗹𝘀 𝗙𝗮𝗶𝗹
Contact Form 7 (CF7) ของคุณเพิ่มรายชื่อผู้ติดต่อลงใน Brevo ได้ แต่กลับไม่ส่งอีเมลต้อนรับ (welcome emails) แม้คุณจะตรวจสอบทุกอย่างแล้ว รายชื่อผู้ติดต่อก็ปรากฏในรายการของคุณ แต่ทีมสนับสนุนของ Brevo กลับไม่พบคำขอส่งอีเมลใดๆ จากเว็บไซต์ของคุณเลย
ปัญหานี้ไม่ได้เกิดจากปลั๊กอินขัดกัน (plugin conflict) แต่เป็นข้อจำกัดของการเชื่อมต่อแบบ built-in
CF7 ใช้การเรียก API (API call) เพียงครั้งเดียวเพื่อเพิ่มผู้ติดต่อลงใน Brevo โดยจะเรียกไปยัง contacts endpoint ซึ่งส่วนนี้ทำงานได้ปกติ
แต่การส่งอีเมลต้อนรับจำเป็นต้องใช้การเรียก API อีกรูปแบบหนึ่ง ซึ่งต้องเรียกไปยัง transactional email endpoint แต่ CF7 ไม่ได้ทำการเรียกครั้งที่สองนี้ เนื่องจากการเชื่อมต่อแบบ built-in ขาดฟีเจอร์นี้ไป
ช่องติ๊ก "Send a welcome email" ในการตั้งค่า CF7 นั้นอาจทำให้เข้าใจผิดได้ เพราะมันน่าจะทำหน้าที่เพียงแค่กระตุ้นการส่งอีเมลยืนยันในระดับรายชื่อ (list-level confirmation emails) ของ Brevo เท่านั้น แต่ไม่ได้ไปกระตุ้นการส่งเทมเพลตแบบ transactional ที่คุณกำหนดเอง
คุณสามารถแก้ไขปัญหานี้ได้สองวิธี
ทางเลือกที่ 1: ใช้ฟังก์ชัน PHP
คุณสามารถใช้ hook เข้ากับเหตุการณ์การส่งฟอร์ม (submission event) ของ CF7 เพื่อส่งการเรียก API ที่จำเป็นด้วยตนเอง
ใช้โครงสร้างโค้ดนี้:
add_action('wpcf7_before_send_mail', 'send_brevo_welcome_email');
function send_brevo_welcome_email($contact_form) {
if ((int) $contact_form->id() !== YOUR_FORM_ID) return;
$submission = WPCF7_Submission::get_instance();
if (!$submission) return;
$data = $submission->get_posted_data();
$email = sanitize_email($data['your-email'] ?? '');
$name = sanitize_text_field($data['your-name'] ?? '');
if (empty($email)) return;
$api_key = defined('BREVO_API_KEY') ? BREVO_API_KEY : '';
$template_id = 12;
wp_remote_post('https://api.brevo.com/v3/smtp/email', [
'headers' => [
'api-key' => $api_key,
'Content-Type' => 'application/json',
],
'body' => wp_json_encode([
'templateId' => $template_id,
'to' => [['email' => $email, 'name' => $name]],
'params' => ['FIRSTNAME' => $name],
]),
'timeout' => 15,
]);
}
ทางเลือกที่ 2: ใช้ปลั๊กอินเฉพาะทาง
หากคุณไม่ต้องการจัดการกับโค้ด ให้ใช้ปลั๊กอินอย่าง Contact Form to API ซึ่งจะเชื่อมต่อ CF7 เข้ากับ Brevo transactional endpoint โดยตรงผ่านแดชบอร์ดของคุณ คุณสามารถจับคู่ฟิลด์ (map fields) และตั้งค่า template ID ได้โดยไม่ต้องเขียน PHP
ข้อควรตรวจสอบสุดท้าย: ตรวจสอบให้แน่ใจว่าสถานะเทมเพลตใน Brevo ของคุณคือ "Active" เพราะ Brevo จะไม่ส่งอีเมลหากเทมเพลตยังอยู่ในสถานะร่าง (draft)