
Bắt Đầu Với FlowHunt
Mới sử dụng FlowHunt? Bắt đầu từ đây. Tìm hiểu những kiến thức cơ bản về xây dựng quy trình làm việc AI, triển khai chatbot và kết nối các nguồn kiến thức — tất...

Tài liệu tham khảo đầy đủ về tích hợp FlowHunt JS API v2. Nhúng chatbot, đăng ký tất cả 11 sự kiện, sử dụng biến flow, kích hoạt Chat Hook trigger giữa cuộc hội thoại bằng sendHook(), theo dõi tương tác bằng tham số URL và điều khiển cửa sổ chat theo chương trình.
FlowHunt JS API cho phép bạn kiểm soát hoàn toàn cách chatbot tích hợp với trang web của bạn. Sử dụng mã tích hợp v2, bạn có thể nhúng chatbot, đăng ký các sự kiện vòng đời và tương tác, truyền dữ liệu động qua biến flow, kích hoạt Chat Hook trigger giữa cuộc hội thoại bằng sendHook(), theo dõi tương tác bằng tham số URL và điều khiển cửa sổ chat theo chương trình.
Hướng dẫn này bao gồm mọi khía cạnh của JS API với các ví dụ mã mà bạn có thể sao chép và điều chỉnh cho dự án của mình.
Sao chép và dán đoạn mã dưới đây vào HTML ngay trước thẻ đóng </body>. Thay thế YOUR_CHATBOT_ID và YOUR_WORKSPACE_ID bằng các giá trị từ cài đặt chatbot FlowHunt của bạn.
<script id="fh-chatbot-script-YOUR_CHATBOT_ID">
var currentScript = document.currentScript
|| document.getElementById('fh-chatbot-script-YOUR_CHATBOT_ID');
var script = document.createElement('script');
script.async = true;
script.src = 'https://app.flowhunt.io/api/chatbot/YOUR_CHATBOT_ID'
+ '?workspace_id=YOUR_WORKSPACE_ID&v=2';
script.onload = function () {
window.FHChatbot_YOUR_CHATBOT_ID.init(function (chatbotManager) {
// The chatbot is ready — use chatbotManager here
});
};
if (currentScript && currentScript.parentNode) {
currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
} else {
document.head.appendChild(script);
}
</script>
ID chatbot trong tên biến toàn cục (window.FHChatbot_YOUR_CHATBOT_ID) sử dụng dấu gạch dưới thay vì dấu gạch ngang.
setConfig()Trước khi gọi init(), bạn có thể ghi đè các cài đặt chatbot mặc định bằng setConfig():
<script id="fh-chatbot-script-YOUR_CHATBOT_ID">
var currentScript = document.currentScript
|| document.getElementById('fh-chatbot-script-YOUR_CHATBOT_ID');
var script = document.createElement('script');
script.async = true;
script.src = 'https://app.flowhunt.io/api/chatbot/YOUR_CHATBOT_ID'
+ '?workspace_id=YOUR_WORKSPACE_ID&v=2';
script.onload = function () {
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
headerTitle: 'Support Assistant',
maxWindowWidth: '700px',
showChatButton: false,
flowVariables: {
userId: '12345',
plan: 'enterprise',
},
urlSuffix: '?utm_source=chatbot',
});
window.FHChatbot_YOUR_CHATBOT_ID.init(function (chatbotManager) {
// Chatbot initialised with custom config
});
};
if (currentScript && currentScript.parentNode) {
currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
} else {
document.head.appendChild(script);
}
</script>
| Tùy chọn | Kiểu | Mô tả |
|---|---|---|
headerTitle | string | Văn bản tiêu đề header tùy chỉnh |
maxWindowWidth | string | Chiều rộng tối đa của cửa sổ chat (ví dụ: "700px") |
maxWindowHeight | string | Chiều cao tối đa của cửa sổ chat |
inputPlaceholder | string | Văn bản placeholder cho ô nhập tin nhắn |
showChatButton | boolean | Hiển thị hoặc ẩn nút chat nổi mặc định |
openChatPanel | boolean | Tự động mở bảng chat khi tải trang |
flowVariables | object | Các cặp khóa–giá trị dữ liệu tùy chỉnh được truyền cho flow. Giá trị có thể là bất kỳ kiểu nào có thể tuần tự hóa JSON (string, number, boolean, object, array). |
urlSuffix | string | Chuỗi truy vấn được thêm vào tất cả URL do chatbot tạo ra |
cookieConsent | boolean | Bật tính năng duy trì phiên qua cookie |
embedded | string | Đặt để bật chế độ nhúng (không có nút đóng) |
theme | string | Chế độ giao diện |
flowVariables được hợp nhất vào mọi phiên mà chatbot tạo ra. Chúng thường được sử dụng làm ngữ cảnh tĩnh (đã biết tại thời điểm tải trang): ID người dùng, gói dịch vụ, ngôn ngữ hiện tại, v.v.
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
flowVariables: {
userId: getCurrentUserId(),
userEmail: getCurrentUserEmail(),
currentPage: window.location.pathname,
plan: 'enterprise',
},
});
Nếu người dùng điều hướng sau khi cửa sổ chat đã mở, các giá trị truyền tại đây sẽ trở nên lỗi thời. Để cập nhật chúng giữa cuộc hội thoại, hãy gọi
chatbotManager.sendHook()vớioptions.flowVariables— xem phần Giao tiếp host → flow giữa cuộc hội thoại bên dưới.
Tham số urlSuffix thêm chuỗi truy vấn vào mọi URL do chatbot tạo ra. Điều này hữu ích để theo dõi lưu lượng truy cập từ chatbot trong các công cụ phân tích:
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
urlSuffix: '?utm_source=chatbot&utm_medium=widget',
});
Các trường hợp sử dụng:
Được bổ sung vào tháng 4 năm 2026 như một phần của tính năng FlowHunt Chat Hook.
Trong các ứng dụng trang đơn (SPA), cửa sổ chat thường vẫn mở trong khi người dùng điều hướng giữa các màn hình. Một khi chat đang chạy, flowVariables được truyền qua setConfig() sẽ trở nên lỗi thời, và không có cách nào để báo cho flow biết về một sự kiện nào đó đã xảy ra trên trang chủ. Một phương thức duy nhất của trình quản lý — sendHook(name, payload, options?) — bao quát cả hai trường hợp “kích hoạt trigger” và “chỉ cập nhật ngữ cảnh”:
name và (tùy chọn) một payload để kích hoạt trigger Chat Hook của flow. Tác giả flow chỉ cần thả một node Chat Hook lên canvas và phân nhánh theo {ChatHook.hook_name} để quyết định việc cần làm.options.flowVariables để hợp nhất các biến phiên đồng thời — các giá trị được lưu trước khi trigger kích hoạt và vẫn còn khả dụng cho phần còn lại của phiên.options.flowVariables vẫn được hợp nhất, nhưng không trigger nào chạy và không bị tính phí credit. Điều này có nghĩa là các trang chủ có thể gọi sendHook() một cách lạc quan mà không cần biết liệu tác giả flow đã gắn trigger hay chưa.sendHook() là một thao tác không hoạt động an toàn trước khi phiên tồn tại (được lưu đệm nội bộ và flush khi phiên được tạo) và không bao giờ throw ra trang chủ — lỗi mạng chỉ được ghi qua console.warn.
Các giới hạn ở phía máy chủ và máy khách áp dụng cho sendHook(). Vi phạm chúng không gây crash — backend trả về HTTP 422 và trình quản lý ghi log qua console.warn mà không throw.
| Ràng buộc | Giới hạn | Nơi áp dụng | Khi vi phạm |
|---|---|---|---|
Độ dài name của sendHook | 1–256 ký tự | Backend (Pydantic) | HTTP 422, trigger không kích hoạt |
Số lượng khóa trong options.flowVariables | ≤ 64 | Backend (Pydantic) | HTTP 422, không lưu gì cả |
Độ dài mỗi khóa trong options.flowVariables | ≤ 128 ký tự | Backend (Pydantic) | HTTP 422, không lưu gì cả |
| Số lệnh gọi trước khi có phiên được trình quản lý đệm | 50 | Widget (trong trình duyệt) | Lệnh gọi xếp hàng cũ nhất bị loại bỏ và console.warn được ghi |
Giới hạn của bộ đệm trước phiên chỉ quan trọng trên các trang nơi việc tạo phiên thất bại vô hạn (ví dụ: lỗi mạng vĩnh viễn). Trong điều kiện bình thường, hàng đợi được flush ngay khi onFHChatbotSessionCreated kích hoạt.
onFHError).hook_name, payload, flow_variables) vào bất kỳ bước downstream nào bạn muốn kích hoạt (Generator, Chat Output, Tool Calls, các nhánh điều kiện trên hook_name, v.v.).name mà trang chủ truyền cho sendHook() là một nhãn để flow của bạn phân nhánh, không phải khóa định tuyến — backend không khớp tên với các node. Thay vào đó, Chat Hook trigger duy nhất của flow sẽ kích hoạt và để lộ tên dưới dạng {ChatHook.hook_name}, mà bạn tham chiếu trong logic flow của mình để quyết định việc cần làm.
Ví dụ system prompt:
If {ChatHook.hook_name} is "screen_changed", briefly summarise the page at
{ChatHook.payload.url}. If it is "user_action", acknowledge the action and
update memory. Otherwise, continue the conversation normally.
Đối với định tuyến phức tạp hơn, hãy nối một bước điều kiện trên {ChatHook.hook_name} và phân nhánh thành nhiều đường downstream.
chatbotManager.sendHook(name, payload, options?)chatbotManager.sendHook(
name: string,
payload?: Record<string, unknown>,
options?: { flowVariables?: Record<string, unknown> }
): Promise<void>;
Đối số
| Đối số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
name | string | có | Nhãn được chuyển tiếp đến flow dưới dạng {ChatHook.hook_name}. Trigger kích hoạt bất kể giá trị; logic flow của bạn phân nhánh dựa trên nó. |
payload | object | không | Payload JSON được trao cho trigger dưới dạng {ChatHook.payload}. Được xác thực theo schema của node nếu được bật. Mặc định {}. |
options.flowVariables | object | không | Các biến phiên cần hợp nhất trước khi trigger kích hoạt. Có sẵn cho các bước downstream và các tin nhắn tương lai của người dùng. |
Hành vi
onFHChatbotSessionCreated là an toàn; lệnh gọi được lưu đệm và flush khi phiên tồn tại. Bộ đệm có giới hạn — xem Giới hạn đầu vào bên trên.sendHook() một cách lạc quan trước khi tác giả flow gắn trigger. options.flowVariables vẫn được lưu ngay cả trong trường hợp đó, do đó cùng một lệnh gọi có thể dùng làm bản cập nhật chỉ ngữ cảnh.onFHError).name và options.flowVariables đều có giới hạn — xem Giới hạn đầu vào bên trên. Vi phạm trả về HTTP 422 và không có gì được lưu.onFHChatbotFlowVariablesUpdate nếu options.flowVariables được cung cấp (xem Tham chiếu sự kiện).console.warn.Ví dụ — gợi ý chủ động khi điều hướng SPA
window.FHChatbot_YOUR_CHATBOT_ID.init(function (chatbotManager) {
window.addEventListener('hashchange', function () {
chatbotManager.sendHook('screen_changed', {
url: window.location.href,
screen_name: getScreenName(),
}, {
flowVariables: { current_page_url: window.location.href },
});
});
});
Ví dụ — cập nhật chỉ ngữ cảnh (không gắn Chat Hook)
Nếu flow không có Chat Hook trigger, lệnh gọi sẽ là 200 im lặng — vì vậy cùng một API có thể giữ flow_variables đồng bộ mà không kích hoạt bất cứ điều gì:
window.FHChatbot_YOUR_CHATBOT_ID.init(function (chatbotManager) {
window.addEventListener('hashchange', function () {
chatbotManager.sendHook('navigate', {}, {
flowVariables: {
current_page_url: window.location.href,
screen_name: getScreenName(),
},
});
});
});
{ChatHook.hook_name} và {ChatHook.payload.foo} — các giá trị truyền qua sendHook('x', { foo: 1 }) được hiển thị trên đường thực thi của Chat Hook trigger. Chỉ khả dụng trên đường được khởi động bởi việc kích hoạt hook.{flow_variables.foo} — các giá trị truyền qua options.flowVariables được hợp nhất vào bag biến của phiên trước khi trigger kích hoạt. Mọi đường thực thi (bao gồm cả các tin nhắn người dùng được kích hoạt thông thường qua Chat Input) đều có thể đọc chúng.Nếu bạn muốn tin nhắn tiếp theo của người dùng thấy một giá trị mới, hãy đặt nó vào options.flowVariables — chỉ riêng payload chỉ ảnh hưởng đến lần thực thi được khởi động bởi hook đó.
FlowHunt JS API phát 11 sự kiện tùy chỉnh trên đối tượng window. Tất cả sự kiện sử dụng API CustomEvent
với bubbles: true và composed: true.
onFHChatbotReadyĐược kích hoạt khi widget chatbot đã được render hoàn toàn và sẵn sàng sử dụng.
onFHChatbotSessionCreatedĐược kích hoạt khi phiên chat mới được tạo trên máy chủ.
event.detail.sessionId — ID của phiên vừa được tạo.onFHChatbotWindowOpenedĐược kích hoạt khi người dùng mở cửa sổ chat. Không kích hoạt trong chế độ nhúng.
onFHChatbotWindowClosedĐược kích hoạt khi người dùng đóng cửa sổ chat. Không kích hoạt trong chế độ nhúng.
onFHMessageSentĐược kích hoạt khi người dùng gửi tin nhắn.
event.detail.metadata = {
content: 'Hello, I need help with...',
createdAt: '2026-02-19T10:30:00.000Z',
};
onFHMessageReceivedĐược kích hoạt khi chatbot nhận và hiển thị phản hồi.
event.detail.metadata = {
flow_id: 'abc123',
message_id: 'msg_456',
message: 'Sure, I can help you with that!',
sender: {
sender_name: 'Support Agent',
sender_avatar: 'https://example.com/avatar.png',
},
};
sender là tùy chọn và chỉ xuất hiện khi có nhân viên hỗ trợ tham gia.
onFHFormDataSentĐược kích hoạt khi người dùng gửi dữ liệu biểu mẫu qua chatbot.
event.detail.metadata = {
objectData: { name: 'John', email: 'john@example.com' },
createdAt: '2026-02-19T10:31:00.000Z',
};
onFHFeedbackĐược kích hoạt khi người dùng đưa ra phản hồi tích cực / tiêu cực cho tin nhắn của chatbot.
event.detail.metadata = {
message_id: 'msg_456',
content: 'Optional feedback text',
feedback: 'P', // 'P' = positive, 'N' = negative
};
onFHToolCallĐược kích hoạt khi một công cụ hoặc hành động được thực thi trong quá trình xử lý flow. Chỉ kích hoạt trong chế độ flowAssistant và flowAssistantV3.
event.detail.metadata = {
metadata: {
flow_id: 'abc123',
message_id: 'msg_789',
message: 'Calling search API...',
},
createdAt: '2026-02-19T10:32:00.000Z',
};
onFHErrorĐược kích hoạt khi xảy ra lỗi trong quá trình hoạt động của chatbot.
event.detail.metadata = {
metadata: {
flow_id: 'abc123',
message_id: 'msg_err',
message: 'Flow execution failed',
},
createdAt: '2026-02-19T10:33:00.000Z',
};
onFHChatbotFlowVariablesUpdateĐược bổ sung vào tháng 4 năm 2026.
Được kích hoạt sau một lệnh gọi chatbotManager.sendHook(...) thành công có cung cấp options.flowVariables. Không kích hoạt cho các lệnh gọi sendHook() không có flowVariables.
event.detail = {
variables: {
current_page_url: 'https://example.com/products',
screen_name: 'products',
},
};
Sử dụng nó để quan sát các biến đã được hợp nhất (ví dụ: để đồng bộ trạng thái ở phía host của bạn, để gỡ lỗi, hoặc để render lại một phần tử UI phụ thuộc vào cùng dữ liệu).
Có hai cách để đăng ký các sự kiện chatbot.
Sử dụng window.addEventListener ở bất kỳ đâu trong trang. Cách này hoạt động ngay cả trước khi chatbot được tải:
<script>
document.addEventListener('DOMContentLoaded', function () {
window.addEventListener('onFHChatbotReady', function () {
console.log('Chatbot is ready');
});
window.addEventListener('onFHChatbotSessionCreated', function (event) {
console.log('Session created:', event.detail.sessionId);
});
window.addEventListener('onFHChatbotWindowOpened', function () {
console.log('Chat window opened');
});
window.addEventListener('onFHChatbotWindowClosed', function () {
console.log('Chat window closed');
});
window.addEventListener('onFHMessageSent', function (event) {
console.log('User sent:', event.detail.metadata.content);
});
window.addEventListener('onFHMessageReceived', function (event) {
console.log('Bot replied:', event.detail.metadata.message);
});
window.addEventListener('onFHFormDataSent', function (event) {
console.log('Form submitted:', event.detail.metadata.objectData);
});
window.addEventListener('onFHFeedback', function (event) {
var fb = event.detail.metadata;
console.log('Feedback on message', fb.message_id, ':', fb.feedback);
});
window.addEventListener('onFHToolCall', function (event) {
console.log('Tool called:', event.detail.metadata);
});
window.addEventListener('onFHError', function (event) {
console.error('Chatbot error:', event.detail.metadata);
});
window.addEventListener('onFHChatbotFlowVariablesUpdate', function (event) {
console.log('Variables merged:', event.detail.variables);
});
});
</script>
Để gỡ bỏ một trình lắng nghe, hãy giữ tham chiếu đến hàm xử lý:
var handleMessage = function (event) {
console.log(event.detail.metadata);
};
window.addEventListener('onFHMessageReceived', handleMessage);
// Later …
window.removeEventListener('onFHMessageReceived', handleMessage);
Bên trong callback init(), sử dụng các phương thức tích hợp của trình quản lý chatbot:
window.FHChatbot_YOUR_CHATBOT_ID.init(function (chatbotManager) {
chatbotManager.onSessionCreated(function () {
console.log('Session created');
});
chatbotManager.onWindowOpened(function () {
console.log('Window opened');
});
chatbotManager.onWindowClosed(function () {
console.log('Window closed');
});
chatbotManager.onMessageSent(function (event) {
console.log('User sent:', event.metadata);
});
chatbotManager.onMessageReceived(function (event) {
console.log('Bot replied:', event.metadata);
});
chatbotManager.onFormDataSent(function (event) {
console.log('Form data:', event.metadata);
});
chatbotManager.onFeedback(function (event) {
console.log('Feedback:', event.metadata);
});
chatbotManager.onToolCall(function (event) {
console.log('Tool call:', event.metadata);
});
chatbotManager.onError(function (event) {
console.error('Error:', event.metadata);
});
});
| Phương thức | Tham số | Mô tả |
|---|---|---|
onSessionCreated(fn) | fn: () => void | Lắng nghe sự kiện tạo phiên |
onWindowOpened(fn) | fn: () => void | Lắng nghe sự kiện mở cửa sổ |
onWindowClosed(fn) | fn: () => void | Lắng nghe sự kiện đóng cửa sổ |
onMessageSent(fn) | fn: (event) => void | Lắng nghe tin nhắn của người dùng |
onMessageReceived(fn) | fn: (event) => void | Lắng nghe phản hồi của bot |
onFormDataSent(fn) | fn: (event) => void | Lắng nghe gửi biểu mẫu |
onFeedback(fn) | fn: (event) => void | Lắng nghe phản hồi của người dùng |
onToolCall(fn) | fn: (event) => void | Lắng nghe thực thi công cụ |
onError(fn) | fn: (event) => void | Lắng nghe lỗi |
openChat() | — | Mở bảng chat |
closeChat() | — | Đóng bảng chat |
sendHook(name, payload?, options?) (mới) | name: string, payload?: object, options?: { flowVariables?: object } | Kích hoạt Chat Hook trigger trong flow đang chạy (hoặc hợp nhất options.flowVariables im lặng nếu không có trigger được gắn) |
Để kiểm soát hoàn toàn thời điểm chatbot xuất hiện, hãy ẩn nút nổi mặc định và mở chat theo chương trình — ví dụ, từ nút tùy chỉnh của bạn.
<button id="my-chat-button">Chat with us</button>
<script id="fh-chatbot-script-YOUR_CHATBOT_ID">
var currentScript = document.currentScript
|| document.getElementById('fh-chatbot-script-YOUR_CHATBOT_ID');
var script = document.createElement('script');
script.async = true;
script.src = 'https://app.flowhunt.io/api/chatbot/YOUR_CHATBOT_ID'
+ '?workspace_id=YOUR_WORKSPACE_ID&v=2';
script.onload = function () {
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({ showChatButton: false });
window.FHChatbot_YOUR_CHATBOT_ID.init(function (chatbotManager) {
document.getElementById('my-chat-button')
.addEventListener('click', function () {
chatbotManager.openChat();
});
});
};
if (currentScript && currentScript.parentNode) {
currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
} else {
document.head.appendChild(script);
}
</script>
Bạn có thể kết hợp kích hoạt ẩn với trình lắng nghe sự kiện để tạo các tương tác nâng cao:
<button id="open-chat" style="display:none;">Need help?</button>
<script>
window.addEventListener('onFHChatbotReady', function () {
document.getElementById('open-chat').style.display = 'block';
});
</script>
<script id="fh-chatbot-script-YOUR_CHATBOT_ID">
var currentScript = document.currentScript
|| document.getElementById('fh-chatbot-script-YOUR_CHATBOT_ID');
var script = document.createElement('script');
script.async = true;
script.src = 'https://app.flowhunt.io/api/chatbot/YOUR_CHATBOT_ID'
+ '?workspace_id=YOUR_WORKSPACE_ID&v=2';
script.onload = function () {
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({ showChatButton: false });
window.FHChatbot_YOUR_CHATBOT_ID.init(function (chatbotManager) {
document.getElementById('open-chat')
.addEventListener('click', function () {
chatbotManager.openChat();
});
});
};
if (currentScript && currentScript.parentNode) {
currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
} else {
document.head.appendChild(script);
}
</script>
Một ví dụ hoạt động đầy đủ minh họa việc ghi đè cấu hình, theo dõi sự kiện, kích hoạt chat tùy chỉnh và phương thức sendHook() mới kết hợp với nhau:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>FlowHunt Chatbot Integration</title>
</head>
<body>
<h1>My Website</h1>
<button id="open-chat-btn">Talk to our AI assistant</button>
<button id="close-chat-btn">Close chat</button>
<!-- Subscribe to events before the chatbot loads -->
<script>
document.addEventListener('DOMContentLoaded', function () {
window.addEventListener('onFHChatbotReady', function () {
console.log('Chatbot widget is ready');
});
window.addEventListener('onFHChatbotSessionCreated', function (event) {
console.log('New chat session started:', event.detail.sessionId);
});
window.addEventListener('onFHMessageSent', function (event) {
console.log('User message:', event.detail.metadata.content);
});
window.addEventListener('onFHMessageReceived', function (event) {
console.log('Bot response:', event.detail.metadata.message);
});
window.addEventListener('onFHChatbotFlowVariablesUpdate', function (event) {
console.log('Context updated:', event.detail.variables);
});
window.addEventListener('onFHError', function (event) {
console.error('Chatbot error:', event.detail.metadata);
});
});
</script>
<!-- FlowHunt integration -->
<script id="fh-chatbot-script-YOUR_CHATBOT_ID">
var currentScript = document.currentScript
|| document.getElementById('fh-chatbot-script-YOUR_CHATBOT_ID');
var script = document.createElement('script');
script.async = true;
script.src = 'https://app.flowhunt.io/api/chatbot/YOUR_CHATBOT_ID'
+ '?workspace_id=YOUR_WORKSPACE_ID&v=2';
script.onload = function () {
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
showChatButton: false,
headerTitle: 'AI Assistant',
maxWindowWidth: '600px',
flowVariables: {
source: 'website',
current_page_url: window.location.href,
},
urlSuffix: '?utm_source=chatbot',
});
window.FHChatbot_YOUR_CHATBOT_ID.init(function (chatbotManager) {
// Open / close from custom buttons
document.getElementById('open-chat-btn')
.addEventListener('click', function () {
chatbotManager.openChat();
});
document.getElementById('close-chat-btn')
.addEventListener('click', function () {
chatbotManager.closeChat();
});
// Keep the flow's context in sync with SPA navigation and
// optionally fire the Chat Hook trigger (if the flow has one wired).
// If the flow has no Chat Hook, the call is a silent 200 — the
// flow_variables still get merged, so the same line covers both
// "notify the flow" and "just update context".
window.addEventListener('hashchange', function () {
chatbotManager.sendHook('screen_changed', {
url: window.location.href,
}, {
flowVariables: { current_page_url: window.location.href },
});
});
});
};
if (currentScript && currentScript.parentNode) {
currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
} else {
document.head.appendChild(script);
}
</script>
</body>
</html>

Mới sử dụng FlowHunt? Bắt đầu từ đây. Tìm hiểu những kiến thức cơ bản về xây dựng quy trình làm việc AI, triển khai chatbot và kết nối các nguồn kiến thức — tất...

Tăng sức mạnh cho chatbot HubSpot của bạn với FlowHunt. Kiểm soát tốt hơn các phản hồi, nguồn dữ liệu và luồng hội thoại.

Tích hợp FlowHunt với interactive-mcp để cho phép giao tiếp bảo mật, thời gian thực giữa các mô hình ngôn ngữ lớn và người dùng trên máy tính cục bộ. Thu thập đ...
Đồng Ý Cookie
Chúng tôi sử dụng cookie để cải thiện trải nghiệm duyệt web của bạn và phân tích lưu lượng truy cập của mình. See our privacy policy.