Your AI Connector Docs

常见问题解答 (FAQs) API

常见问题解答 (FAQs) 是您的 AI 机器人回复客户时所引用的问答条目。每个 FAQ 都归属于您的账户,并可关联到一个或多个营销活动,因此相同的答案可以在所有相关的地方重复使用。FAQs API 让您可以以编程方式管理该库——通过您自己的代码创建、更新、批量导入、重新排序 FAQ 并将其关联到营销活动。

以下所有端点均相对于基础 URL https://api.youraiconnector.com/v1。每个请求都必须经过身份验证——请参阅 API 访问身份验证。API 访问是一项付费功能;如果没有该权限,请求将被 403 拒绝。

机器人如何使用 FAQ: 当您创建或更改 FAQ 时,平台会在后台准备其搜索数据(用于将 FAQ 与传入的问题进行匹配)。此过程通常在几秒钟内完成,之后机器人会自动开始使用该条目。


FAQ 对象

API 返回的每个 FAQ 都具有以下结构:

字段 类型 描述
id string FAQ 的唯一标识符。
question string 此条目所回答的客户问题。
answer string AI 机器人给出的回答。
category string | null 可选的自由格式类别标签。
tags string[] 用于组织 FAQ 的可选标签。
is_active boolean 是否允许机器人使用此 FAQ。默认为 true
is_global boolean 标记该 FAQ 不绑定于特定的营销活动或智能体。这并不意味着该 FAQ 适用于所有地方:FAQ 仅由与其关联的营销活动和智能体使用。默认为 false
usage_count integer 此 FAQ 在 AI 回复中被使用的次数。
order_index integer 此 FAQ 在其所属营销活动中的显示位置。
campaign_ids string[] 此 FAQ 所关联的营销活动的 ID。
created_at string | null FAQ 创建时间的 ISO 8601 时间戳。
updated_at string | null 最后一次更改的 ISO 8601 时间戳。

您可以 设置 的字段包括:questionansweris_activeis_globalcategorytagsorder_index。平台负责管理所有其他内容(搜索数据、使用计数、时间戳);请求正文中的任何其他字段都将被忽略。


列出 FAQ

GET /faqs

返回您账户中的 FAQ,按最新顺序排列。可选择按单个营销活动或活动状态进行过滤。

查询参数

参数 必需 描述
campaign_id 仅返回关联到此营销活动的 FAQ。
is_active 仅返回具有此活动状态(truefalse)的 FAQ。此过滤器按页应用,因此一页包含的项目可能少于 limit
limit 每页的最大 FAQ 数。默认 50,最大 100
cursor 用于继续获取的 FAQ ID。传入上一页的 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_cursornull 时,表示没有更多结果。


获取常见问题解答 (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"
}

更新常见问题解答 (FAQ)

PUT /faqs/{faqId}

部分更新常见问题解答。仅更改提供的可写字段;其他所有内容保持其当前值。更改 questionanswer 会在后台自动刷新常见问题解答的搜索数据。

如果您发送 questionanswer,它们必须是非空字符串。如果不发送任何可识别的可写字段,将返回 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"
}

删除常见问题解答 (FAQ)

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 要删除的常见问题 ID 的非空数组(最多 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 个)。每个项必须具有非空的 questionanswer;它还可以包含 is_activeis_globalcategorytagsorder_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 是创建或更新的常见问题 ID,顺序与您提供的顺序一致。


重新排序常见问题

POST /faqs/reorder

设置营销活动常见问题的显示顺序。请提供所需顺序的 FAQ ID 完整列表;每个 FAQ 的位置将更新以匹配其在数组中的顺序。

请求字段

字段 必填 说明
campaign_id 要重新排序常见问题的营销活动。
ordered_faq_ids 包含营销活动中所有 FAQ ID 的非空数组,按所需显示顺序排列(最多 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
}

如果您的账户中找不到该营销活动或任何 FAQ ID,请求将返回 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

将 AI 机器人用于查找此常见问题解答的数据(其语义和关键字搜索数据)加入重建队列。如果常见问题解答未按预期出现在回复中,此操作非常有用。重建过程在后台运行,通常在几秒钟内完成;在重建期间,该常见问题解答可能会暂时从 AI 回复中排除。

此端点返回 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"
}

AI 辅助的常见问题解答管理

以下端点不仅仅是简单的 CRUD 操作:它们调用了仪表板 FAQ 编辑器所使用的 AI 辅助工具——用于查找重复项、从文档生成条目,以及将 FAQ 与开放的知识缺口任务进行匹配。此集合中的请求体使用 camelCase 字段名称(campaignIdtaskIdsourceIds…),这与应用程序自身的请求格式相匹配,而不是本页面其他地方使用的 snake_case——请复制下方的示例,而不是猜测字段名称。

将 FAQ 分叉为仅限营销活动的副本

POST /faqs/{faqId}/fork-for-campaign

创建一个现有 FAQ 的副本,将其限定在单个营销活动中,并将该营销活动重新链接到新副本,而不是原始 FAQ。当您想要为某个营销活动自定义答案,而不更改原始 FAQ 在其他地方的使用情况时,请使用此功能。原始 FAQ 将保留在原处——它只会失去与此营销活动的链接。

请求字段

