Hiểu được một bản xuất workspace Slack
Bản xuất Slack không phải một tệp. Nó là một cây thư mục: mỗi kênh một thư mục, bên trong mỗi ngày một tệp JSON, cộng vài tệp metadata của workspace nằm ở gốc. Mở bất kỳ tệp ngày nào ra là bạn thấy một mảng các đối tượng tin nhắn, trong đó tác giả là một mã kiểu U04J8K2L9, phần chữ bị xâu chuỗi bởi các đánh dấu trong ngoặc nhọn, còn dấu thời gian là một mốc Unix có phần micro giây, lưu dưới dạng chuỗi.
Trang này lắp thứ đó lại thành những bản ghi đọc được, mỗi kênh một bản, theo thứ tự ngày, với tên người thật. Thả nguyên tệp .zip vào — nó được đọc trong tab trình duyệt này và không bao giờ được tải lên.
Tên người nằm ở một tệp khác
Đây là thứ duy nhất khiến một bản xuất Slack không đọc nổi nếu không có công cụ. Tin nhắn chỉ định danh tác giả bằng user id, không gì khác. Bảng ánh xạ từ những id đó sang tên người sống ở tệp users.json tại gốc kho lưu trữ, tách rời khỏi mọi tin nhắn cần đến nó.
Nên users.json được đọc trước, trước bất kỳ tệp kênh nào, và bảng ánh xạ thu được đi theo suốt quá trình phân tích. Mỗi người dùng có vài tên khả dĩ — tên thật, tên hiển thị, tên tài khoản — và chúng được thử theo đúng thứ tự đó, vì tên thật là thứ người đọc nhận ra còn tên hiển thị là thứ Slack hiện lên khi có đặt. Một số bản xuất còn nhúng thẳng đối tượng user_profile vào tin nhắn; khi có, nó được ưu tiên, bởi nó ghi lại cái tên tại thời điểm đó chứ không phải tên bây giờ.
Tin nhắn của bot thì không có user id nào cả, thay vào đó mang một mã bot và đôi khi một username. Những trường hợp này được xử lý riêng, để phần đầu ra của một tích hợp có người đứng tên chứ không hiện ra trống trơn.
Đánh dấu riêng của Slack
Phần chữ của tin nhắn không thuần. Slack bọc vài loại tham chiếu trong ngoặc nhọn, và để nguyên thì bản ghi rất khó đọc:
- Nhắc tên người dùng xuất hiện dưới dạng
<@U04J8K2L9>. Chúng được giải bằng chính bảng người dùng đó và trở thành một@tênđọc được. - Tham chiếu kênh xuất hiện dưới dạng
<#C01234ABC|general>, khi thì có tên sau dấu gạch đứng, khi thì không. - Liên kết có dạng
<https://example.com|văn bản hiển thị>. Phần chữ được giữ, kèm URL trong ngoặc đơn ngay sau, nên không mất cả cách diễn đạt lẫn đích đến. - Nhắc cả kênh như
<!here>và<!channel>trở thành dạng thuần tương ứng. - Thực thể HTML. Dấu và, ngoặc nhọn và dấu nháy bị thoát trong nguồn và được giải mã trở lại.
Nhiễu đáng bỏ
Slack ghi các sự kiện dưới dạng tin nhắn có subtype. Người vào người ra kênh, đổi mục đích và chủ đề, thông báo lưu trữ — tất cả nằm chung một mảng với hội thoại thật. Trong một workspace cỡ nào cũng vậy, số này có thể nhiều hơn tin nhắn thật, nhất là ở các kênh chung nơi mọi người bị thêm vào tự động. Chúng được xếp là tin nhắn hệ thống và bị bỏ theo mặc định.
Còn có trường hợp một tin nhắn không có chữ nào: một lần tải tệp lên, hoặc một bài đăng của bot mà nội dung nằm hết trong khối đính kèm. Phần đính kèm được kiểm tra xem có chữ không trước khi tin nhắn bị vứt bỏ, nên một tích hợp đăng kết quả dưới dạng đính kèm vẫn đóng góp nội dung chứ không biến mất.
Ghép các ngày lại với nhau
Vì mỗi kênh bị xé ra mỗi ngày một tệp, lịch sử của một kênh phải được gom lại. Các tệp được xử lý theo thứ tự đã sắp, mà với tệp đặt tên theo ngày thì đó chính là thứ tự thời gian, rồi tin nhắn được nối vào một bản ghi duy nhất cho mỗi kênh. Kết quả là một cuộc hội thoại liền mạch dưới một tiêu đề mang tên kênh, thay vì vài trăm mảnh rời.
Những tệp không phải dữ liệu kênh — danh sách kênh, nhật ký tích hợp, các bảng chỉ mục tin nhắn riêng — bị bỏ qua. Thứ gì phân tích không nổi thì bỏ qua chứ không làm hỏng cả kho, nên một ngày dữ liệu lỗi không lấy mất của bạn cả workspace.
Cái này dùng vào việc gì
Giữ lại lịch sử trước khi một workspace miễn phí chạm giới hạn tin nhắn và phần hội thoại cũ không còn với tới được. Chuyển sang công cụ khác mà vẫn để lại thứ gì đó đọc được. Trả lời một yêu cầu tuân thủ hay pháp lý bằng một bản ghi thay vì một thư mục JSON. Khôi phục lại phần thảo luận quanh một quyết định chưa từng được ghi ở đâu khác. Đưa một kênh dự án cho mô hình để dựng lại chuyện gì đã xảy ra suốt sáu tháng.
Lấy bản xuất
Chủ sở hữu hoặc quản trị viên workspace có thể tạo bản xuất từ phần thiết lập workspace, mục Nhập/Xuất dữ liệu, rồi Xuất. Bản xuất tiêu chuẩn bao gồm các kênh công khai. Kênh riêng tư và tin nhắn trực tiếp cần một mức xuất khác và, ở phần lớn các nơi, cần một lý do có hồ sơ.
Đọc tại chỗ
Bản xuất workspace là một trong những tệp nhạy cảm nhất mà một tổ chức tạo ra. Nó chứa thảo luận nội bộ, tên khách hàng, thông tin đăng nhập mà người ta lỡ dán vào những kênh lẽ ra không nên, và ý kiến thẳng thắn của tất cả những người liên quan. Với phần lớn công ty, tải nó lên một dịch vụ chuyển đổi của bên thứ ba là một sự cố phải báo cáo.
Ở đây không có gì được truyền đi. Kho lưu trữ được mở và phân tích bằng JavaScript ngay trong tab trình duyệt này, và chỉ phần kết quả dễ đọc được hiện ra. Không máy chủ nào nhận tệp, nên không có câu hỏi lưu trữ nào phải trả lời và không có gì để yêu cầu xóa.
Các nền tảng khác được xử lý ở trang xuất chat tổng hợp.