NGUYỄN VĂN PHÚ

Phiếu triển khai · Cỗ máy Email Marketing trên Lark Base

Cỗ máy Email Marketing chạy trọn trên Lark Base

Bốn mảnh ghép nằm ở bốn nơi, nhưng bạn chỉ làm việc ở một chỗ duy nhất: bảng Lark. Không máy chủ phải nuôi, không tiến trình chạy ngầm, không phần mềm phải mở.

Dựng uy tín tên miền→Điền 8 ô→Dán vào Claude Code→Bật Actions và quyền sửa Base→Gắn nút bấm trong Lark→Gửi thử một lá

11bảng dữ liệu
5lệnh bấm
4mảnh ghép
0tiến trình chạy ngầm

Hình 1

Một vòng khép kín, Lark đứng giữa

Lark Base vừa là nơi bạn ra lệnh, vừa là nơi mọi kết quả đổ về. Ba mảnh còn lại chỉ là tay chân.

LARK BASE

  • 11 bảng dữ liệu
  • nút bấm và lịch chạy
  • bạn làm việc ở đây
↓

GitHub Actions

  • chỉ chạy khi được gọi
  • không nuôi máy chủ
→

Hộp thư của bạn

  • gửi thư đi
  • đọc thư dội về
→

Cloudflare Worker

  • tai nghe ngóng
  • ghi thẳng vào bảng

Đi hết một vòng là về chỗ cũ. Lark gọi GitHub chạy, GitHub gửi thư qua hộp thư của bạn, thư tới tay người nhận. Người nhận mở hay bấm link thì Cloudflare bắt được và ghi ngược vào bảng Lark.

Bạn không phải mở máy tính. Không có tiến trình nào chạy ngầm trên máy bạn.

Nguyên tắc

Bạn gõ 4 bảng, máy ghi 7 bảng

Gõ tay vào bảy bảng bên phải là tự làm sai số liệu của chính mình.

Bạn điền

Nội dung và người nhận

12.1Người nhận chuỗi nuôi dưỡng
12.2Nội dung từng ngày trong chuỗi
12.3Người nhận bản tin
12.4Nội dung từng số bản tin

Máy ghi

Số liệu và kết quả

12.5Ai mở thư
12.6Ai huỷ nhận
12.7Địa chỉ ảo máy lọc ra
12.8Địa chỉ hỏng, thư dội về
12.9Ai bấm link trong thư
12.10Báo cáo từng chiến dịch
12.11Ảnh chụp mỗi ngày để vẽ xu hướng

Hình 2

Cái van chặn gửi nhầm

Phần bạn không phải nhớ. Trước mỗi lần gửi, máy tự dựng lại danh sách chặn từ ba nguồn.

12.6 Đã huỷ nhận

  • người nhận tự bấm
  • chặn vĩnh viễn
→

12.7 Địa chỉ ảo

  • máy kiểm cú pháp
  • kiểm tên miền có nhận thư
→

12.8 Địa chỉ hỏng

  • thư dội ngược về
  • hard bounce chặn hẳn

Ba nguồn gộp thành một danh sách, dựng mới ở mỗi lượt chạy. Kể cả người vừa bấm huỷ năm phút trước cũng không lọt qua được.

Đây là phần giữ uy tín hộp thư của bạn. Bỏ nó thì vài tháng nữa thư của bạn vào thẳng mục thư rác của tất cả mọi người.

Vận hành

Một ngày trong đời cỗ máy

Máy không tự chạy. Nó chỉ động khi được gọi, mà người gọi là cái lịch bạn đặt trong Lark.

Lúc nàoViệc gìAi gọi
Sáng, một lầnGửi thư nuôi dưỡng. Máy đọc ai đến lượt, lấy đúng nội dung ngày đó, gửi từng người một. Mỗi người nhiều nhất một thư mỗi ngày.Lịch trong Lark
Cả ngàyNghe ngóng phản ứng. Ai mở thư, bấm link hay huỷ nhận đều được ghi thẳng vào bảng.Tự động
Khi bạn cầnGửi bản tin. Soạn xong đổi trạng thái sang Chờ gửi. Gửi xong bảng tự ghi số người đã nhận.Bạn bấm nút
TốiQuét thư dội về. Máy mở hộp thư tìm thư báo lỗi, bóc ra địa chỉ hỏng. Từ lúc đó các địa chỉ này bị chặn.Lịch trong Lark
Tối, sau đóDựng báo cáo. Gộp số liệu trong ngày, ghi một mốc để vẽ được đường xu hướng.Lịch trong Lark

