# 测试并连接智能体

## 观看教程

{% embed url="https://youtu.be/On9uz4-b-9A" %}

## 在 playground 中测试

在设计器中打开 **Playground** 标签页，像客户一样与你的智能体聊天。你运行的每一次对话都会自动保存——点击 **History** 即可查看该智能体最近 20 次测试会话，方便你对比更改前后的表现差异。

每条回复下方的 **Nodes visited** 会列出智能体走过的步骤，**FAQs used** 则列出这条回复用到的 AI Knowledge 问题——只列出真正用到的，方便你确认某个问题是由你预期的那条 FAQ 回答的。在正式会话中，智能体的回复下方也会显示这两项——见[回复与添加内部备注](/conversations/replying-and-private-notes)。如果智能体在过程中发现你的流程有问题——例如某个产品步骤用保存“是/否”答案而不是产品的变量去搜索目录——那里还会出现一行 **Flow warning**，指出该步骤和变量，方便你在发布前修正。

![Playground 回复下方的 Nodes visited 和 FAQs used](../../.gitbook/assets/guides/playground-faqs-used.jpg)

![Playground 测试历史](../../.gitbook/assets/guides/test-history.jpg)

## 用照片、语音和 PDF 文档测试

在 Playground 中附上一张照片、一条语音或一份 PDF，就像客户发送的那样。文件下方会显示智能体读到的内容：图片的 **AI description**、语音的转录文字，或文档的 **AI summary**。这与你的团队在真实对话中看到的文字相同，因此你可以在智能体回复之前，确认它是否正确理解了订单清单、截图、口头请求或报价单。之后的测试对话也会基于这段内容，所以后续消息的表现与真实客户一致。

![Playground 中的照片描述与语音转录](../../.gitbook/assets/guides/playground-media-transcripts.jpg)

PDF 文档特别适合报价单、订单表、发票、收据、银行转账凭证和预订确认：智能体会提取其中的项目、金额、日期和参考编号，**收集**步骤可以直接从文档中获取答案。扫描版 PDF 同样可以读取。Word、Excel 或 ZIP 等其他文件类型会作为文件转交给你的团队，但智能体不会读取；特别大的 PDF 也会直接转交而不生成摘要。损坏、有密码保护或并非真正 PDF 的文件不会被猜测内容：智能体会被告知无法读取该文件，文件下方也不会显示摘要。

![Playground 中 PDF 报价单的 AI summary](../../.gitbook/assets/guides/playground-pdf-ai-summary.jpg)

## 以真实客户身份测试

默认情况下，Playground 扮演的是一位没有任何记录的匿名客户，因此每条路线都保持可见，智能体也不知道对方是谁。要完全按照某位客户的体验来测试流程，请点击聊天上方的 **Scenario**，并描述你要扮演的客户：

* **Load from a conversation** — 输入对话编号，客户的联系人资料、标签以及带来这次对话的广告会自动填入。
* **Contact** — 搜索现有联系人，或手动输入姓名、电话号码、电子邮件和任何联系人属性。
* **Ad** — 客户点击的 Meta 广告，让专属于广告的路线像上线后一样运作。
* **Labels** — 客户对话或联系人上的标签。
* **Inbox** — 对话到达的收件箱。流程按该收件箱的时区计时，结束步骤的 **Outside business hours** 消息也遵循该收件箱的营业时间。
* **Time** — 为对话假定一个时刻，让问候语、营业时间以及其他与时间相关的回复像在那个时刻一样运作。**Testing as** 条会显示你选择的收件箱和时间。

按下 **Apply**，对话会以该客户的身份重新开始。聊天上方的 **Testing as** 条显示你正在扮演谁；每当你的路线条件隐藏某个分支或把客户直接送入某个分支时，聊天中会出现一条备注，说明哪些路线受到影响。读取联系人资料的条件——例如已有电话号码时跳过电话提问——会使用你输入的记录。

