Prodantix
Tóm tắt nhanh
- Danh mục
- Nền tảng cho lập trình viên
- Trang web
- prodantix.com
- Bảng điều khiển
- app.prodantix.com
- Tài liệu
- prodantix.com/en/docs/overview
- API GraphQL
- api.prodantix.com/graphql
- Tiếp nhận sự kiện
- eu.api.prodantix.com/v1/events
- Thời gian thực
- eu.ws.prodantix.com
- Giao diện MCP
- eu.mcp.prodantix.com/mcp
- Phát lại phiên
- eu.replay.prodantix.com
Prodantix được làm cho những người xây dựng phần mềm. Đội ngũ sản phẩm nào cũng lặp lại ba câu hỏi giống nhau: người dùng thực sự đang làm gì trong ứng dụng của chúng ta, ai nên được thấy phần nào, và khi nào là lúc thích hợp để nói với họ điều gì đó.
Phần lớn công ty mua một công cụ riêng cho mỗi việc trong ba việc đó, và rắc rối bắt đầu từ đấy. Mỗi công cụ giữ bản ghi riêng về người dùng của bạn, rồi các bản ghi ấy dần lệch nhau. Công cụ này nghĩ rằng khách hàng đã thiết lập xong tài khoản. Công cụ kia chưa kịp cập nhật nên gửi cho cô ấy hướng dẫn cho bước cô ấy đã làm xong tuần trước. Không ai phát hiện ra, cho đến khi cô ấy phàn nàn, hoặc cho đến khi hai bảng số liệu hiện ra những con số khác nhau.
Bộ máy được dựng nên thế nào
Bốn thành phần nền tảng tạo nên bộ máy, và mọi thứ khác đều dựng trên chúng. Nên xem theo thứ tự, vì cái này dẫn sang cái kia. Tài liệu khái niệm trình bày đầy đủ.
Sự kiện
Một việc duy nhất mà người dùng đã làm, được ghi lại ngay khi nó diễn ra: một lượt đăng ký hoàn tất, một trang được mở, một biểu mẫu bỏ dở giữa chừng. Sự kiện là tín hiệu thô, và là thứ duy nhất đi vào hệ thống từ bên ngoài. Mọi thứ khác đều suy ra từ đó.
Trạng thái người dùng
Một hình chiếu sống, truy vấn được, của mọi điều đã biết về một người dùng, suy ra từ các sự kiện của họ và cập nhật ngay khi có sự kiện mới. Đây là nguồn sự thật mà phân tích, feature flag và nhắn tin đều đọc. Nó không phải bản tổng hợp hằng đêm, cũng không phải bản sao được một tác vụ nào đó giữ cho khớp. Chỉ có một mà thôi.
Quyết định
Một quy tắc được đánh giá trên trạng thái người dùng: ai thuộc một nhóm, ai nhận một feature flag, ai đủ điều kiện cho một thông điệp. Vì quyết định đọc trạng thái sống ngay lúc được hỏi, nó không thể trả lời dựa trên một bức tranh đã cũ.
Hành động
Điều bộ máy làm khi một quyết định được kích hoạt: mở một tính năng, gửi một thông điệp, khởi động một quy trình. Bản thân hành động cũng được ghi lại như một sự kiện, và chính điều đó khép kín vòng lặp: những gì bộ máy đã làm trở thành một phần của những gì nó biết.
Phân tích chính là đọc trạng thái
Phân tích trong Prodantix không phải một kho riêng giữ bản sao người dùng của bạn. Đó là việc đọc thẳng trạng thái người dùng. Phễu, tỷ lệ giữ chân và nhóm người dùng đều là truy vấn trên cùng một hình chiếu sống mà phần còn lại của bộ máy đang tác động lên, nên không có vòng SQL sang kho dữ liệu và không phải chờ bản tổng hợp hằng đêm: trạng thái vốn đã có hình dạng của câu hỏi. Nhóm người dùng ở đây là đối tượng hạng nhất: có tên, được định nghĩa bằng các mệnh đề, và thành viên được giữ đúng khi người ta bắt đầu hoặc thôi thỏa điều kiện.
Lưu lại câu hỏi bạn sẽ hỏi lần nữa
Một bảng điều khiển là tập hợp có tên của các ô, và một ô là truy vấn bạn từng chạy cộng với cách bạn muốn vẽ nó ra. Truy vấn được lưu đúng như trình khám phá đã gửi đi, nên cái mà một ô giữ là câu hỏi chứ không phải bức tranh của câu trả lời: mở nó ra là truy vấn chạy lại và bạn quay về trình khám phá ngay tại truy vấn ấy, tự do dời khung thời gian hay đổi cách bóc tách. Vì vậy bảng điều khiển không bao giờ là một bản xuất đã cũ. Nó là tập hợp những câu hỏi mà bộ máy trả lời từ trạng thái sống mỗi lần bạn nhìn vào.
Khi một con số tự nó dịch chuyển
Không ai canh được hết mọi biểu đồ. Phần canh chừng để Prodantix làm: nó đọc một chuỗi theo từng khoảng, tính ra đường nền và độ phân tán của chuỗi đó, rồi đánh dấu những khoảng nằm quá xa đường nền, ở cả hai chiều. Cả cú tụt lẫn cú vọt đều được báo, mỗi cái kèm theo đường nền mà nó rời khỏi và khoảng cách nó đã đi, để bạn phân biệt được một đứt gãy thật với nhiễu thường ngày. Độ nhạy là một tùy chỉnh chứ không phải quy tắc cứng, và bộ phát hiện không chịu đoán bừa: một chuỗi gần như phẳng, hoặc còn quá ngắn để có hình dạng, sẽ cho ra không gì cả thay vì một báo động sai.
Những người mà trạng thái nói tới
Trạng thái người dùng là một hình chiếu, còn danh bạ người dùng là nơi bạn đọc hình chiếu ấy từng người một. Bảng điều khiển liệt kê tất cả những ai mà dự án đã gặp, người hoạt động gần đây nhất lên trước, kèm ô tìm kiếm và một danh sách tiếp tục tải khi bạn đi xuống. Mỗi dòng mang những gì bộ máy đã tích lại về người đó: bao nhiêu sự kiện, bao nhiêu phiên khác nhau, lần đầu và lần cuối được nhìn thấy khi nào, việc cuối cùng đã làm là gì, thuộc những nhóm nào, cùng các thuộc tính dành riêng (tên, email, điện thoại, ảnh đại diện) được tách ra thành cột riêng. Mở một dòng sẽ thấy toàn bộ bảng thuộc tính, trong đó chứa những gì sự kiện của bạn đã đặt vào chứ không phải một bộ trường cố định. Nhóm có thẻ riêng và thuộc tính riêng, vì một công ty hay một không gian làm việc tự nó là một thực thể, và các dữ kiện về nó thuộc về nó chứ không thuộc về từng thành viên.
Một người, nhiều mã định danh
Một khách truy cập đến trước khi bạn biết họ là ai. SDK cấp cho họ một mã, họ đọc ba trang, rồi sau đó mới đăng ký. Chừng nào chưa ai nói cho bộ máy biết họ là ai thì hồ sơ ấy đơn giản là không có tên, và danh bạ nói đúng như vậy thay vì đoán. Khi việc đăng ký diễn ra, các mã được nối thành một chuỗi dẫn về một danh tính chuẩn duy nhất, nên dấu vết ẩn danh gập vào tài khoản đã có tên chứ không mở ra hồ sơ thứ hai. Mỗi dòng cho thấy có bao nhiêu mã dẫn về nó, và hồ sơ liệt kê chúng ra. Ở chỗ bộ máy tự nó không phân định được, bạn có thể ghép hai hồ sơ bằng tay: bạn chọn danh tính nào ở lại, thuộc tính của nó thắng khi có xung đột, và các con số cộng vào nhau. Ghép rồi thì không tách ra được nữa. Hồ sơ đúng như nó hiện ra trước lúc ghép vẫn nằm trong nhật ký kiểm toán, nên nội dung nó từng nói là lấy lại được, còn hai người thì một khi đã ghép sẽ không tách rời được.
Xem lại một phiên
Phân tích cho bạn biết hôm qua có mười một người bỏ dở cùng một biểu mẫu. Nó không cho biết vì sao. Ghi lại phiên sẽ ghi chính trang đó: SDK trình duyệt bắt lấy tài liệu cùng mọi thay đổi trên đó trong lúc người dùng thao tác, gom các thay đổi ấy thành những mảnh có thứ tự rồi gửi lên bộ ghi, và bảng điều khiển phát lại phiên đúng như nó đã diễn ra. Mỗi bản ghi đều nằm dưới cùng một định danh mà phần còn lại của bộ máy dùng, nên một phiên thuộc về một người bạn vốn đã tra cứu được, chứ không phải một mã khách truy cập chỉ tồn tại trong một công cụ riêng.
Bản ghi được phép giữ lại những gì
Che dữ liệu đã bật trước cả khi bạn cấu hình bất cứ điều gì. Mỗi ký tự gõ vào một ô đều được thay bằng dấu sao ngay trong trình duyệt, trước khi mảnh dữ liệu được gửi đi, nên thứ đến được bộ ghi chưa bao giờ chứa nội dung: độ dài và ranh giới từ vẫn còn, khiến bản phát lại trông vẫn như trang đó, còn chữ nghĩa thì không còn. Ô mật khẩu, email và điện thoại luôn bị che dù tính năng này bật hay tắt, nên tắt nó đi cũng không thể để lộ một ô thông tin đăng nhập. Chữ hiển thị trên trang vẫn được giữ, trừ khi bạn yêu cầu che cả phần đó. Mỗi mảnh đều ghi lại là nó có bị che hay không và bảng điều khiển đánh dấu phiên tương ứng, nên bạn luôn biết mình đang xem loại nào. Bản ghi nằm trong kho lưu trữ riêng tư: bảng điều khiển xin một liên kết ký tên ngắn hạn cho từng mảnh một, và không có nó thì không chạm tới được gì. Sau đó một phiên còn xem được bao lâu là do gói dịch vụ của bạn quyết định.
Cho những người khác nhau thấy những thứ khác nhau
Các nhóm thường muốn đưa thứ mới ra cho một nhúm người dùng trước để xem thế nào, rồi mới mở cho tất cả. Prodantix quyết định ai thấy gì bằng cách đánh giá điều kiện trên trạng thái người dùng: một thuộc tính, một toán tử và một giá trị, được kiểm tra ngay lúc feature flag được hỏi thay vì tra trong một danh sách đã lưu. Bạn có thể trao tính năng mới cho hai phần trăm khách hàng, xem họ dùng ra sao, rồi mở rộng hoặc thu lại mà không phải chờ một lần phát hành khác.
Thông điệp đến khi vẫn còn hữu ích
Một thông điệp chỉ đáng gửi khi nó còn giúp được. Prodantix có thể gửi ngay lúc một người làm điều gì đó, hoặc không làm được. Nếu khách hàng chạm ngưỡng gói dịch vụ, họ biết ngay lúc ấy, chứ không phải sáng hôm sau, khi họ đã bỏ cuộc và đi nơi khác.
Khi họ viết lại
Tin nhắn đi một chiều cho tới khi có người trả lời, và từ đó nó thành một luồng hỗ trợ. Prodantix cũng gánh những luồng ấy, và AI bên trong chúng soạn nháp chứ không gửi. Mô hình chỉ được đưa cho chính luồng đó và trạng thái của riêng người đó, ngoài ra không có gì: không phải cuộc trò chuyện của khách hàng khác, cũng không phải phần còn lại của dự án bạn. Nó viết một câu trả lời gợi ý, và câu trả lời ấy chỉ trở thành một lượt trong luồng khi nhân viên của bạn bấm gửi, nên “gợi ý, đừng gửi” là cách mã nguồn được dựng lên chứ không phải một quy tắc ai đó phải nhớ. Luồng ấy cũng mang chứng danh riêng. Khóa dự án nhận diện một dự án và đi theo mọi trang có cài SDK, nên nó không thể đứng thay cho một con người; mỗi cuộc trò chuyện nhận một token riêng, chỉ có hiệu lực với đúng luồng đó, và cái id nằm trong thân yêu cầu không bao giờ quyết định bạn đang nói với ai. Mở một cuộc trò chuyện là lối đi duy nhất không cần gì ngoài khóa công khai, nên nó bị giới hạn nhịp theo từng dự án và từng bên gọi.
Tự nối chuỗi các bước
Có những phản hồi không chỉ một bước, và bạn muốn tự mình bày ra. Một quy trình là một đồ thị nhỏ: nó khởi động thủ công, hoặc khi ai đó vào hay rời một nhóm, rồi từ đó đi qua các nút. Nút hành động làm một việc gì đó (ghi một dòng nhật ký, gọi webhook của bạn). Nút trì hoãn chờ, tối đa ba mươi ngày. Nút đợi dừng lại cho tới khi một tín hiệu có tên xuất hiện, kèm lối ra riêng nếu tín hiệu ấy không bao giờ tới. Nút rẽ nhánh kiểm tra các điều kiện dựa trên trạng thái người dùng rồi đi theo nhánh khớp, hoặc nhánh dự phòng. Các lượt chạy tiến từng nút một, và mỗi bước được ghi nhận trước khi bước kế tiếp được nhận, nên khi khởi động lại thì lượt chạy tiếp tục từ chỗ nó thật sự đã tới chứ không chạy lại từ đầu. Webhook được kiểm tra trước khi gọi: đích phải là một địa chỉ https công khai, yêu cầu đi tới đúng những địa chỉ mà bước kiểm tra đã duyệt, chuyển hướng không được đi theo, và cuộc gọi bị treo sẽ bị cắt.
Điều phối AI, và vòng lặp khép lại ra sao
Các giao diện ở trên vẫn để lại cho bạn việc nối các bước: nhận ra điều gì đó, xác định nó áp dụng cho ai, quyết định làm gì với nó. Prodantix có thể tự chạy trọn vòng lặp ấy. Bộ máy phát hiện thời điểm quan trọng trong trạng thái sống, chọn nhóm người dùng liên quan và quyết định hành động. Điều khiến nó vượt trên tự động hóa thông thường nằm ở phần cuối: hành động được ghi lại như một sự kiện, nên gộp ngược vào chính trạng thái người dùng mà quyết định kế tiếp sẽ đọc. Hành vi của chính hệ thống trở thành một phần những gì nó biết về người đó, thay vì là chuyện xảy ra bên lề.
Một đề xuất chờ một con người
Bộ máy không tự hành động theo kết luận của chính nó. Thứ nó đưa ra là một đề xuất, và đề xuất là một kế hoạch được viết ra: những cờ này, những nhóm này, thông điệp này. Trước khi được duyệt, mọi cờ, nhóm và cuộc trò chuyện mà nó nêu tên đều được đối chiếu với chính tenant của bạn, và một tham chiếu không đối chiếu được sẽ làm hỏng cả đề xuất chứ không bị lặng lẽ bỏ đi, và đó chính là điều giữ cho một mô hình vừa đọc phải thứ gì đó độc hại không với ra ngoài dự án của bạn. Phê duyệt là hành động của con người, và đó cũng là điểm mà bất cứ việc gì mới xảy ra: phần thực thi đi qua đúng những đường cờ và đường gửi tin mà bạn vẫn dùng bằng tay, nên quyền hạn, nhật ký kiểm toán và giới hạn theo gói của bạn vẫn còn nguyên hiệu lực. Duyệt hai lần thì lần thứ hai không làm gì cả.
Đưa sự kiện vào
Mọi thứ bắt đầu bằng một sự kiện gửi tới điểm tiếp nhận, và bộ máy gộp ngay vào trạng thái người dùng. SDK có cho web, di động và máy chủ. React là ngoại lệ duy nhất: vòng đời của nó cần một bộ chuyển tiếp riêng, một provider và hook cài đặt client đúng một lần và an toàn với StrictMode. Hướng dẫn nhanh nối tất cả trong vài dòng.
Khóa và môi trường
Mọi lệnh gọi SDK đều mang một khóa dự án, lấy từ bảng điều khiển. Tạo một dự án sẽ sinh ra hai môi trường, live và test, mỗi môi trường có khóa riêng: bạn phát triển với khóa test và phát hành với khóa live. Cả hai khóa chỉ hiện đúng một lần, ngay sau khi tạo, vì máy chủ chỉ lưu bản băm và không màn hình nào dựng lại được. Việc xoay khóa sẽ cấp khóa thay thế cho môi trường bạn chọn, và bạn quyết định khóa cũ ngừng ngay hay sau một thời gian ân hạn.
Bốn cách trò chuyện với nó
REST trải trên ba máy chủ: một cho feature flag và nhắn tin, một cho tiếp nhận sự kiện, một cho phát lại phiên, mỗi máy chủ phục vụ tài liệu OpenAPI riêng tại /openapi.json. Việc tiếp nhận trả về 202, nghĩa là sự kiện đã được nhận để xử lý chứ không phải đã lưu: một sự kiện sai định dạng vẫn có thể bị loại ở khâu sau. GraphQL bao phủ toàn bộ mô hình ứng dụng, gồm dự án, feature flag, quy trình, phân tích, nhắn tin, nhóm người dùng và thanh toán. Giao diện thời gian thực phát đi thay đổi feature flag, thông điệp và các lượt chạy quy trình, đồng thời ngắt ngay kết nối chưa xác thực. Giao diện MCP cho phép tác nhân AI đọc và ghi qua lệnh gọi công cụ; nó dành cho máy với máy và từ chối yêu cầu từ trình duyệt.
Dữ liệu vẫn là của bạn
Bạn có thể chạy Prodantix trên máy chủ của chúng tôi hoặc của chính bạn, cách nào cũng hoạt động như nhau. Mọi thứ bạn đưa vào đều có thể lấy lại đầy đủ, bất cứ lúc nào bạn muốn. Chúng tôi không bán dữ liệu của bạn và không dùng nó để huấn luyện mô hình AI. Do chính cách nó được dựng nên, Prodantix rốt cuộc nắm giữ bản ghi đầy đủ nhất về khách hàng mà bạn có ở bất cứ đâu, nên lời hứa ấy ở đây nặng hơn ở nơi khác.
Dành cho ai
Prodantix hợp với những nhóm đang chạy hai hoặc ba công cụ riêng cho việc này và đã chán cảnh chúng nói khác nhau. Nó hữu ích nhất khi bạn đã có đủ nhiều khách hàng đến mức không thể nắm được họ đang làm gì chỉ bằng cách hỏi quanh.
Truy cập Prodantix: prodantix.com