Chuyển bản chép voice note thành task bằng n8n

Khoa Truong Nguyen AnhKiểm tra nguồn ngày Cập nhật ngày

Voice note dễ ghi lại nhưng cũng dễ bị quên. Workflow này chuyển bản chép đã đọc lại thành các task có cấu trúc để kiểm tra trong n8n. Mỗi task giữ dòng nguồn để tiêu đề ngắn không mất ngữ cảnh ban đầu.

Đầu vào là văn bản, không phải file audio. Chép note bằng công cụ bạn chọn, đọc lại rồi đặt mỗi việc dự kiến trên một dòng trước khi chạy. Hướng dẫn dữ liệu voice input giúp kiểm tra bước nhận dạng trước đó diễn ra ở đâu.

Workflow tải xuống làm gì?

Workflow có ba node:

Manual start
     ↓
Voice note transcript
     ↓
Parse tasks

Manual start chạy ví dụ khi bạn chọn. Voice note transcript là node Edit Fields chứa note_id và transcript. Parse tasks là Code node JavaScript, trả một item cho mỗi dòng không trống.

Mỗi item có tiêu đề, ID note nguồn, số dòng gốc, văn bản gốc và task key. owner cùng due_date là null; status là needs_review. Workflow không có nơi gửi ra ngoài hoặc credential, nên chạy chỉ tạo ứng viên task trong kết quả execution, chưa tạo ticket hay gửi tin nhắn.

Đây là bộ tách theo quy tắc. Nó không quyết định câu có phải hành động, lấy ngày từ lời nói hoặc tóm tắt cuộc họp dài. Dòng chỉ chứa bình luận cũng thành ứng viên, vì vậy cần đọc lại cả transcript lẫn đầu ra.

Nhập ví dụ vào n8n

Tải workflow JSON. Trong editor n8n, dùng Import from File theo hướng dẫn nhập và xuất. Xem lại ba node sau khi nhập.

File không mang ID workflow của môi trường thử và không có tham chiếu credential. Nhập thành workflow mới thay vì thay workflow đang dùng. Ví dụ chạy thủ công không cần lịch, webhook hay bước publish.

Mở Voice note transcript và bắt đầu bằng giá trị mẫu. Có thể tải riêng văn bản ví dụ:

1. Review the retry patch before merging.
2. Run the regression tests for HTTP 401.
3. Draft the release note after verification.

Chạy thủ công rồi xem Parse tasks. Kết quả dự kiến có ba item. Đây là câu mẫu, không phải bản chép từ ghi âm thực hiện cho bài và không chứng minh đã có người review hay test một patch thật.

Đọc đầu ra trước khi dùng

Với note_id là demo-note-v1, item đầu của bộ mẫu là:

{
  "task_key": "demo-note-v1:1",
  "title": "Review the retry patch before merging.",
  "owner": null,
  "due_date": null,
  "status": "needs_review",
  "source_note_id": "demo-note-v1",
  "source_line": 1,
  "source_text": "1. Review the retry patch before merging."
}

Tiêu đề bỏ dấu bullet hoặc số thứ tự ở đầu, còn source_text giữ dòng gốc. Dòng trống bị bỏ qua nhưng số dòng nguồn giữ nguyên. Task ở dòng ba vẫn ghi dòng ba dù dòng hai trống.

Kiểm tra từng tiêu đề có đúng việc cần làm và còn điều kiện như “before merging” không. Chỉ gán người phụ trách hoặc deadline sau khi xác nhận. Nếu note nói “ngày mai”, parser giữ cụm đó trong tiêu đề, không đoán ngày trên lịch hoặc múi giờ.

Chuẩn bị note để không phải đoán ý

Dùng ID note ổn định gồm 1–64 chữ cái Latin không dấu, chữ số, dấu gạch dưới hoặc gạch nối; ký tự đầu là chữ hoặc số. Thêm phiên bản khi thay nội dung, chẳng hạn release-check-v2.

Một dòng không trống tạo một ứng viên task. Nếu công cụ giọng nói trả một đoạn có năm việc, tách thành năm dòng đúng ý trước khi chạy. Giữ phủ định và điều kiện cùng task. Không tự tách ở mọi dấu chấm vì tên file, chữ viết tắt và số thập phân cũng có dấu chấm.

Code node nhận tối đa 50 dòng không trống mỗi note và transcript dài tối đa 10.000 đơn vị chuỗi JavaScript. Tiêu đề sau xử lý phải có nội dung, tối đa 500 đơn vị. Đây là giới hạn của ví dụ, không phải giới hạn nền tảng n8n. JavaScript tính một số ký tự, gồm nhiều emoji, thành hai đơn vị.

Đầu vào không hợp lệ làm node báo lỗi thay vì xuất một phần batch chưa kiểm tra xong. ID note trùng trong cùng lượt bị từ chối. Câu bình thường không phải task vẫn có thể hợp lệ về cú pháp, nên kiểm tra dữ liệu không thay việc duyệt nội dung.

Giữ nguồn và xử lý việc chạy lại

Task key ghép ID note với số dòng. Chạy lại cùng đầu vào tạo cùng key, có thể giúp nơi nhận nhận ra record đã có. Ví dụ này không lưu lần chạy trước hoặc tự chống trùng.

Khi nối nơi nhận sau này, xác định key đã tồn tại thì tạo mới, cập nhật hay bỏ qua. Nếu sửa note mà giữ ID, cùng số dòng có thể đã là việc khác. Thêm phiên bản vào ID làm thay đổi đó rõ ràng, nhưng việc thay task cũ vẫn cần quy tắc của workflow.

Tài liệu Code node giải thích chế độ chạy và dữ liệu đầu ra. Ví dụ dùng Run Once for All Items, đọc $input.all() và gắn pairedItem để nhiều task đầu ra vẫn liên kết với đúng note đầu vào.

Phần nào đã được chạy thử?

Luồng ba node đã chạy trong n8n 2.38.7 biệt lập với Node.js 24.21.0. Bộ mẫu tạo ba item đúng tiêu đề, owner và ngày null, trạng thái needs_review. Bản dùng cho CLI import có thêm ID workflow tạm vì lệnh nhập yêu cầu ID; định nghĩa node và parser khớp file tải xuống.

Kiểm tra parser riêng bao gồm tiếng Việt, xuống dòng CRLF, giữ số dòng qua dòng trống, key lặp lại, nhiều note và đầu vào sai. Tài liệu Server CLI n8n mô tả chạy workflow đã lưu bằng ID; đây là đường kiểm tra tích hợp được dùng. Chưa thử nhập qua trình duyệt hoặc chạy trên n8n Cloud.

Không gọi công cụ nhận dạng audio, app quản lý task hoặc API model trả phí. Chi phí hosting và dịch vụ chép audio bạn chọn được tính riêng. Lịch sử execution vẫn có thể lưu văn bản theo cấu hình n8n, dù workflow không có node xử lý bên ngoài.

Bước tiếp theo hữu ích là chạy một note đã đọc lại, xem từng ứng viên rồi mới nối nơi nhận. Nếu note liên quan sửa code, quy trình prompt Cursor giúp cấu trúc yêu cầu; hướng dẫn commit và PR hỗ trợ mô tả công việc sau khi làm xong.

Nếu đang chọn cả bước ghi nhận đầu vào, hướng dẫn công cụ giọng nói cho developer tách yêu cầu dictation khỏi workflow transcript-to-task này.

Một số liên kết có thể mang lại hoa hồng nếu bạn đăng ký, không tăng chi phí của bạn. Quan hệ thương mại không quyết định khuyến nghị; bài viết nêu điều kiện và lựa chọn khác.