字段 必需 描述
campaign_id 要将新副本限定于此,并从原始 FAQ 重新链接的营销活动。
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"
}

查找近似重复的 FAQ

POST /faqs/dedupe

启动一个后台作业,扫描您的 FAQ 库以查找近似重复和重叠的条目,并在确信的情况下合并或删除它们。这在批量导入后,或在多轮 AI 生成的 FAQ 导致库中出现重叠后非常有用。每个账户一次只能运行一个去重作业——在作业仍在运行时启动第二个作业将返回 409

请求字段

字段 必需 描述
sourceIds 用于限定去重范围的知识库源 ID 数组。省略此项则扫描整个 FAQ 库。

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

清除已完成的去重作业,使其不再显示为活动结果。幂等操作——即使没有可消除的内容也可以安全调用。如果作业仍处于 queuedprocessing 状态,则返回 409(您无法消除尚未完成的运行)。

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 }

从上传的文档生成常见问题解答 (FAQ)

POST /faqs/generate-from-documents

读取您账户文件存储中已有的一个或多个文档,并让 AI 根据其内容起草常见问题解答。系统会将草稿与您现有的库进行比对,以便复用或更新条目,而不是创建重复内容。结果不会立即写入,而是作为待处理的变更集存储在营销活动中供您审阅,随后通过下方的 应用已审阅的 FAQ 变更 进行应用(或丢弃)。此操作会消耗积分,因为这是对文档文本进行的一次 AI 生成处理。

此端点不携带文件:storagePath 必须指向您自己上传文件夹 (users/{your user id}/uploads/) 下已有的文件,这与知识库 API 中的 导入已上传文档 遵循相同的约定。

请求字段

字段 必填 说明
campaignId 生成的 FAQ 所属的营销活动。
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 是等待审阅的拟议变更总数;reusedCountmodifiedCountnewCount 将其细分为:与现有条目匹配且未更改的 FAQ、AI 建议编辑的 FAQ,以及全新的 FAQ。无论处理是否成功,上传的文件在处理完成后都会从存储中删除。

应用已审阅的 FAQ 变更

POST /faqs/apply-optimization

应用(或丢弃)一组 AI 拟议的待处理 FAQ 变更——即上述 从文档生成 FAQ 或仪表板 FAQ 优化审阅所产生的变更。您可以精确选择要接受哪些拟议变更;未提及的任何内容都将保持不变(省略的变更绝不会被视为删除某项内容的拒绝操作)。

请求字段

字段 必填 说明
campaignId 二选一 正在应用待处理 FAQ 变更的营销活动。
agentId 二选一 在代理原生账户上,正在应用待处理 FAQ 变更的 AI 代理。请准确提供 campaignId / agentId 中的一个,切勿同时提供。
acceptedChanges 您接受的变更数组,每个元素为 { action, faq_id?, faq_ref_path?, question?, answer?, edit_scope? }actionkeepremoveadd_from_librarycreate_newmodify 之一。发送空数组可丢弃待处理集而不应用任何内容。

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 是应用后营销活动(或代理)关联的 FAQ 总数。如果没有待处理的变更集可应用,响应为 { "success": true, "message": "No pending FAQ changes to apply" }

查找与任务相似的 FAQ

POST /faqs/similar-for-task

根据知识缺口任务的问题,按相关性对您的 FAQ 库进行排序——这与仪表板“使用现有 FAQ”选择器背后的查找逻辑相同。只读。 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 状态码。

使用现有常见问题解答 (FAQ) 解决任务

POST /faqs/resolve-task

通过将知识缺口任务链接到您已有的 FAQ(而不是编写新的 FAQ)来解决该任务,将该 FAQ 的答案发送给触发缺口的联系人,并将任务标记为已完成。在 查找与任务相似的 FAQ 找到涵盖该问题的现有 FAQ 后,请使用此端点。

与上面的端点一样,此端点始终返回 200 — 请检查正文中的 success

请求字段

字段 必填 说明
taskId 要解决的 faq_update 任务。
faqId 要链接并作为答案发送的现有 FAQ。

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(AI 正在回复该联系人,因此稍后发送)、skipped_no_contact(任务没有关联的联系人)或 skipped_no_campaign(没有可用于发送的营销活动)。


常见问题解答 (FAQ) API 错误

FAQ 端点返回标准的错误信封:

{
  "success": false,
  "error": "FAQ not found"
}
状态 在 FAQ 端点上发生时
400 缺少必填字段或字段无效(例如 question 为空、缺少 campaign_id 或批量请求中超过 500 个项目)。
404 未找到 FAQ 或营销活动 — 它们不存在或属于其他账户。
409 在去重作业已处于 queued/processing 状态时调用了 POST /faqs/dedupe,或者在作业尚未完成时调用了 POST /faqs/dedupe/dismiss

每个端点都可能返回的共享代码 — 401, 403(您的套餐不包含 API 访问权限), 429(速率限制)和 500 — 及其重试指南列在 错误与分页 中。

POST /faqs/similar-for-taskPOST /faqs/resolve-task 是本页面上的两个例外:即使在预期失败(未知任务、错误的任务类型)时,它们也会返回 200,并将实际状态放入正文的 error_code 中 — 请参阅上面的各个端点说明。


相关内容