Đặt lịch gửi nuôi dưỡng đúng một lần mỗi ngày. Đặt dày hơn là dồn thư cho người nhận, và đó là đường ngắn nhất để bị đánh dấu thư rác.

Năm điểm bấm

Toàn bộ thứ có thể ra lệnh

Lark không chạy được mã. Lark chỉ gõ cửa GitHub bằng một lệnh HTTP, GitHub mới dựng máy ảo và chạy.

Điểm bấmLàm gìGọi lúc nào
Gửi nuôi dưỡngChuỗi theo ngày của từng người, mỗi người một thư một ngàyLịch hằng ngày
Gửi bản tinPhát một số bản tin cho cả danh sáchBạn bấm nút trên dòng bản tin
Lọc địa chỉ ảoKiểm cú pháp, kiểm tên miền có nhận thư, nhận diện mail dùng một lầnKhi nạp danh sách mới
Quét thư dội vềMở hộp thư nhặt địa chỉ hỏng vào danh sách chặnLịch hằng ngày
Dựng báo cáoChỉ đọc rồi ghi báo cáo, chạy lúc nào cũng an toànLịch hằng ngày

Ba câu là hiểu cả cỗ máy

Máy không tự chạy. Không có gì chạy ngầm, nó chỉ động khi bạn gọi hoặc lịch gọi.

Bảng là sự thật. Không có kho dữ liệu nào giấu ở chỗ khác, mở Lark ra là thấy hết.

Bạn gõ bốn bảng, máy ghi bảy bảng. Gõ tay vào bảng của máy là tự làm sai số của mình.

01

Chuẩn bị năm thứ

Làm xong năm việc này rồi hãy dán khối lệnh. Thiếu một thứ là Claude phải dừng giữa chừng hỏi bạn, mà lúc đó bạn lại đi tìm, buổi triển khai kéo dài gấp đôi.

  1. Cài Claude Code lên máy. Hướng dẫn chính thức ở code.claude.com/docs. Máy nào cũng được, Mac hay Windows đều chạy.Mở terminal gõ được lệnh claude
  2. Tạo một Lark Base trống để chứa 11 bảng, rồi copy đường dẫn của nó. Base nằm trong Lark Wiki cũng được, Claude sẽ tự đổi ra mã thật.Có link Base dạng .../base/... hoặc .../wiki/...
  3. Tạo một ứng dụng Lark trong Developer Console, cấp quyền bitable:app, rồi mở Base ra thêm chính ứng dụng đó vào làm cộng tác viên có quyền sửa.Có App ID, App Secret, và ứng dụng đứng trong danh sách cộng tác viên của Base
  4. Chuẩn bị một hộp thư riêng để gửi, kèm mật khẩu IMAP/SMTP của hộp thư đó. Đừng dùng hộp thư bạn đang nhận đơn hàng hay liên lạc với khách.Có địa chỉ gửi và một mật khẩu riêng cho máy dùng
  5. Tạo một mật khẩu ứng dụng GitHub loại classic, tick ô repo. Đây là thứ để Lark gọi được GitHub chạy.Có chuỗi bắt đầu bằng ghp_

Có Cloudflare thì đăng nhập sẵn, phần đo mở và bấm cần tới. Chưa có cũng không sao, hệ vẫn gửi được, chỉ là bạn không biết ai mở thư ai bấm link.

02

Dựng uy tín tên miền trước khi gửi lá thư đầu tiên

