
mcp التفاعلي
قم بدمج FlowHunt مع mcp التفاعلي لتمكين التواصل الآمن والفوري بين نماذج اللغة الكبيرة والمستخدمين على الأجهزة المحلية. التقط مدخلات المستخدم، وقدم إشعارات النظا...

مرجع شامل لتكامل FlowHunt JS API الإصدار الثاني. قم بتضمين روبوت الدردشة، والاشتراك في جميع الأحداث الأحد عشر، واستخدم متغيرات التدفق، وأطلق مشغّل Chat Hook في منتصف المحادثة باستخدام sendHook()، وتتبّع التفاعلات بمعلمات URL، وتحكّم في نافذة الدردشة برمجياً.
يمنحك FlowHunt JS API تحكماً كاملاً في كيفية تكامل روبوت الدردشة مع موقعك الإلكتروني. باستخدام كود التكامل الإصدار الثاني، يمكنك تضمين روبوت الدردشة، والاشتراك في أحداث دورة الحياة والتفاعل، وتمرير البيانات الديناميكية عبر متغيرات التدفق، وإطلاق مشغّل Chat Hook في منتصف المحادثة باستخدام sendHook()، وتتبّع التفاعلات بمعلمات URL، والتحكم في نافذة الدردشة برمجياً.
يغطي هذا الدليل كل جانب من جوانب JS API مع أمثلة كود يمكنك نسخها وتكييفها مع مشروعك.
انسخ المقتطف أدناه والصقه في HTML الخاص بك قبل وسم الإغلاق </body> مباشرة. استبدل YOUR_CHATBOT_ID و YOUR_WORKSPACE_ID بالقيم من إعدادات روبوت الدردشة في FlowHunt.
<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>
معرف روبوت الدردشة في اسم المتغير العام (window.FHChatbot_YOUR_CHATBOT_ID) يستخدم الشرطات السفلية بدلاً من الواصلات.
setConfig()قبل استدعاء init()، يمكنك تجاوز إعدادات روبوت الدردشة الافتراضية باستخدام 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>
| Option | Type | Description |
|---|---|---|
headerTitle | string | نص عنوان رأسي مخصص |
maxWindowWidth | string | الحد الأقصى لعرض نافذة الدردشة (مثال "700px") |
maxWindowHeight | string | الحد الأقصى لارتفاع نافذة الدردشة |
inputPlaceholder | string | نص العنصر النائب لحقل إدخال الرسالة |
showChatButton | boolean | إظهار أو إخفاء زر الدردشة العائم الافتراضي |
openChatPanel | boolean | فتح لوحة الدردشة تلقائياً عند تحميل الصفحة |
flowVariables | object | أزواج المفتاح والقيمة للبيانات المخصصة المُمررة إلى التدفق. يمكن أن تكون القيم من أي نوع قابل للتسلسل بصيغة JSON (سلسلة نصية، رقم، قيمة منطقية، كائن، مصفوفة). |
urlSuffix | string | سلسلة استعلام تُلحق بجميع عناوين URL التي ينشئها روبوت الدردشة |
cookieConsent | boolean | تفعيل استمرار الجلسة عبر ملفات تعريف الارتباط |
embedded | string | تعيين لتفعيل الوضع المضمّن (بدون زر إغلاق) |
theme | string | وضع السمة |
تُدمج flowVariables في كل جلسة ينشئها روبوت الدردشة. تُستخدم عادةً كسياق ثابت (معروف عند تحميل الصفحة): معرف المستخدم، الباقة، اللغة الحالية، وما إلى ذلك.
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
flowVariables: {
userId: getCurrentUserId(),
userEmail: getCurrentUserEmail(),
currentPage: window.location.pathname,
plan: 'enterprise',
},
});
إذا تنقّل المستخدم بعد فتح الدردشة، تصبح القيم المُمررة هنا قديمة. لتحديثها في منتصف المحادثة، استدعِ
chatbotManager.sendHook()معoptions.flowVariables— انظر التواصل من المضيف إلى التدفق في منتصف المحادثة أدناه.
تُلحق معلمة urlSuffix سلسلة استعلام بكل عنوان URL ينشئه روبوت الدردشة. هذا مفيد لتتبع حركة المرور الناتجة عن روبوت الدردشة في أدوات التحليل:
window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
urlSuffix: '?utm_source=chatbot&utm_medium=widget',
});
حالات الاستخدام:
أُضيف في أبريل 2026 كجزء من ميزة Chat Hook في FlowHunt.
في تطبيقات الصفحة الواحدة (SPA) تظل نافذة الدردشة مفتوحة عادةً بينما يتنقّل المستخدم بين الشاشات. وبمجرد تشغيل الدردشة، تصبح flowVariables المُمررة عبر setConfig() قديمة، ولا توجد طريقة لتنبيه التدفق بشيء حدث على الصفحة المضيفة. طريقة مدير واحدة — sendHook(name, payload, options?) — تغطي كلتا حالتي الاستخدام: “إطلاق مشغّل” و"مجرد تحديث السياق":
name و(اختيارياً) payload لإطلاق مشغّل Chat Hook الخاص بالتدفق. يضع مؤلف التدفق عقدة Chat Hook واحدة على اللوحة ويتفرّع على {ChatHook.hook_name} ليقرر ما يفعله.options.flowVariables لدمج متغيرات الجلسة في الوقت نفسه — تُحفظ القيم قبل إطلاق المشغّل وتظل متاحة لبقية الجلسة.options.flowVariables رغم ذلك، لكن لا يعمل أي مشغّل ولا يُخصم أي رصيد. هذا يعني أن الصفحات المضيفة يمكنها استدعاء sendHook() بتفاؤل دون معرفة ما إذا كان مؤلف التدفق قد ربط مشغّلاً بعد.sendHook() آمن بلا تأثير قبل وجود الجلسة (يُخزَّن داخلياً في مخزن مؤقت ويُفرَّغ بمجرد إنشاء الجلسة) ولا يطرح أبداً استثناء إلى الصفحة المضيفة — تُسجَّل أخطاء الشبكة عبر console.warn فقط.
الحدود الخادمية والعميلية التي تنطبق على sendHook(). مخالفتها ليست انهياراً — الواجهة الخلفية تُرجع HTTP 422 ويُسجِّل المدير عبر console.warn دون طرح استثناء.
| Constraint | Limit | Where enforced | On violation |
|---|---|---|---|
طول name في sendHook | 1–256 حرفاً | الواجهة الخلفية (Pydantic) | HTTP 422، لا يُطلق المشغّل |
عدد المفاتيح في options.flowVariables | ≤ 64 | الواجهة الخلفية (Pydantic) | HTTP 422، لا يُحفَظ شيء |
طول كل مفتاح في options.flowVariables | ≤ 128 حرفاً | الواجهة الخلفية (Pydantic) | HTTP 422، لا يُحفَظ شيء |
| الاستدعاءات قبل الجلسة المُخزّنة في المدير | 50 | الودجت (في المتصفح) | يُحذف أقدم استدعاء مُدرج ويُسجَّل console.warn |
سعة المخزن المؤقت قبل الجلسة تهمّ فقط في الصفحات التي يفشل فيها إنشاء الجلسة بشكل دائم (مثلاً خطأ شبكة دائم). في الظروف العادية تُفرَّغ القائمة بمجرد إطلاق onFHChatbotSessionCreated.
onFHError).hook_name، payload، flow_variables) بأي خطوات لاحقة تريد تشغيلها (Generator، Chat Output، Tool Calls، فروع شرطية على hook_name، إلخ).الـ name الذي تمرره الصفحة المضيفة إلى sendHook() هو علامة ليتفرّع عليها تدفقك، وليس مفتاح توجيه — الواجهة الخلفية لا تطابق الأسماء مع العقد. بدلاً من ذلك، يُطلق مشغّل Chat Hook الواحد للتدفق ويعرض الاسم بصيغة {ChatHook.hook_name}، الذي تشير إليه في منطق تدفقك لتقرر ما تفعله.
مثال على موجّه النظام:
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.
للتوجيه الأكثر تعقيداً، اربط خطوة شرطية على {ChatHook.hook_name} وتفرّع إلى عدة مسارات لاحقة.
chatbotManager.sendHook(name, payload, options?)chatbotManager.sendHook(
name: string,
payload?: Record<string, unknown>,
options?: { flowVariables?: Record<string, unknown> }
): Promise<void>;
الوسائط
| Argument | Type | Required | Description |
|---|---|---|---|
name | string | نعم | علامة تُمرَّر إلى التدفق بصيغة {ChatHook.hook_name}. يُطلق المشغّل بصرف النظر عن القيمة؛ ويتفرّع منطق تدفقك عليها. |
payload | object | لا | حمولة JSON تُسلَّم إلى المشغّل بصيغة {ChatHook.payload}. تُتحقَّق مقابل مخطط العقدة إن كان مفعَّلاً. الافتراضي {}. |
options.flowVariables | object | لا | متغيرات جلسة لدمجها قبل إطلاق المشغّل. تكون متاحة للخطوات اللاحقة ولرسائل المستخدم القادمة. |
السلوك
onFHChatbotSessionCreated آمن؛ يُحفَظ الاستدعاء في مخزن مؤقت ويُفرَّغ بمجرد وجود الجلسة. للمخزن سعة محدودة — انظر حدود المدخلات أعلاه.sendHook() بتفاؤل قبل أن يربط مؤلف التدفق مشغّلاً. يظل options.flowVariables محفوظاً حتى في تلك الحالة، فالاستدعاء نفسه يخدم كتحديث للسياق فقط.onFHError).name و options.flowVariables لهما حدود — انظر حدود المدخلات أعلاه. المخالفات تُرجع HTTP 422 ولا يُحفَظ شيء.onFHChatbotFlowVariablesUpdate إذا تم توفير options.flowVariables (انظر مرجع الأحداث).console.warn.مثال — اقتراح استباقي عند التنقل في 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 },
});
});
});
مثال — تحديث للسياق فقط (دون ربط Chat Hook)
إذا لم يكن للتدفق مشغّل Chat Hook، فالاستدعاء 200 صامتة — لذلك يمكن لنفس الـ API الإبقاء على flow_variables متزامنة دون إطلاق أي شيء:
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} و {ChatHook.payload.foo} — القيم المُمررة عبر sendHook('x', { foo: 1 }) تُكشف على مسار تنفيذ مشغّل Chat Hook. متاحة فقط على المسار الذي بدأه إطلاق الخطّاف.{flow_variables.foo} — القيم المُمررة عبر options.flowVariables تُدمج في حقيبة متغيرات الجلسة قبل إطلاق المشغّل. كل مسار تنفيذ (بما في ذلك رسائل المستخدم العادية المُطلقة عبر Chat Input) يمكنه قراءتها.إذا أردت أن ترى رسالة المستخدم التالية قيمة جديدة، فضعها في options.flowVariables — payload وحده يؤثر فقط على دورة التنفيذ التي بدأها ذلك الخطّاف.
يرسل FlowHunt JS API أحد عشر حدثاً مخصصاً على كائن window. تستخدم جميع الأحداث واجهة CustomEvent
مع bubbles: true و composed: true.
onFHChatbotReadyيُطلق عندما يكتمل عرض ودجت روبوت الدردشة ويصبح جاهزاً للاستخدام.
onFHChatbotSessionCreatedيُطلق عند إنشاء جلسة دردشة جديدة على الخادم.
event.detail.sessionId — معرف الجلسة المُنشأة حديثاً.onFHChatbotWindowOpenedيُطلق عندما يفتح المستخدم نافذة الدردشة. لا يُطلق في الوضع المضمّن.
onFHChatbotWindowClosedيُطلق عندما يغلق المستخدم نافذة الدردشة. لا يُطلق في الوضع المضمّن.
onFHMessageSentيُطلق عندما يرسل المستخدم رسالة.
event.detail.metadata = {
content: 'Hello, I need help with...',
createdAt: '2026-02-19T10:30:00.000Z',
};
onFHMessageReceivedيُطلق عندما يستقبل روبوت الدردشة رداً ويعرضه.
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 اختياري ويكون موجوداً فقط عندما يكون وكيل بشري مشاركاً.
onFHFormDataSentيُطلق عندما يرسل المستخدم بيانات نموذج عبر روبوت الدردشة.
event.detail.metadata = {
objectData: { name: 'John', email: 'john@example.com' },
createdAt: '2026-02-19T10:31:00.000Z',
};
onFHFeedbackيُطلق عندما يقدم المستخدم تقييماً إيجابياً أو سلبياً على رسالة روبوت الدردشة.
event.detail.metadata = {
message_id: 'msg_456',
content: 'Optional feedback text',
feedback: 'P', // 'P' = positive, 'N' = negative
};
onFHToolCallيُطلق عند تنفيذ أداة أو إجراء أثناء معالجة التدفق. يُطلق فقط في وضعَي flowAssistant و flowAssistantV3.
event.detail.metadata = {
metadata: {
flow_id: 'abc123',
message_id: 'msg_789',
message: 'Calling search API...',
},
createdAt: '2026-02-19T10:32:00.000Z',
};
onFHErrorيُطلق عند حدوث خطأ أثناء تشغيل روبوت الدردشة.
event.detail.metadata = {
metadata: {
flow_id: 'abc123',
message_id: 'msg_err',
message: 'Flow execution failed',
},
createdAt: '2026-02-19T10:33:00.000Z',
};
onFHChatbotFlowVariablesUpdateأُضيف في أبريل 2026.
يُطلق بعد استدعاء ناجح لـ chatbotManager.sendHook(...) تم تزويده بـ options.flowVariables. لا يُطلق لاستدعاءات sendHook() التي تحذف flowVariables.
event.detail = {
variables: {
current_page_url: 'https://example.com/products',
screen_name: 'products',
},
};
استخدمه لمراقبة المتغيرات المدموجة (مثلاً لمزامنة حالتك الخاصة على جانب المضيف، أو لتصحيح الأخطاء، أو لإعادة عرض عنصر واجهة يعتمد على البيانات نفسها).
هناك طريقتان للاشتراك في أحداث روبوت الدردشة.
استخدم window.addEventListener في أي مكان في صفحتك. يعمل هذا حتى قبل تحميل روبوت الدردشة:
<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>
لإزالة مستمع، احتفظ بمرجع المعالج:
var handleMessage = function (event) {
console.log(event.detail.metadata);
};
window.addEventListener('onFHMessageReceived', handleMessage);
// Later …
window.removeEventListener('onFHMessageReceived', handleMessage);
داخل استدعاء init() الراجع، استخدم الطرق المدمجة لمدير روبوت الدردشة:
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);
});
});
| Method | Parameters | Description |
|---|---|---|
onSessionCreated(fn) | fn: () => void | الاستماع لإنشاء الجلسة |
onWindowOpened(fn) | fn: () => void | الاستماع لفتح النافذة |
onWindowClosed(fn) | fn: () => void | الاستماع لإغلاق النافذة |
onMessageSent(fn) | fn: (event) => void | الاستماع لرسائل المستخدم |
onMessageReceived(fn) | fn: (event) => void | الاستماع لردود الروبوت |
onFormDataSent(fn) | fn: (event) => void | الاستماع لإرسال النماذج |
onFeedback(fn) | fn: (event) => void | الاستماع لتقييمات المستخدم |
onToolCall(fn) | fn: (event) => void | الاستماع لتنفيذ الأدوات |
onError(fn) | fn: (event) => void | الاستماع للأخطاء |
openChat() | — | يفتح لوحة الدردشة |
closeChat() | — | يغلق لوحة الدردشة |
sendHook(name, payload?, options?) (جديد) | name: string, payload?: object, options?: { flowVariables?: object } | يطلق مشغّل Chat Hook في التدفق المُشغَّل (أو يدمج options.flowVariables بصمت إذا لم يُربط أي مشغّل) |
للتحكم الكامل في وقت ظهور روبوت الدردشة، أخفِ الزر العائم الافتراضي وافتح الدردشة برمجياً — على سبيل المثال، من زر مخصص خاص بك.
<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>
يمكنك الجمع بين التفعيل المخفي ومستمعي الأحداث لإنشاء تفاعلات متقدمة:
<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>
مثال عملي كامل يوضح تجاوز التكوين وتتبع الأحداث وتفعيل الدردشة المخصص وطريقة sendHook() الجديدة معاً:
<!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>

قم بدمج FlowHunt مع mcp التفاعلي لتمكين التواصل الآمن والفوري بين نماذج اللغة الكبيرة والمستخدمين على الأجهزة المحلية. التقط مدخلات المستخدم، وقدم إشعارات النظا...

تعرّف على كيفية تمكين روبوت FlowHunt من الإجابة على أسئلة العملاء حول توفر المنتجات وحالة توصيل الطلبات من خلال التكامل مع واجهات برمجة التطبيقات في الوقت الفعل...

دليل تقني لإتقان تكامل FlowHunt المتقدم مع LiveAgent، يغطي استهداف اللغة، منع تنسيقات الماركداون، تصفية الرسائل المزعجة، إدارة إصدارات API، اختيار نماذج LLM، أت...
الموافقة على ملفات تعريف الارتباط
نستخدم ملفات تعريف الارتباط لتعزيز تجربة التصفح وتحليل حركة المرور لدينا. See our privacy policy.