![Playground 中的 Scenario 对话框](../../.gitbook/assets/guides/playground-scenario-dialog.jpg)

![Scenario 对话框中的收件箱和时间](../../.gitbook/assets/guides/playground-scenario-inbox-time.jpg)

* **Reset** 会保留场景，让你一键重跑同一位客户；对话框中的 **Clear scenario** 则回到匿名测试者。
* 更改场景会重新开始测试对话——真实客户的资料从第一条消息起就是固定的。
* **History** 会显示每个已保存的测试会话扮演的是哪位客户。

![针对该场景被隐藏或强制的路线](../../.gitbook/assets/guides/playground-scenario-routes.jpg)

## 连接收件箱

点击设计器页头的 **Inboxes**，选择该智能体应处理哪些收件箱——每个收件箱只能分配给一个 Flow 智能体。针对每个收件箱，你还可以设置：

* **Pause when a human replies** — 当团队成员回复时（无论是从仪表盘还是已连接的应用），智能体会自动退出，而不会与其抢话。
* **Active hours** — 智能体只在你设定的开始与结束时间之间处理这个收件箱，每天如此，按该收件箱的时区计算。跨越午夜的时段（例如下午 6:00 到早上 8:00）也可以。
* **Don't reply to these labels** — 智能体会跳过任何标记了你所选标签的会话或联系人，让 VIP 或投诉案例始终由人工处理。
* **Only reply to specific ads** — 将智能体限制为仅回复源自特定 Meta 广告 ID 的聊天。
* **Ignore WhatsApp group chats** — 智能体不参与群组对话。

![Inboxes 对话框中某个收件箱的活跃时段](../../.gitbook/assets/guides/flow-inbox-active-hours.jpg)

在收件箱的活跃时段之外，智能体对该收件箱上的所有人保持安静：新客户不会进入 flow，已经进行到一半的客户也不会再收到智能体的回复，后续跟进消息也不会发出。如果收件箱设置了离线消息，则改为发送该消息。每个会话顶部的智能体标记会显示 **Outside active hours** 及其时段，让你的团队知道这是有意的安静；回复框里的机器人按钮仍可在你需要时让智能体作答——见[回复与添加内部备注](/conversations/replying-and-private-notes)。

![会话标记显示 Outside active hours](../../.gitbook/assets/guides/flow-agent-badge-outside-active-hours.jpg)

## 发布

点击 **Publish**，选择谁可以与智能体对话：

* **Public** — 所有向已连接收件箱发送消息的人。
* **Testers only** — 仅限你在 **Tester phone numbers, emails or WhatsApp usernames** 下列出的电话号码、电子邮件或 WhatsApp 用户名，方便你在正式开放之前先在实际渠道上试用该智能体。

如果该智能体被设置为[静默转接](/flow-agents/building-the-conversation-flow)（转接消息为空），首次发布时会展示客户将体验到的内容，并要求你在正式上线前确认。

客户开始与智能体对话后，设计器工具栏中的火焰按钮会显示他们到达了哪些步骤、在哪里中断——请参阅[查看客户去了哪里](/flow-agents/building-the-conversation-flow)。

![发布对话框](../../.gitbook/assets/guides/publish-dialog.jpg)

### 用 ##reset 重新开始测试

智能体测试者名单上的任何人都可以用自己的手机重新开始测试。在与智能体的聊天中单独发送一条 **##reset** 消息（大小写不限）。智能体会回复 "Flow reset — your next message starts the flow from the beginning." 进行确认，你的下一条消息就会被当作一位全新客户的第一条消息处理，仍在同一个聊天中。无需换号码或新开聊天，就能再次看到开场。

重置会清除流程步骤添加的标签、这次测试填入的 AI 列，以及它记录的提交数据。其他标签和联系人资料保持不变。

无论智能体发布为 **Testers only** 还是 **Public**，只要你在测试者名单上，**##reset** 都有效。对于不在名单上的人，它只是一条普通消息。

## 行为设置