Đây là phần người ta hay bỏ qua nhất, và cũng là phần trả giá đắt nhất. Ba bản ghi dưới đây nói cho Gmail biết thư này đúng là của bạn gửi. Thiếu chúng thì máy vẫn chạy, log vẫn báo gửi thành công, mà thư đi thẳng vào mục thư rác của tất cả mọi người.

  1. Sau khi bật xong ba bản ghi, đừng tra DNS để kiểm. Nhiều nhà cung cấp dùng mã riêng theo từng tổ chức nên tra ra không thấy gì cả. Cách kiểm đúng là gửi thử một lá cho chính mình rồi xem nó nằm ở đâu.Thư vào Hộp thư chính, không vào Thư rác
  2. Lấy đúng mật khẩu IMAP/SMTP, không phải mật khẩu bạn dùng để đăng nhập. Vào cài đặt hộp thư, bật dịch vụ IMAP/SMTP rồi tạo một mật khẩu ứng dụng riêng. Nhà cung cấp trả về một chuỗi ký tự, đó mới là thứ cần điền.Có một chuỗi riêng, khác hẳn mật khẩu đăng nhập
Bản ghiNó làm gìLấy ở đâu
SPFKhai báo máy chủ nào được phép gửi thư thay mặt tên miền của bạn.Nhà cung cấp hộp thư đưa sẵn khi bạn thêm tên miền
DKIMKý chữ ký lên từng lá thư để bên nhận kiểm được thư không bị sửa dọc đường.Trong phần quản trị hộp thư, mục chống thư rác, bật DKIM rồi dán bản ghi vào DNS
DMARCNói cho bên nhận biết phải làm gì với thư giả mạo tên miền của bạn.Bạn tự thêm vào DNS. Để mức p=none là mức thấp nhất, ai cũng giả mạo được, nên bị chấm điểm uy tín thấp

Bỏ bước này thì hôm nay chạy vẫn ngon. Vài tuần sau thư của bạn vào thư rác hàng loạt, và uy tín tên miền một khi đã mất thì rất khó gỡ lại. Đây là kiểu hỏng khó phát hiện nhất của cả bộ, vì không có lỗi nào hiện ra.

03

Điền một lần rồi copy cả khối

Ô nào chưa có thì cứ để trống, dòng đó tự biến mất khỏi khối lệnh và Claude sẽ hỏi bạn lúc chạy. Trang này chạy hoàn toàn trong trình duyệt của bạn, không gửi đi đâu, không lưu lại gì, đóng tab là mất sạch.

✓ Đã copy — dán vào Claude

Mở Claude Code ở một thư mục trống rồi dán vào, gửi một lần. Phần được tô vàng trong khối lệnh là chỗ bạn chưa điền, cứ dán, Claude sẽ hỏi tiếp.

04

Mười một bảng và năm lệnh bấm

Bốn bảng đầu là nơi bạn gõ. Bảy bảng còn lại máy ghi, gõ tay vào đó là tự làm sai số liệu của chính mình. Mỗi lệnh bấm là một đường HTTP để lát nữa bạn gắn vào nút bấm trong Lark.

BảngChứa gìLệnh chạy
12.1 và 12.2Người nhận chuỗi nuôi dưỡng, và nội dung từng ngàysend-nurture
12.3 và 12.4Người nhận bản tin, và nội dung từng sốsend-newsletter
12.5, 12.9 và 12.6Lượt mở, lượt bấm link, người huỷ nhậnmáy chủ đo tự ghi
12.7Kết quả lọc địa chỉ ảofilter-fake
12.8Địa chỉ hỏng nhặt từ thư dội vềsync-bounces
12.10 và 12.11Báo cáo từng chiến dịch, và ảnh chụp mỗi ngàybuild-report

Riêng build-report chỉ đọc rồi ghi báo cáo, không gửi thư nào, nên chạy lúc nào cũng an toàn. Bốn lệnh còn lại đều có thể gửi thư thật, chạy thử phải bật chế độ dry_run.

05

Ba việc Claude không bấm thay bạn được

