واجهة برمجة تطبيقات الأسئلة الشائعة (FAQs API)
الأسئلة الشائعة (FAQs) هي مدخلات الأسئلة والأجوبة التي يستعين بها روبوت الذكاء الاصطناعي الخاص بك عند الرد على العملاء. تنتمي كل فقرة أسئلة شائعة إلى حسابك ويمكن ربطها بحملة واحدة أو أكثر، بحيث يمكن إعادة استخدام نفس الإجابة في أي مكان تكون فيه ذات صلة. تتيح لك واجهة برمجة تطبيقات الأسئلة الشائعة إدارة تلك المكتبة برمجياً — إنشاء الأسئلة الشائعة، وتحديثها، واستيرادها بكميات كبيرة، وإعادة ترتيبها، وربطها بالحملات من خلال الكود الخاص بك.
جميع نقاط النهاية أدناه نسبية إلى عنوان URL الأساسي https://api.youraiconnector.com/v1. يجب أن تكون كل طلبية مصادقاً عليها — راجع الوصول إلى واجهة برمجة التطبيقات والمصادقة. الوصول إلى واجهة برمجة التطبيقات هو ميزة مدفوعة؛ وبدونها، يتم رفض الطلبات مع 403.
كيف يستخدم الروبوت الأسئلة الشائعة: عند إنشاء أو تغيير سؤال شائع، تقوم المنصة بإعداد بيانات البحث الخاصة به (المستخدمة لمطابقة السؤال الشائع مع الأسئلة الواردة) في الخلفية. عادة ما ينتهي هذا في غضون ثوانٍ قليلة، وبعد ذلك يبدأ الروبوت في استخدام المدخل تلقائياً.
كائن الأسئلة الشائعة (FAQ object)
كل سؤال شائع يتم استرجاعه من واجهة برمجة التطبيقات له هذا الشكل:
| الحقل | النوع | الوصف |
|---|---|---|
id |
string | المعرف الفريد للأسئلة الشائعة. |
question |
string | سؤال العميل الذي تجيب عليه هذه المدخلة. |
answer |
string | الإجابة التي يقدمها روبوت الذكاء الاصطناعي. |
category |
string | null | تسمية فئة اختيارية حرة. |
tags |
string[] | تسميات اختيارية لتنظيم الأسئلة الشائعة. |
is_active |
boolean | ما إذا كان مسموحاً للروبوت باستخدام هذه الأسئلة الشائعة. القيمة الافتراضية هي true. |
is_global |
boolean | يحدد أن الأسئلة الشائعة غير مرتبطة بحملة أو وكيل محدد. هذا لا يعني تطبيق الأسئلة الشائعة في كل مكان: تُستخدم الأسئلة الشائعة فقط من قبل الحملات والوكلاء المرتبطين بها. القيمة الافتراضية هي false. |
usage_count |
integer | عدد المرات التي تم فيها استخدام هذه الأسئلة الشائعة في ردود الذكاء الاصطناعي. |
order_index |
integer | موقع عرض هذه الأسئلة الشائعة ضمن حملتها. |
campaign_ids |
string[] | معرفات الحملات المرتبطة بهذه الأسئلة الشائعة. |
created_at |
string | null | طابع زمني بتنسيق ISO 8601 يوضح وقت إنشاء الأسئلة الشائعة. |
updated_at |
string | null | طابع زمني بتنسيق ISO 8601 يوضح وقت آخر تغيير. |
الحقول التي يمكنك تعيينها هي: question، وanswer، وis_active، وis_global، وcategory، وtags، وorder_index. تدير المنصة كل شيء آخر (بيانات البحث، وعدد مرات الاستخدام، والطوابع الزمنية)؛ يتم تجاهل أي حقول أخرى في نص طلبك.
سرد الأسئلة الشائعة
GET /faqs
يعيد الأسئلة الشائعة في حسابك، بدءاً من الأحدث. يمكنك اختيارياً التصفية حسب حملة واحدة أو حسب حالة النشاط.
معلمات الاستعلام
| المعلمة | مطلوبة | الوصف |
|---|---|---|
campaign_id |
لا | إرجاع الأسئلة الشائعة المرتبطة بهذه الحملة فقط. |
is_active |
لا | إرجاع الأسئلة الشائعة ذات حالة النشاط هذه فقط (true أو false). يتم تطبيق عامل التصفية هذا لكل صفحة، لذا قد تحتوي الصفحة على عناصر أقل من limit. |
limit |
لا | الحد الأقصى للأسئلة الشائعة في كل صفحة. الافتراضي 50، والحد الأقصى 100. |
cursor |
لا | معرف سؤال شائع للمتابعة بعده. مرر قيمة next_cursor من الصفحة السابقة. |
cURL
curl "https://api.youraiconnector.com/v1/faqs?campaign_id=campaign123&limit=50&apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/faqs?campaign_id=campaign123&limit=50",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
console.log(data.faqs, data.next_cursor);
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/faqs",
params={"campaign_id": "campaign123", "limit": 50},
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
print(data["faqs"], data["next_cursor"])
الاستجابة
{
"success": true,
"faqs": [
{
"id": "aBcD1234eFgH5678",
"question": "How long does shipping take?",
"answer": "Standard shipping takes 3-5 business days.",
"category": "shipping",
"tags": ["logistics", "delivery"],
"is_active": true,
"is_global": false,
"usage_count": 12,
"order_index": 0,
"campaign_ids": ["campaign123"],
"created_at": "2026-01-01T12:00:00.000Z",
"updated_at": "2026-01-02T08:30:00.000Z"
}
],
"next_cursor": "aBcD1234eFgH5678"
}
عندما تكون next_cursor هي null، لا توجد نتائج أخرى.
الحصول على سؤال شائع (FAQ)
GET /faqs/{faqId}
إرجاع سؤال شائع واحد بواسطة معرفه (ID).
cURL
curl "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const { faq } = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678",
headers={"X-API-Key": "YOUR_API_KEY"},
)
faq = res.json()["faq"]
الاستجابة
{
"success": true,
"faq": {
"id": "aBcD1234eFgH5678",
"question": "How long does shipping take?",
"answer": "Standard shipping takes 3-5 business days.",
"category": "shipping",
"tags": ["logistics"],
"is_active": true,
"is_global": false,
"usage_count": 12,
"order_index": 0,
"campaign_ids": ["campaign123"],
"created_at": "2026-01-01T12:00:00.000Z",
"updated_at": "2026-01-02T08:30:00.000Z"
}
}
إنشاء سؤال شائع (FAQ)
POST /faqs
إنشاء سؤال شائع جديد وربطه بحملة.
حقول الطلب
| الحقل | مطلوب | الوصف |
|---|---|---|
campaign_id |
نعم | الحملة التي سيتم ربط الأسئلة الشائعة الجديدة بها. |
question |
نعم | سؤال العميل الذي تجيب عليه هذه المدخلة. |
answer |
نعم | الإجابة التي يجب أن يقدمها البوت. |
is_active |
لا | ما إذا كان بإمكان البوت استخدام هذه الأسئلة الشائعة. القيمة الافتراضية هي true. |
is_global |
لا | ما إذا كانت الأسئلة الشائعة تنطبق على جميع الحملات. القيمة الافتراضية هي false. |
category |
لا | تسمية فئة حرة. |
tags |
لا | مصفوفة من التسميات. |
order_index |
لا | موضع العرض داخل الحملة. القيمة الافتراضية هي 0. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/faqs?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"campaign_id": "campaign123",
"question": "How long does shipping take?",
"answer": "Standard shipping takes 3-5 business days.",
"category": "shipping",
"tags": ["logistics"]
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/faqs", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
campaign_id: "campaign123",
question: "How long does shipping take?",
answer: "Standard shipping takes 3-5 business days.",
category: "shipping",
tags: ["logistics"],
}),
});
const { faq_id } = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/faqs",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"campaign_id": "campaign123",
"question": "How long does shipping take?",
"answer": "Standard shipping takes 3-5 business days.",
"category": "shipping",
"tags": ["logistics"],
},
)
faq_id = res.json()["faq_id"]
الاستجابة
{
"success": true,
"faq_id": "aBcD1234eFgH5678"
}
تحديث الأسئلة الشائعة
PUT /faqs/{faqId}
يُحدِّث الأسئلة الشائعة جزئياً. يتم تغيير الحقول القابلة للكتابة المقدمة فقط؛ بينما يحتفظ كل شيء آخر بقيمته الحالية. يؤدي تغيير question أو answer تلقائياً إلى تحديث بيانات بحث الأسئلة الشائعة في الخلفية.
إذا قمت بإرسال question أو answer، فيجب أن تكون سلاسل نصية غير فارغة. إرسال حقول قابلة للكتابة غير معروفة يؤدي إلى إرجاع 400.
cURL
curl -X PUT "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "is_active": false }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678",
{
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ is_active: false }),
}
);
const data = await res.json();
Python
import requests
res = requests.put(
"https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"is_active": False},
)
data = res.json()
الاستجابة
{
"success": true,
"faq_id": "aBcD1234eFgH5678"
}
حذف الأسئلة الشائعة
DELETE /faqs/{faqId}
يحذف الأسئلة الشائعة نهائياً. يمكنك اختيارياً تمرير campaign_id كمعامل استعلام لإزالة الأسئلة الشائعة أيضاً من قائمة الأسئلة الشائعة الخاصة بتلك الحملة.
معلمات الاستعلام
| المعلمة | مطلوبة | الوصف |
|---|---|---|
campaign_id |
لا | قم أيضًا بإزالة الأسئلة الشائعة من قائمة الأسئلة الشائعة الخاصة بهذه الحملة. |
cURL
curl -X DELETE "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678?campaign_id=campaign123&apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678?campaign_id=campaign123",
{ method: "DELETE", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
Python
import requests
res = requests.delete(
"https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678",
params={"campaign_id": "campaign123"},
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
الاستجابة
{
"success": true
}
حذف الأسئلة الشائعة بالجملة
POST /faqs/bulk-delete
يحذف ما يصل إلى 500 سؤال شائع في طلب واحد. عند توفير campaign_id، تتم إزالة الأسئلة الشائعة المحذوفة أيضًا من قائمة الأسئلة الشائعة الخاصة بتلك الحملة.
حقول الطلب
| الحقل | مطلوب | الوصف |
|---|---|---|
faq_ids |
نعم | مصفوفة غير فارغة من معرفات الأسئلة الشائعة المراد حذفها (بحد أقصى 500). |
campaign_id |
لا | قم أيضًا بإزالة الأسئلة الشائعة المحذوفة من قائمة الأسئلة الشائعة الخاصة بهذه الحملة. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/faqs/bulk-delete?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "faq_ids": ["faqId1", "faqId2"], "campaign_id": "campaign123" }'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/faqs/bulk-delete", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
faq_ids: ["faqId1", "faqId2"],
campaign_id: "campaign123",
}),
});
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/faqs/bulk-delete",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"faq_ids": ["faqId1", "faqId2"], "campaign_id": "campaign123"},
)
data = res.json()
الاستجابة
{
"success": true,
"deleted_count": 2
}
الأسئلة الشائعة حول الاستيراد
POST /faqs/import
استيراد جماعي لما يصل إلى 500 سؤال شائع وربطها جميعاً بحملة واحدة. العناصر التي يطابق question الخاص بها سؤالاً شائعاً موجوداً في مكتبتك (مع تجاهل حالة الأحرف) يتم تحديثها بدلاً من إنشاء نسخة مكررة.
نصيحة للأداء: مسح مطابقة التكرارات يتم عبر مكتبة الأسئلة الشائعة بالكامل، لذا فإن المكتبات الكبيرة جداً تجعل عمليات الاستيراد أبطأ. يُفضل إجراء عمليات استيراد أقل وأكبر حجماً بدلاً من العديد من عمليات الاستيراد الصغيرة.
حقول الطلب
| الحقل | مطلوب | الوصف |
|---|---|---|
campaign_id |
نعم | الحملة التي يتم ربط جميع الأسئلة الشائعة المستوردة بها. |
faqs |
نعم | مصفوفة غير فارغة من عناصر الأسئلة الشائعة (بحد أقصى 500). يجب أن يحتوي كل عنصر على question و answer غير فارغين؛ ويمكن أن يتضمن أيضاً is_active و is_global و category و tags و order_index. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/faqs/import?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"campaign_id": "campaign123",
"faqs": [
{ "question": "Do you ship internationally?", "answer": "Yes, we ship to most countries worldwide." },
{ "question": "What is your return policy?", "answer": "You can return any item within 30 days." }
]
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/faqs/import", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
campaign_id: "campaign123",
faqs: [
{
question: "Do you ship internationally?",
answer: "Yes, we ship to most countries worldwide.",
},
{
question: "What is your return policy?",
answer: "You can return any item within 30 days.",
},
],
}),
});
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/faqs/import",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"campaign_id": "campaign123",
"faqs": [
{"question": "Do you ship internationally?", "answer": "Yes, we ship to most countries worldwide."},
{"question": "What is your return policy?", "answer": "You can return any item within 30 days."},
],
},
)
data = res.json()
الاستجابة
{
"success": true,
"faq_ids": ["aBcD1234eFgH5678", "iJkL9012mNoP3456"],
"imported_count": 2
}
faq_ids هي معرفات الأسئلة الشائعة التي تم إنشاؤها أو تحديثها، بنفس الترتيب الذي قدمتها به.
إعادة ترتيب الأسئلة الشائعة
POST /faqs/reorder
يحدد ترتيب عرض الأسئلة الشائعة الخاصة بالحملة. قم بتوفير القائمة الكاملة لمعرفات الأسئلة الشائعة بالترتيب المطلوب؛ يتم تحديث موضع كل سؤال شائع ليتطابق مع مكانه في المصفوفة.
حقول الطلب
| الحقل | مطلوب | الوصف |
|---|---|---|
campaign_id |
نعم | الحملة التي يتم إعادة ترتيب الأسئلة الشائعة الخاصة بها. |
ordered_faq_ids |
نعم | مصفوفة غير فارغة تحتوي على جميع معرفات الأسئلة الشائعة للحملة بالترتيب المطلوب للعرض (بحد أقصى 500). |
cURL
curl -X POST "https://api.youraiconnector.com/v1/faqs/reorder?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"campaign_id": "campaign123",
"ordered_faq_ids": ["faqId2", "faqId1", "faqId3"]
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/faqs/reorder", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
campaign_id: "campaign123",
ordered_faq_ids: ["faqId2", "faqId1", "faqId3"],
}),
});
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/faqs/reorder",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"campaign_id": "campaign123",
"ordered_faq_ids": ["faqId2", "faqId1", "faqId3"],
},
)
data = res.json()
الاستجابة
{
"success": true
}
إذا لم يتم العثور على الحملة أو أي من معرفات الأسئلة الشائعة في حسابك، فسيقوم الطلب بإرجاع 404 One or more FAQs were not found.
ربط سؤال شائع بحملة
POST /faqs/{faqId}/link
يربط سؤالاً شائعاً موجوداً بحملة إضافية. يمكن مشاركة السؤال الشائع بواسطة أي عدد من الحملات، لذا لا يلزم الاحتفاظ بنفس الإجابة إلا مرة واحدة فقط.
حقول الطلب
| الحقل | مطلوب | الوصف |
|---|---|---|
campaign_id |
نعم | الحملة المراد ربط السؤال الشائع بها. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/link?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "campaign_id": "campaign456" }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/link",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ campaign_id: "campaign456" }),
}
);
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/link",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"campaign_id": "campaign456"},
)
data = res.json()
الاستجابة
{
"success": true,
"faq_id": "aBcD1234eFgH5678",
"campaign_id": "campaign456"
}
إلغاء ربط الأسئلة الشائعة من حملة
POST /faqs/{faqId}/unlink
يؤدي هذا إلى إزالة الأسئلة الشائعة من حملة دون حذف الأسئلة الشائعة نفسها. تظل الأسئلة الشائعة في مكتبتك وتظل مرتبطة بأي حملات أخرى.
حقول الطلب
| الحقل | مطلوب | الوصف |
|---|---|---|
campaign_id |
نعم | الحملة المراد إزالة الأسئلة الشائعة منها. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/unlink?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "campaign_id": "campaign456" }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/unlink",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ campaign_id: "campaign456" }),
}
);
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/unlink",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"campaign_id": "campaign456"},
)
data = res.json()
الاستجابة
{
"success": true,
"faq_id": "aBcD1234eFgH5678",
"campaign_id": "campaign456"
}
إعادة بناء بيانات البحث الخاصة بالأسئلة الشائعة
POST /faqs/{faqId}/rebuild-embeddings
يضع في قائمة الانتظار عملية إعادة بناء للبيانات التي يستخدمها روبوت الذكاء الاصطناعي للعثور على هذه الأسئلة الشائعة (بيانات البحث الدلالي والكلمات المفتاحية الخاصة بها). هذا مفيد إذا لم يتم العثور على الأسئلة الشائعة في الردود كما هو متوقع. تعمل عملية إعادة البناء في الخلفية وعادة ما تكتمل في غضون بضع ثوانٍ؛ قد يتم استبعاد الأسئلة الشائعة مؤقتًا من ردود الذكاء الاصطناعي أثناء إعادة بنائها.
تُرجع نقطة النهاية هذه 202 Accepted لأن العمل يستمر بعد إرسال الاستجابة. تكون قيمة status دائمًا "processing" — أعد جلب الأسئلة الشائعة لاحقًا إذا كنت بحاجة إلى تأكيد الاكتمال.
cURL
curl -X POST "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/rebuild-embeddings?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/rebuild-embeddings",
{ method: "POST", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/rebuild-embeddings",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
الاستجابة
{
"success": true,
"faq_id": "aBcD1234eFgH5678",
"status": "processing"
}
إدارة الأسئلة الشائعة بمساعدة الذكاء الاصطناعي
تتجاوز نقاط النهاية أدناه عمليات CRUD العادية: فهي تستدعي نفس أدوات المساعدة بالذكاء الاصطناعي التي يستخدمها محرر الأسئلة الشائعة في لوحة التحكم — للعثور على التكرارات، وإنشاء إدخالات من مستند، ومطابقة الأسئلة الشائعة مع مهام فجوات المعرفة المفتوحة. تستخدم نصوص الطلبات في هذه المجموعة أسماء حقول camelCase (campaignId، taskId، sourceIds…)، والتي تطابق أشكال طلبات التطبيق نفسه، بدلاً من snake_case المستخدمة في أماكن أخرى في هذه الصفحة — انسخ الأمثلة أدناه بدلاً من تخمين اسم الحقل.
إنشاء نسخة مخصصة لحملة واحدة من سؤال شائع
POST /faqs/{faqId}/fork-for-campaign
ينشئ سؤالاً شائعاً جديداً كنسخة من سؤال موجود، ويخصصه لحملة واحدة، ويعيد ربط تلك الحملة بالنسخة الجديدة بدلاً من الأصلية. استخدم هذا عندما ترغب في تخصيص إجابة لحملة واحدة دون تغييرها في كل مكان آخر يُستخدم فيه السؤال الشائع الأصلي. يظل السؤال الشائع الأصلي في مكانه — لكنه يفقد رابط هذه الحملة فقط.
حقول الطلب
| الحقل | مطلوب | الوصف |
|---|---|---|
campaign_id |
نعم | الحملة المراد تخصيص النسخة الجديدة لها، وإعادة ربطها من السؤال الشائع الأصلي. |
question |
نعم | السؤال الخاص بالنسخة الجديدة المخصصة للحملة. |
answer |
نعم | الإجابة الخاصة بالنسخة الجديدة المخصصة للحملة. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/fork-for-campaign?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"campaign_id": "campaign456",
"question": "How long does shipping take to the EU?",
"answer": "For EU orders, shipping takes 7-10 business days."
}'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/fork-for-campaign",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
campaign_id: "campaign456",
question: "How long does shipping take to the EU?",
answer: "For EU orders, shipping takes 7-10 business days.",
}),
}
);
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/fork-for-campaign",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"campaign_id": "campaign456",
"question": "How long does shipping take to the EU?",
"answer": "For EU orders, shipping takes 7-10 business days.",
},
)
data = res.json()
الاستجابة — 201 Created
{
"success": true,
"faq_id": "nEwFaQiD9012mNoP",
"campaign_id": "campaign456",
"original_faq_id": "aBcD1234eFgH5678"
}
العثور على الأسئلة الشائعة المتشابهة
POST /faqs/dedupe
يبدأ مهمة في الخلفية تقوم بمسح مكتبة الأسئلة الشائعة الخاصة بك بحثاً عن الإدخالات المتشابهة أو المتداخلة وتقوم بدمجها أو إزالتها حيثما تكون واثقة من ذلك. مفيد بعد الاستيراد المجمع، أو بعد عدة جولات من الأسئلة الشائعة التي تم إنشاؤها بواسطة الذكاء الاصطناعي والتي تركت المكتبة بها تداخلات. يمكن تشغيل مهمة إلغاء التكرار واحدة فقط لكل حساب في كل مرة — بدء مهمة ثانية بينما لا تزال المهمة الأولى قيد التشغيل يُرجع 409.
حقول الطلب
| الحقل | مطلوب | الوصف |
|---|---|---|
sourceIds |
لا | مصفوفة من معرفات مصادر قاعدة المعرفة لتحديد نطاق إلغاء التكرار. اتركها فارغة لمسح مكتبة الأسئلة الشائعة بالكامل. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/faqs/dedupe?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/faqs/dedupe", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({}),
});
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/faqs/dedupe",
headers={"X-API-Key": "YOUR_API_KEY"},
json={},
)
data = res.json()
الاستجابة — 202 Accepted
{
"success": true,
"job_id": "dedupJob_aBc123"
}
تعمل المهمة في الخلفية وتستغرق عادةً بضع دقائق في المكتبات الكبيرة. لا توجد نقطة نهاية منفصلة للحالة — أعد جلب GET /faqs بعد انتظار قصير لمعرفة ما تغير. عند الانتهاء من مراجعة النتيجة، اتصل بنقطة نهاية الإلغاء أدناه لمسحها.
تجاهل نتيجة فحص التكرار
POST /faqs/dedupe/dismiss
يمسح مهمة إلغاء التكرار المنتهية حتى تتوقف عن الظهور كنتيجة نشطة. عملية غير مؤثرة (Idempotent) — آمنة للاستدعاء حتى لو لم يكن هناك شيء لتجاهله. يُرجع 409 إذا كانت المهمة لا تزال queued أو processing (لا يمكنك تجاهل تشغيل لم ينتهِ بعد).
cURL
curl -X POST "https://api.youraiconnector.com/v1/faqs/dedupe/dismiss?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/faqs/dedupe/dismiss", {
method: "POST",
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/faqs/dedupe/dismiss",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
الاستجابة
{ "success": true }
إنشاء أسئلة شائعة من المستندات التي تم تحميلها
POST /faqs/generate-from-documents
يقرأ مستنداً واحداً أو أكثر موجوداً بالفعل في مساحة تخزين الملفات الخاصة بحسابك، ويجعل الذكاء الاصطناعي يصيغ أسئلة شائعة من محتواها، مع مطابقة المسودات مقابل مكتبتك الحالية بحيث يعيد استخدام الإدخالات أو تحديثها بدلاً من إنشاء نسخ مكررة. لا تتم كتابة النتائج على الفور، بل يتم تخزينها كمجموعة تغييرات معلقة في الحملة لتراجعها، ثم يتم تطبيقها (أو تجاهلها) باستخدام تطبيق تغييرات الأسئلة الشائعة المراجعة أدناه. يكلف هذا رصيداً، نظراً لأنه يمثل عملية توليد بواسطة الذكاء الاصطناعي لنص المستند.
لا يحمل نقطة النهاية هذه الملف: يجب أن تشير storagePath إلى ملف موجود بالفعل ضمن مجلد التحميلات الخاص بك (users/{your user id}/uploads/)، وهو نفس الاصطلاح المستخدم في استيراد مستند تم تحميله في واجهة برمجة تطبيقات قاعدة المعرفة.
حقول الطلب
| الحقل | مطلوب | الوصف |
|---|---|---|
campaignId |
نعم | الحملة المقترح لها الأسئلة الشائعة التي تم إنشاؤها. |
uploadedFiles |
نعم | مصفوفة غير فارغة من الملفات المراد قراءتها، كل منها { storagePath, fileName, mimeType }. يجب أن تبدأ storagePath بـ users/{your user id}/uploads/. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/faqs/generate-from-documents?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"campaignId": "campaign123",
"uploadedFiles": [
{ "storagePath": "users/abc123uid/uploads/handbook.pdf", "fileName": "handbook.pdf", "mimeType": "application/pdf" }
]
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/faqs/generate-from-documents", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
campaignId: "campaign123",
uploadedFiles: [
{ storagePath: "users/abc123uid/uploads/handbook.pdf", fileName: "handbook.pdf", mimeType: "application/pdf" },
],
}),
});
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/faqs/generate-from-documents",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"campaignId": "campaign123",
"uploadedFiles": [
{"storagePath": "users/abc123uid/uploads/handbook.pdf", "fileName": "handbook.pdf", "mimeType": "application/pdf"},
],
},
)
data = res.json()
الاستجابة — 202 Accepted
{
"success": true,
"faqCount": 6,
"reusedCount": 2,
"modifiedCount": 1,
"newCount": 3
}
faqCount هو العدد الإجمالي للتغييرات المقترحة التي تنتظر المراجعة؛ بينما تقوم reusedCount و modifiedCount و newCount بتقسيم ذلك إلى أسئلة شائعة طابقت إدخالاً موجوداً دون تغيير، وأخرى يقترح الذكاء الاصطناعي تعديلها، وأخرى جديدة تماماً. يتم حذف الملفات التي تم تحميلها من التخزين بمجرد انتهاء المعالجة، سواء نجحت أم لا.
تطبيق تغييرات الأسئلة الشائعة المراجعة
POST /faqs/apply-optimization
تطبيق (أو تجاهل) مجموعة معلقة من تغييرات الأسئلة الشائعة المقترحة بواسطة الذكاء الاصطناعي — وهي النوع الذي يتم إنتاجه بواسطة إنشاء أسئلة شائعة من المستندات أعلاه، أو بواسطة مراجعة تحسين الأسئلة الشائعة في لوحة التحكم. أنت تختار بالضبط التغييرات المقترحة التي تريد قبولها؛ أي شيء لا تذكره يظل دون تغيير (لا يتم التعامل مع التغيير المحذوف أبداً على أنه رفض يؤدي إلى حذف شيء ما).
حقول الطلب
| الحقل | مطلوب | الوصف |
|---|---|---|
campaignId |
واحد من هذين | الحملة التي يتم تطبيق تغييرات الأسئلة الشائعة المعلقة الخاصة بها. |
agentId |
واحد من هذين | وكيل الذكاء الاصطناعي الذي يتم تطبيق تغييرات الأسئلة الشائعة المعلقة الخاصة به، على حساب أصلي للوكيل. قدم واحداً فقط من campaignId / agentId، ولا تقدم كلاهما أبداً. |
acceptedChanges |
نعم | مصفوفة التغييرات التي تقبلها، كل منها { action, faq_id?, faq_ref_path?, question?, answer?, edit_scope? }. action هي واحدة من keep، remove، add_from_library، create_new، modify. أرسل مصفوفة فارغة لتجاهل المجموعة المعلقة دون تطبيق أي شيء. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/faqs/apply-optimization?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"campaignId": "campaign123",
"acceptedChanges": [
{ "action": "create_new", "question": "Do you ship to the EU?", "answer": "Yes, EU shipping takes 7-10 business days." },
{ "action": "remove", "faq_ref_path": "users/abc123uid/faqs/oldFaqId" }
]
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/faqs/apply-optimization", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
campaignId: "campaign123",
acceptedChanges: [
{ action: "create_new", question: "Do you ship to the EU?", answer: "Yes, EU shipping takes 7-10 business days." },
{ action: "remove", faq_ref_path: "users/abc123uid/faqs/oldFaqId" },
],
}),
});
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/faqs/apply-optimization",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"campaignId": "campaign123",
"acceptedChanges": [
{"action": "create_new", "question": "Do you ship to the EU?", "answer": "Yes, EU shipping takes 7-10 business days."},
{"action": "remove", "faq_ref_path": "users/abc123uid/faqs/oldFaqId"},
],
},
)
data = res.json()
الاستجابة
{
"success": true,
"message": "Applied 2 FAQ changes",
"faq_count": 7
}
faq_count هو إجمالي عدد الأسئلة الشائعة المرتبطة بالحملة (أو الوكيل) بعد التطبيق. إذا لم تكن هناك مجموعة تغييرات معلقة ليتم تطبيقها، تكون الاستجابة { "success": true, "message": "No pending FAQ changes to apply" }.
العثور على أسئلة شائعة مشابهة لمهمة
POST /faqs/similar-for-task
ترتيب مكتبة الأسئلة الشائعة الخاصة بك حسب الصلة بسؤال مهمة فجوة المعرفة — وهو نفس البحث الموجود خلف أداة اختيار “استخدام سؤال شائع موجود” في لوحة التحكم. للقراءة فقط. يجب أن تشير taskId إلى مهمة من النوع faq_update.
تستجيب نقطة النهاية هذه دائمًا بـ 200، حتى في حالة الفشل المتوقع مثل مهمة غير معروفة — تحقق من success في النص الأساسي بدلاً من حالة HTTP.
حقول الطلب
| الحقل | مطلوب | الوصف |
|---|---|---|
taskId |
نعم | مهمة faq_update للبحث عن مطابقات لها. |
limit |
لا | الحد الأقصى للمطابقات المراد إرجاعها. القيمة الافتراضية هي 20، بحد أقصى 50. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/faqs/similar-for-task?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "taskId": "task789", "limit": 10 }'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/faqs/similar-for-task", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ taskId: "task789", limit: 10 }),
});
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/faqs/similar-for-task",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"taskId": "task789", "limit": 10},
)
data = res.json()
الاستجابة
{
"success": true,
"data": {
"task_id": "task789",
"matches": [
{
"faq_id": "aBcD1234eFgH5678",
"question": "How long does shipping take?",
"answer": "Standard shipping takes 3-5 business days.",
"category": "shipping",
"created_at": "2026-01-01T12:00:00.000Z",
"similarity": 0.81,
"embedding_similarity": 0.81,
"keyword_similarity": 0.6,
"bm25_score": 4.2,
"distance": 0.19
}
]
}
}
يتم فرز المطابقات حسب similarity (مطابقة دلالية عند توفرها، أو تداخل الكلمات الرئيسية بخلاف ذلك)، مع عرض الأفضل أولاً. في حالة الفشل الطفيف، يكون الشكل { "success": false, "error": "...", "error_code": 404 } — حيث يعكس error_code ما ستكون عليه حالة HTTP عادةً.
حل مهمة باستخدام أسئلة شائعة موجودة
POST /faqs/resolve-task
يحل مهمة فجوة معرفية عن طريق ربطها بأسئلة شائعة لديك بالفعل (بدلاً من كتابة أسئلة جديدة)، ويرسل إجابة تلك الأسئلة الشائعة إلى جهة الاتصال التي أثارت الفجوة، ويضع علامة “مكتملة” على المهمة. استخدم هذا بعد أن يُظهر البحث عن أسئلة شائعة مشابهة لمهمة أسئلة شائعة موجودة تغطي السؤال بالفعل.
مثل نقطة النهاية أعلاه، تستجيب هذه دائمًا بـ 200 — تحقق من success في النص الأساسي.
حقول الطلب
| الحقل | مطلوب | الوصف |
|---|---|---|
taskId |
نعم | مهمة faq_update المراد حلها. |
faqId |
نعم | الأسئلة الشائعة الموجودة لربطها وإرسالها كإجابة. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/faqs/resolve-task?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "taskId": "task789", "faqId": "aBcD1234eFgH5678" }'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/faqs/resolve-task", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ taskId: "task789", faqId: "aBcD1234eFgH5678" }),
});
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/faqs/resolve-task",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"taskId": "task789", "faqId": "aBcD1234eFgH5678"},
)
data = res.json()
الاستجابة
{
"success": true,
"data": {
"task_id": "task789",
"faq_id": "aBcD1234eFgH5678",
"follow_up_status": "published"
}
}
يخبرك follow_up_status بما حدث لمتابعة جهة الاتصال: published (تم الإرسال على الفور)، queued (كان الذكاء الاصطناعي في منتصف الرد على جهة الاتصال تلك، لذا سيتم إرساله لاحقًا)، skipped_no_contact (المهمة ليس لها جهة اتصال مرتبطة)، أو skipped_no_campaign (لا توجد حملة للإرسال من خلالها).
أخطاء واجهة برمجة تطبيقات الأسئلة الشائعة
تُرجع نقاط نهاية الأسئلة الشائعة غلاف الخطأ القياسي:
{
"success": false,
"error": "FAQ not found"
}
| الحالة | متى يحدث ذلك في نقطة نهاية الأسئلة الشائعة |
|---|---|
400 |
حقل مطلوب مفقود أو غير صالح (على سبيل المثال، question فارغ، أو campaign_id مفقود، أو أكثر من 500 عنصر في طلب مجمع). |
404 |
لم يتم العثور على الأسئلة الشائعة أو الحملة — إما أنها غير موجودة أو تنتمي إلى حساب آخر. |
409 |
تم استدعاء POST /faqs/dedupe بينما وظيفة إلغاء التكرار لا تزال queued/processing، أو تم استدعاء POST /faqs/dedupe/dismiss بينما لم تنتهِ الوظيفة بعد. |
الرموز المشتركة التي يمكن أن تُرجعها كل نقطة نهاية — 401، و 403 (خطتك لا تتضمن الوصول إلى واجهة برمجة التطبيقات)، و 429 (حد المعدل)، و 500 — مدرجة مع إرشادات إعادة المحاولة في الأخطاء والترقيم.
POST /faqs/similar-for-task و POST /faqs/resolve-task هما الاستثناءان الوحيدان في هذه الصفحة: فهما يستجيبان بـ 200 حتى في حالة الفشل المتوقع (مهمة غير معروفة، نوع مهمة خاطئ) ويضعان الحالة الحقيقية في error_code ضمن النص الأساسي بدلاً من ذلك — راجع كل نقطة نهاية أعلاه.
ذات صلة
- واجهة برمجة تطبيقات الحملات — الحملات التي ترتبط بها أسئلتك الشائعة.
- واجهة برمجة تطبيقات قاعدة المعرفة — استيراد مواقع الويب والمستندات إلى أسئلة شائعة تلقائيًا، وتجميع الأسئلة الشائعة في مجموعات معرفية قابلة لإعادة الاستخدام.
- الوصول إلى واجهة برمجة التطبيقات — إنشاء مفتاح واجهة برمجة التطبيقات الخاص بك.
- المصادقة — جميع الطرق لتمرير مفتاحك.