𝗖𝗙𝟳 𝗕𝗿𝗲𝘃𝗼 𝗜𝗻𝘁𝗲𝗴𝗿𝗮𝘁𝗶𝗼𝗻 𝗜𝘀𝘀𝘂𝗲: 𝗪𝗵𝘆 𝗪𝗲𝗹𝗰𝗼𝗺𝗲 𝗘𝗺𝗮𝗶𝗹𝘀 𝗙𝗮𝗶𝗹

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)

ที่มา: https://dev.to/rahul_sharma_15bd129bc69e/cf7-brevo-integration-adds-contacts-but-never-sends-the-welcome-email-here-is-why-1e18