Ba việc này nằm trong giao diện của GitHub và của Lark, chỉ người có tài khoản mới làm được. Claude sẽ dừng lại nhắc bạn, nhưng biết trước thì đỡ mất thời gian.

  1. Bật Actions trên kho vừa dựng. Vào tab Actions của kho, nếu thấy nút xanh mời bật thì bấm vào. Chưa bật thì mọi lệnh HTTP đều trả mã 204 trông y như thành công, mà thực tế không chạy gì cả.Tab Actions hiện danh sách năm workflow
  2. Cho ứng dụng Lark vào Base với quyền sửa. Mở Base, bấm dấu ba chấm ở góc trên bên phải, thêm ứng dụng bạn vừa tạo, chọn quyền có thể sửa. Thiếu quyền sửa thì máy đọc được bảng nhưng ghi trả lỗi 91403, hoặc tệ hơn là chạy im mà không ghi được gì.Ứng dụng đứng trong danh sách cộng tác viên của Base
  3. Gắn nút bấm và đặt lịch trong Lark. Claude dựng sẵn năm điểm bấm, nhưng nối chúng vào Automation thì phải làm trên giao diện Lark. Cách làm ở bảng ngay dưới.Bấm nút trong Lark thì tab Actions của GitHub chạy
Automation trong LarkKiểuThân yêu cầu gửi đi
Nút gửi một số bản tinKích hoạt khi ô Gửi ngay của một dòng bảng 12.4 được tick{ "event_type": "send-newsletter", "client_payload": { "record_id": "mã dòng" } }
Lịch gửi nuôi dưỡngTheo lịch, một lần mỗi ngày{ "event_type": "send-nurture" }
Lịch quét thư dội vềTheo lịch, cuối ngày{ "event_type": "sync-bounces" }
Lịch dựng báo cáoTheo lịch, sau lệnh quét{ "event_type": "build-report" }
Nút lọc địa chỉ ảoBấm tay khi vừa nạp danh sách mới{ "event_type": "filter-fake" }

Cả năm đều gửi tới cùng một địa chỉ, kiểu POST: https://api.github.com/repos/<tài khoản>/<tên kho>/dispatches. Kèm ba dòng tiêu đề, là Authorization: Bearer <mật khẩu ứng dụng GitHub>, Accept: application/vnd.github+json và Content-Type: application/json. Gọi đúng thì Lark báo mã 204, còn kết quả thật thì xem ở tab Actions của kho. Đặt lịch gửi nuôi dưỡng đúng một lần mỗi ngày, đặt dày hơn là dồn thư cho người nhận.

06

Lá thư đầu tiên

Claude báo xong rồi thì mở Base ra làm đúng ba việc này. Gửi cho chính mình trước, đọc thư bằng điện thoại, rồi mới nghĩ tới người khác.

Ở đâuLàm gì
12.2Thêm một dòng, Ngày để 1, Tiêu đề và Nội dung tuỳ bạn, Kích hoạt để Bật. Gõ như nhắn tin, không cần biết HTML. Gõ {{name}} thì mỗi người sẽ thấy tên mình.
12.1Thêm chính địa chỉ của bạn, Ngày bắt đầu là hôm nay, Trạng thái để Đang nuôi.
GitHubChạy lệnh send-nurture với dry_run bật lên trước. Đọc log, thấy dòng ghi Ngày 1 kèm địa chỉ của bạn là đúng. Rồi chạy lại với dry_run tắt đi để gửi thật.

Nhìn con số người bị bỏ qua trước khi nghi ngờ hộp thư. Bằng 0 nghĩa là máy không thấy người nhận nào, tức là trỏ sai Base hoặc bảng rỗng. Khác 0 mới là đọc đúng bảng. Rất nhiều lần tưởng hỏng máy chủ thư, hoá ra chỉ là trỏ nhầm chỗ.

Tên miền mới phải khởi động ấm. Đừng bắn vài nghìn thư ngay ngày đầu. Tăng dần trong khoảng ba tuần, chừng 200 thư, rồi 500, rồi 1.000, rồi 2.000. Bắn ồ ạt ngay là vào thư rác hàng loạt.

07

Sáu chỗ hay tắc nhất

Năm cái đầu là lỗi dựng, sửa một lần là xong. Cái cuối là chuyện dài, phải quyết định.

