Chia sẻ bởi Nick Saraev
Bạn đang đau đầu vì tỷ lệ phản hồi email lạnh (cold email) quá thấp? Bạn đã gửi đi hàng trăm, thậm chí hàng ngàn email nhưng chẳng mấy ai ngó ngàng? Đừng lo lắng, bạn không đơn độc. Một trong những lý do lớn nhất khiến email lạnh thất bại chính là sự thiếu cá nhân hóa. Nhưng làm thế nào để cá nhân hóa hàng ngàn email mà không tốn vô số thời gian? Câu trả lời nằm ở tự động hóa và trí tuệ nhân tạo (AI).
Trong bài viết này, chúng ta sẽ cùng nhau xây dựng một hệ thống tự động giúp bạn "deep-personalize" – cá nhân hóa sâu – hàng loạt email lạnh. Hệ thống này sẽ tự động thu thập thông tin từ website của khách hàng tiềm năng, sử dụng AI để phân tích và tạo ra những "icebreaker" (lời mở đầu) cực kỳ ấn tượng và độc đáo cho từng email. Hãy sẵn sàng để chứng kiến tỷ lệ phản hồi email của bạn tăng vọt!
Tại sao cá nhân hóa email lạnh lại quan trọng và hệ thống này làm được gì?
Trong thế giới ngập tràn thông tin và email quảng cáo mỗi ngày, một email chung chung, gửi hàng loạt sẽ nhanh chóng bị bỏ qua hoặc tệ hơn là bị đánh dấu spam. Cá nhân hóa email lạnh bằng AI không chỉ đơn thuần là chèn tên người nhận vào email. Nó là việc bạn cho thấy mình đã thực sự tìm hiểu về họ, về công ty của họ, và có một lý do chính đáng để liên hệ.
Một "icebreaker" được cá nhân hóa tốt, ví dụ như đề cập đến một chi tiết thú vị trên website của họ, một bài blog họ mới đăng, hoặc một thành tựu cụ thể của công ty, sẽ khiến người nhận cảm thấy được tôn trọng và tò mò hơn về nội dung email của bạn. Điều này làm tăng đáng kể khả năng họ sẽ đọc tiếp và phản hồi.
Hệ thống mà chúng ta sắp xây dựng sẽ thực hiện chính xác điều đó:
- Thu thập leads: Lấy danh sách khách hàng tiềm năng từ các nguồn như Apollo.io.
- Scrape website: Tự động truy cập và "cào" dữ liệu từ website của từng lead.
- Phân tích sâu: Không chỉ dừng lại ở trang chủ, hệ thống sẽ phân tích nhiều trang con để hiểu rõ hơn về doanh nghiệp.
- Tạo icebreaker bằng AI: Sử dụng mô hình ngôn ngữ lớn (như GPT của OpenAI) để tạo ra những đoạn mở đầu email độc đáo, tự nhiên, như thể chính bạn đã dành thời gian nghiên cứu kỹ lưỡng.
Kết quả? Những email lạnh có tỷ lệ phản hồi cao hơn nhiều, có thể lên đến 5-10%, giúp bạn có thêm nhiều cuộc gặp và cơ hội kinh doanh quý giá.
Chuẩn bị công cụ và dữ liệu đầu vào cho hệ thống cá nhân hóa email lạnh bằng AI
Trước khi bắt tay vào xây dựng, chúng ta cần chuẩn bị một số công cụ và nền tảng sau:
- N8n (Nodemation): Đây là công cụ tự động hóa quy trình làm việc mã nguồn mở, trực quan. Chúng ta sẽ sử dụng n8n để xây dựng toàn bộ luồng xử lý.
- Apollo.io: Một cơ sở dữ liệu khách hàng tiềm năng (lead) phổ biến. Bạn có thể tìm kiếm và lọc leads theo nhiều tiêu chí.
- Apify: Dịch vụ cho phép bạn chạy các "actor" để scrape dữ liệu web. Chúng ta sẽ dùng Apify để scrape danh sách leads từ Apollo.io (do chi phí mua trực tiếp từ Apollo khá cao).
- Google Sheets: Dùng để lưu trữ URL tìm kiếm trên Apollo và lưu trữ kết quả leads cùng với icebreaker được tạo ra.
- OpenAI API: Để sử dụng các mô hình ngôn ngữ tiên tiến (ví dụ: GPT-4) cho việc tóm tắt nội dung website và tạo icebreaker. Bạn cần có API key.
Thiết lập ban đầu:
- Google Sheet: Tạo một file Google Sheet, ví dụ tên là "Multi-line Icebreaker Generator".
- Sheet 1: Tên là "Search URLs", có một cột "URL" để chứa link kết quả tìm kiếm từ Apollo.io.
- Sheet 2: Tên là "Leads", có các cột như: First Name, Last Name, Email, Website URL, Headline, Location, Phone Number, và quan trọng nhất là "Multi-line Icebreaker".
- Download template: https://romhub.io/n8n/Deep_Multiline_Icebreaker_System
Xây dựng luồng tự động hóa trong n8n để thu thập và xử lý dữ liệu website
Bây giờ, chúng ta sẽ đi vào chi tiết từng bước xây dựng luồng tự động hóa trong n8n.
Bước 1: Khởi tạo luồng và lấy URL tìm kiếm từ google sheets
- Mở n8n và tạo một workflow mới. Đặt tên cho nó, ví dụ "Deep Multi-line Icebreaker".
- Thêm một node Manual Trigger. Đây là cách đơn giản để bắt đầu chạy workflow khi thử nghiệm.
- Thêm node Google Sheets.
- Authentication: Kết nối tài khoản Google của bạn.
- Operation: Chọn "Get Rows".
- Document ID: Chọn file Google Sheet "Multi-line Icebreaker Generator" bạn đã tạo.
- Sheet Name: Chọn sheet "Search URLs".
- Node này sẽ lấy ra các URL tìm kiếm trên Apollo mà bạn đã lưu.
Bước 2: Scrape danh sách leads từ Apollo bằng apify
- Thêm node HTTP Request. Node này sẽ gọi API của Apify để chạy một "actor" scrape dữ liệu từ URL Apollo.
- Method:
POST
. - URL: Đây là URL API của Apify để chạy actor và lấy dữ liệu. Cấu trúc thường là
https://api.apify.com/v2/acts/YOUR_ACTOR_ID/run-sync-get-dataset-items
. Bạn cần thayYOUR_ACTOR_ID
bằng ID của actor Apify mà bạn sử dụng để scrape Apollo. (Trong video, người hướng dẫn sử dụng một actor cụ thể, bạn có thể tìm các actor tương tự trên Apify hoặc tự xây dựng). - Headers:
Content-Type
:application/json
Authorization
:Bearer YOUR_APIFY_API_TOKEN
(Thay bằng API token của bạn).
- Body (JSON): Truyền URL Apollo lấy từ Google Sheets vào payload của request, theo cấu trúc mà actor Apify yêu cầu. Thường sẽ là một mảng các URL cần scrape.
- Kết quả từ node này sẽ là một danh sách các leads với thông tin như tên, email, website URL, LinkedIn URL, v.v.
- Method:
Bước 3: Lọc những leads tiềm năng
Không phải lead nào cũng có đủ thông tin. Chúng ta cần lọc ra những lead có cả email và website.
- Thêm node Filter.
- Thiết lập điều kiện:
- Kiểm tra xem trường
email
có tồn tại (không phảinull
hoặc rỗng). - Kiểm tra xem trường
websiteURL
có tồn tại. - Chỉ những lead thỏa mãn cả hai điều kiện mới được đi tiếp.
- Kiểm tra xem trường
Bước 4: Scrape nội dung trang chủ của website
Với mỗi lead đã lọc, chúng ta sẽ scrape nội dung HTML của trang chủ website họ.
- Thêm node HTTP Request.
- Method:
GET
. - URL: Sử dụng biểu thức để lấy giá trị từ trường
websiteURL
của lead hiện tại. - Options:
- Redirects: Bật "Follow Redirects" và đặt "Max Redirects" (ví dụ: 21) để xử lý các website có chuyển hướng.
- Error Handling: Trong tab "Settings", mục "On Error", chọn "Continue using the error output". Điều này giúp workflow không bị dừng nếu một website nào đó không scrape được (ví dụ do bị chặn). Chúng ta sẽ bỏ qua các website lỗi.
- Node này sẽ trả về nội dung HTML của trang chủ.
- Method:
Bước 5: Trích xuất tất cả các liên kết (links) từ trang chủ
Để hiểu sâu hơn về website, chúng ta không chỉ phân tích trang chủ mà còn các trang con quan trọng.
- Thêm node HTML Extract.
- Source Data: Kết nối với output (thành công) của node HTTP Request ở Bước 4.
- Extraction Values:
- Key: Đặt tên cho key chứa danh sách link, ví dụ
links
. - CSS Selector:
a
(để chọn tất cả thẻ<a>
). - Return Value:
Attribute
. - Attribute Name:
href
(để lấy giá trị của thuộc tínhhref
). - Return Array: Bật tùy chọn này.
- Key: Đặt tên cho key chứa danh sách link, ví dụ
- Options: Bật "Trim Values" và "Clean up Text" để làm sạch dữ liệu link.
- Node này sẽ trả về một mảng chứa tất cả các URL có trên trang chủ.
Bước 6: Dọn dẹp và chuẩn bị dữ liệu lead
Trước khi đi vào vòng lặp xử lý từng lead, chúng ta cần dọn dẹp dữ liệu, chỉ giữ lại những thông tin cần thiết.
- Thêm node Edit Fields.
- Mode: "Keep".
- Kéo thả các trường bạn muốn giữ lại từ input (ví dụ:
firstName
,lastName
,email
,websiteURL
,headline
,location
,phoneNumber
, và mảnglinks
vừa trích xuất). - Điều này giúp dữ liệu gọn gàng hơn cho các bước tiếp theo.
Sử dụng AI để phân tích website và tạo lời mở đầu email "chất lừ"
Đây là phần cốt lõi, nơi chúng ta sử dụng AI để tạo ra sự cá nhân hóa sâu.
Bước 7: Xử lý từng lead một cách riêng biệt (vòng lặp)
Chúng ta cần xử lý từng lead và các link website của họ một cách độc lập.
- Thêm node Split In Batches (hoặc Loop Over Items tùy phiên bản n8n).
- Node này sẽ lặp qua từng item (lead) từ output của node Edit Fields. Mọi node đặt trong "Loop" route của nó sẽ được thực thi cho mỗi lead.
Bên trong vòng lặp (Loop route):
Bước 8: Tách và lọc các link của website hiện tại
Mỗi lead có một mảng links
. Chúng ta cần xử lý từng link trong mảng đó.
-
Thêm node Split Out (hoặc một node tương tự để xử lý từng phần tử trong mảng).
- Field to Split Out: Chọn trường
links
(mảng link đã trích xuất). - Node này sẽ tạo ra một item mới cho mỗi link trong mảng.
- Field to Split Out: Chọn trường
-
Thêm node Filter để lọc các link không cần thiết.
- Ví dụ: Chỉ giữ lại các "relative URLs" (các link bắt đầu bằng
/
) vì chúng thường trỏ đến các trang nội bộ quan trọng. - Điều kiện: String
links
(tên trường chứa link sau khi Split Out)starts with
/
. - Loại bỏ các link không phải là trang web (ví dụ:
mailto:
,tel:
). - Bạn có thể thêm các điều kiện lọc khác tùy theo nhu cầu (ví dụ: loại trừ các link đến file PDF, ảnh,...).
- Ví dụ: Chỉ giữ lại các "relative URLs" (các link bắt đầu bằng
-
Thêm node Remove Duplicates.
- Loại bỏ các link bị trùng lặp trong danh sách link của website hiện tại.
Bước 9: Scrape nội dung từng trang con
Với mỗi link đã lọc, chúng ta sẽ scrape nội dung HTML của trang con đó.
- Thêm node HTTP Request.
- Method:
GET
. - URL: Tạo URL tuyệt đối bằng cách ghép
websiteURL
(từ dữ liệu lead gốc trước vòng lặp, bạn cần truy cập đúng biến) với link tương đối hiện tại (từ output của node Remove Duplicates).- Ví dụ biểu thức:
{{$items("Loop Over Items").item.json.websiteURL}}{{$json.links}}
(cú pháp có thể thay đổi tùy cách bạn cấu trúc dữ liệu và phiên bản n8n).
- Ví dụ biểu thức:
- Options: Tương tự như Bước 4 (Follow Redirects, Error Handling).
- Method:
Bước 10: Chuyển đổi HTML sang markdown
Nội dung HTML thường rất dài và chứa nhiều thẻ không cần thiết cho việc phân tích của AI. Chuyển sang Markdown giúp giảm số lượng token và chi phí khi gọi API của OpenAI.
- Thêm node HTML to Markdown.
- Source Key: Chọn trường chứa nội dung HTML từ node HTTP Request ở Bước 9.
Bước 11: Tóm tắt nội dung từng trang con bằng AI (OpenAI)
Đây là lúc AI vào cuộc!
- Thêm node OpenAI Chat Model.
- Authentication: Kết nối OpenAI API key của bạn.
- Model: Chọn model phù hợp (ví dụ:
gpt-4-turbo-preview
hoặcgpt-3.5-turbo
). - Messages:
- System Prompt: "You are a helpful intelligent website scraping assistant."
- User Prompt:
(Trong đóYou are provided a markdown scrape of a website page. Your task is to provide a two-paragraph abstract of what this page is about. Return in this JSON format: {"abstract": "Your abstract goes here."} Rules: - Your abstract should be comprehensive, similar level of detail as an abstract to a published paper. - Use a straightforward, Spartan tone of voice. - If the content is empty or irrelevant, return {"abstract": "No content."}. Markdown content: {{$json.markdown}}
{{$json.markdown}}
là nội dung markdown từ node trước).
- Important: Để tránh lỗi do nội dung quá dài, bạn có thể thêm một bước xử lý (ví dụ, dùng node Code) để cắt bớt nội dung markdown nếu nó vượt quá một giới hạn ký tự nhất định (ví dụ: 5000-10000 ký tự) trước khi đưa vào OpenAI.
Kết thúc vòng lặp bên trong (xử lý các link của một website). Bây giờ chúng ta quay lại luồng chính của vòng lặp "Loop Over Items" (xử lý từng lead).
Bước 12: Tổng hợp (aggregate) các tóm tắt trang con
Sau khi AI đã tóm tắt tất cả các trang con của một website, chúng ta cần gộp các tóm tắt (abstract
) này lại.
- Thêm node Aggregate (đặt sau node OpenAI tóm tắt trang con, và vẫn nằm trong vòng lặp xử lý từng link, nhưng cấu hình để nó nhóm theo từng lead). Hoặc, nếu cấu trúc vòng lặp của bạn cho phép, bạn sẽ cần một node để gom kết quả của tất cả các lần gọi AI cho các trang con của một lead.
- Field to Aggregate: Chọn trường chứa
abstract
từ output của node OpenAI. - Mục tiêu là có được một mảng chứa tất cả các
abstract
của các trang con thuộc về lead hiện tại. - Lưu ý: Việc aggregate này cần được cấu hình cẩn thận để nó reset và tạo mảng mới cho mỗi lead mới trong vòng lặp "Loop Over Items". Có thể bạn cần một vòng lặp con hoặc cấu trúc dữ liệu phù hợp để các
abstract
của một website được thu thập lại trước khi sang lead tiếp theo. Một cách đơn giản hơn có thể là sau khi vòng lặp qua các link của một website kết thúc, bạn sẽ có nhiều item, mỗi item là một abstract. Node OpenAI tiếp theo (Bước 13) sẽ cần nhận tất cả các abstract này.
- Field to Aggregate: Chọn trường chứa
Bước 13: Tạo "multi-line icebreaker" bằng AI (OpenAI)
Đây là bước "ảo diệu" nhất, nơi AI tổng hợp thông tin từ các tóm tắt trang con để tạo ra một lời mở đầu cá nhân hóa.
- Thêm một node OpenAI Chat Model nữa (node này nằm sau khi tất cả các trang con của một lead đã được tóm tắt và các tóm tắt đó được chuẩn bị để đưa vào đây).
- Authentication & Model: Tương tự Bước 11.
- Messages:
- System Prompt:
You are an expert cold email copywriter. Your task is to take summaries of a business's website pages and turn them into a catchy, personalized multi-line icebreaker for a cold email campaign. The goal is to imply the rest of the campaign is also highly personalized. Return your icebreaker in the following JSON format: {"icebreaker": "Your generated icebreaker here."}
- User Prompt: Đây là phần quan trọng, bạn cần "dạy" AI cách viết icebreaker bạn muốn.
We just scraped a series of web pages for a business. Here are the summaries of their pages: {{ $json.aggregated_abstracts }} // Đây là mảng các abstract từ Bước 12 Based on these summaries, craft an icebreaker using this general structure (but feel free to adapt it naturally): "Hey [First Name], Love [specific, non-obvious positive detail about their website/company from summaries]. Also a fan of/noticed [another specific, non-obvious detail or approach]. Wanted to run something by you..." RULES FOR THE ICEBREAKER: 1. Tone: Spartan, laconic, friendly but professional. 2. Personalization: Focus on SMALL, NON-OBVIOUS details. Avoid generic phrases like "love your website" or "love your take on marketing." The goal is to make them think a human genuinely researched their site deeply. 3. Company/Location Names: Shorten them where possible (e.g., "XYZ" instead of "XYZ Agency", "AMS" instead of "AMS Promotional Services", "San Fran" instead of "San Francisco"). This sounds more human. 4. Variables: The [First Name] should be replaced with the lead's first name. The bracketed placeholders for details should be filled with actual observations from the provided summaries. 5. Be concise. The icebreaker should be 2-3 engaging lines. Example of good input summaries (for a different company): [Provide 2-3 example abstracts here to show AI the input format] Example of a good icebreaker output (for the example summaries): {"icebreaker": "Hey John,\n\nLove how L2 makes it easy to filter by acreage. Also a fan of your property update email option.\n\nWanted to run something by you..."} Now, generate the icebreaker for the provided summaries above. Lead's First Name: {{ $items("Loop Over Items").item.json.firstName }} // Truy cập first name của lead hiện tại
- System Prompt:
- Phần "User Prompt" này cực kỳ quan trọng. Bạn cung cấp cấu trúc, quy tắc, ví dụ tốt và ví dụ xấu (nếu cần) để hướng dẫn AI. Việc cung cấp ví dụ (few-shot prompting) giúp AI hiểu rõ hơn yêu cầu của bạn.
Hoàn thiện và lưu trữ kết quả cá nhân hóa email lạnh
Sau khi AI đã tạo ra icebreaker, chúng ta sẽ lưu nó lại.
Bước 14: Thêm dòng mới vào google sheets
- Thêm node Google Sheets (đặt ở cuối cùng trong "Loop" route của node "Loop Over Items", sau node OpenAI tạo icebreaker).
- Authentication: Đã có.
- Operation: "Append Row".
- Document ID: Chọn file "Multi-line Icebreaker Generator".
- Sheet Name: Chọn sheet "Leads".
- Columns: Map các trường dữ liệu từ các node trước vào các cột tương ứng trong Google Sheet:
First Name
:$items("Loop Over Items").item.json.firstName
Last Name
:$items("Loop Over Items").item.json.lastName
Email
:$items("Loop Over Items").item.json.email
Website URL
:$items("Loop Over Items").item.json.websiteURL
Headline
:$items("Loop Over Items").item.json.headline
Location
:$items("Loop Over Items").item.json.location
Phone Number
:$items("Loop Over Items").item.json.phoneNumber
Multi-line Icebreaker
:{{$json.icebreaker}}
(từ output của node OpenAI ở Bước 13).
Cuối cùng, kết nối "Loop" route của node "Split In Batches/Loop Over Items" trở lại đầu vào của chính nó (nếu cần để xử lý batch) hoặc đảm bảo nó lặp qua tất cả các item. Kết nối "Done" route (nếu có) để thực hiện hành động sau khi tất cả các lead đã được xử lý.
Khi bạn chạy workflow này, nó sẽ tự động điền vào sheet "Leads" của bạn với những lời mở đầu email được cá nhân hóa sâu sắc, sẵn sàng để bạn sử dụng trong các chiến dịch cold email (ví dụ, thông qua các công cụ như Instantly.ai).
Tối ưu và mở rộng hệ thống cá nhân hóa email lạnh bằng AI của bạn
Hệ thống trên là một nền tảng vững chắc. Bạn hoàn toàn có thể tùy chỉnh và mở rộng nó:
- Lọc trùng lặp công ty: Trước khi xử lý, bạn có thể thêm bước lọc để tránh gửi email quá giống nhau cho nhiều người trong cùng một công ty (hoặc tùy chỉnh prompt AI để nó biết điều này).
- Nghiên cứu sâu hơn: Thay vì chỉ tóm tắt, bạn có thể yêu cầu AI trích xuất các thông tin cụ thể (ví dụ: công nghệ họ sử dụng, đối thủ cạnh tranh, tin tức gần đây) để làm phong phú thêm icebreaker hoặc nội dung email.
- Tạo tài sản tùy chỉnh (Custom Asset Generation): Sử dụng thông tin thu thập được để AI tạo ra một tài liệu nhỏ, một phân tích ngắn gọn, hoặc một đề xuất sơ bộ dành riêng cho lead đó.
- A/B testing icebreakers: Tạo nhiều phiên bản icebreaker với các prompt AI khác nhau và thử nghiệm xem loại nào hiệu quả nhất.
- Tham chiếu chéo: Nếu bạn gửi email cho nhiều người trong cùng công ty, bạn có thể khéo léo đề cập đến việc đã liên hệ với đồng nghiệp của họ (ví dụ: "Chào David, tôi vừa trao đổi với Zayn và muốn..."). Điều này tăng tính xác thực.
Kết luận
Xây dựng một hệ thống cá nhân hóa email lạnh bằng AI như thế này đòi hỏi một chút nỗ lực ban đầu, nhưng lợi ích mà nó mang lại là vô cùng lớn. Bằng cách tự động hóa việc thu thập thông tin, phân tích website và tạo ra những lời mở đầu email độc đáo, bạn không chỉ tiết kiệm hàng giờ làm việc thủ công mà còn cải thiện đáng kể tỷ lệ phản hồi và xây dựng mối quan hệ tốt hơn với khách hàng tiềm năng.
Hãy nhớ rằng, chìa khóa của cá nhân hóa hiệu quả là sự chân thực và tập trung vào những chi tiết nhỏ mà người nhận thực sự quan tâm. Với sức mạnh của n8n và AI, bạn hoàn toàn có thể chinh phục nghệ thuật cold email. Chúc bạn thành công!