设计器页头的 **Settings** 按钮用于控制智能体在对话中的行为：

* **Keep answering after the flow ends** — 流程结束后智能体继续回答问题，而不是就此沉默。
* **Answer FAQs on the first message** — 如果客户的第一条消息与你的 AI Knowledge 匹配，智能体会在流程开场之前先作答。
* **Continue the flow after an FAQ answer** — 默认开启：智能体从你的 AI Knowledge 或产品目录回答问题后会继续流程——再次询问尚未回答的问题，或者在该问题是客户第一条消息时播放问候语和开场问题。关闭后，智能体回答完就停下，等待客户的下一条消息；流程会在下一条不是提问的消息时开始（或继续）。
* **Let AI rewrite messages** — 智能体会按你在 AI Knowledge → Behaviour 中设定的语气改写流程和常见问题的消息。事实、价格、日期和链接绝不会被改动。
* **Try to help before handing off** — 在把对话转给团队之前，智能体会先确认自己是否还能帮上忙：它可能提出一个澄清问题，或只依据你的流程和 AI Knowledge 的内容作答。它绝不编造信息；要求人工服务的客户始终会被立即转接。默认关闭 — 准备好后按智能体逐个开启。你还可以列出希望智能体先收集的信息——见下文。
* **Pause duration after handoff** — 转接后智能体暂停多久再恢复（15 分钟到 24 小时，或永不恢复）。
* **Re-ask limit for collect steps** — 收集必填信息时智能体最多追问几次，之后继续流程。
* **Delay before replying** — 回复前的可选延迟，让回复感觉不那么即时。
* **Quiet hours for follow-ups** — 在你设定的开始与结束时间之间（按收件箱时区）不发送跟进消息。落在这段时间的跟进会在结束后发出。
* **Facebook post context** — 回复帖子评论时，智能体能看到帖子文本的多少内容。

该对话框还会在 **Business hours** 下列出连接到智能体的每个收件箱及其时间表和时区，让你无需离开设计器就能设置结束步骤的 **Outside business hours** 消息所遵循的营业时间——参见[转接消息](/flow-agents/building-the-conversation-flow)。

![Flow 智能体设置](../../.gitbook/assets/guides/flow-agent-settings.jpg)

### 转接前要收集的信息

开启 **Try to help before handing off** 后，其下方会出现一个名为 **Details to collect before handing off** 的列表。把团队处理转接时需要的信息加进去——电话号码、方便回电的时间、订单编号——每项附一句简短说明，写明要问什么，然后按 **Save**。

当智能体必须转接一个自己无法回答的普通问题时，它会一次性在一条消息里询问这些信息，使用客户的语言，并说明这些都是可选的。无论客户如何回复，对话接下来都会转给你的团队，并附上一条私密备注 **Collected before handoff**，列出客户的问题和每一项信息；跳过的会标为 *not provided*。这些信息也会像其他收集到的信息一样出现在流程的提交记录中。

智能体绝不会把这个询问摆在着急的客户面前：要求人工服务或明显不满的客户会被立即转接。流程已经收集过的信息不会再问一次；如果客户 15 分钟没有回复，转接也会照常进行，并带上已经分享的内容。

![智能体 Settings 中的转接前要收集的信息](../../.gitbook/assets/guides/flow-settings-details-before-handoff.jpg)

如果智能体因为额度问题停止回复出现报错，请检查你的方案的 AI 额度使用情况——当账户额度用尽时智能体会暂停，额度续期或提高后会自动恢复。

如果某条回复因为临时的服务故障而失败，智能体会把对话转给你的团队，并在对话中留下一条备注，几分钟后再悄悄重试一次——除非已经有人回复或暂停了它。你也可以用对话回复框中的机器人按钮，让智能体按需回复——见[回复与添加内部备注](/conversations/replying-and-private-notes)。

---
Source: https://help.mampuai.com/zh/flow-agents/testing-and-connecting-an-agent