Lệnh HTTP trả 204 mà không có gì chạy
Kho chưa bật Actions. Vào tab Actions bấm nút xanh cho phép chạy. Mã 204 chỉ có nghĩa là GitHub đã nhận yêu cầu, không có nghĩa là có việc gì được làm.
Đọc được bảng nhưng ghi không được, lỗi 91403
Ứng dụng Lark chưa được thêm vào Base với quyền sửa. Mở Base, vào phần thêm ứng dụng, chọn quyền có thể sửa. Chỉ cấp quyền trong Developer Console là chưa đủ.
Chạy thành công mà gửi không tới ai, log không báo lỗi
Máy đang trỏ vào Base khác. Đây là lỗi nguy hiểm nhất vì mọi thứ trông đều xanh. Kiểm bằng cách chạy dry_run rồi đọc con số người bị bỏ qua, bằng 0 là trỏ sai chỗ.
Thư gửi thành công mà không ai nhận được
Chưa bật SPF, DKIM và DMARC cho tên miền gửi. Đừng tra DNS để kiểm, cách đúng là gửi thử một lá rồi xem nó nằm ở Hộp thư chính hay Thư rác.
Bảng 12.9 luôn trống dù khách có bấm link
Link trong nội dung đang bị dán trần nên ra thư thành chữ chết, không có gì để đo. Mã phải tự bọc URL trần thành thẻ liên kết trước khi gắn mã đo. Nếu chưa dựng máy chủ đo thì bảng trống là đúng.
Thư dội ngược về hộp của mình, mã 912, bộ lọc rác từ chối
Đây là bộ lọc phía đầu gửi chặn, không phải địa chỉ khách hỏng. Tuyệt đối đừng đưa những địa chỉ này vào danh sách chặn, làm vậy là tự tay loại khách thật ra vĩnh viễn. Mở phiếu hỗ trợ với nhà cung cấp hộp thư, đưa kèm mã lỗi và Message ID trong bảng 12.8. Nếu lặp lại thì đổi sang dịch vụ gửi thư chuyên dụng, xem mục minh bạch ở dưới.

Nói rõ mấy điều

Cấu trúc 11 bảng, luồng chạy, mười luật trong khối lệnh và sáu chỗ tắc trên trang này đều đúc kết từ cỗ máy đang chạy thật của tôi. Nuôi dưỡng theo ngày, bản tin, đo mở và bấm, lọc địa chỉ ảo, quét thư dội đều đã chạy trên dữ liệu thật, và mấy cái bẫy nguy hiểm nhất tôi gặp rồi mới ghi vào đây.

  • Trang này không phát mã nguồn. Claude viết bộ mã mới trên máy bạn theo đặc tả, nên bộ của bạn sẽ khác bộ của tôi ở chi tiết, dù luồng chạy và cấu trúc bảng thì giống.
  • Tôi chưa chạy thử khối lệnh này từ đầu trên một máy trắng. Chỗ nào Claude làm khác mô tả, báo tôi để tôi sửa lại trang.
  • Hộp thư làm việc của công ty không phải công cụ gửi thư hàng loạt. Tôi đo được trên hộp thư của mình, chín lá đầu đi bình thường, từ lá thứ mười của một nội dung mới là bị bộ lọc đầu gửi chặn. Gửi đều đặn cho danh sách lớn thì phải chuyển sang dịch vụ gửi chuyên dụng. Hệ này gửi bằng SMTP tiêu chuẩn nên đổi nhà cung cấp chỉ là sửa vài dòng cấu hình, không đụng một dòng mã.
  • Phần đo mở chỉ để tham khảo, vì máy quét thư của nhà cung cấp cũng tự tải ảnh lên nên con số mở luôn bị thổi cao. Con số đáng tin là tỉ lệ bấm link.
  • Nên tách hộp thư gửi marketing khỏi hộp thư gửi xác nhận đơn hàng. Đi chung một hộp thì marketing kéo uy tín xuống, và thư xác nhận của khách cũng không tới nơi, lúc đó là mất tiền thật chứ không chỉ mất một lượt gửi.