Inbound webhooks(入站 Webhook)让外部工具能够触发你账户中的操作。一个 Webhook 会从外部服务(例如像 Cal.com 这样的预约工具)接收已签名的事件,将其数据与联系人匹配,并对该联系人的会话执行你选择的操作 — 发送消息、应用消息序列、分配会话、添加标签等等。
典型用法:客户在你的排期工具中预约会议 → Webhook 触发 → 联系人立即收到一条 WhatsApp 确认消息,并在会议前安排一条提醒序列。
观看教程
设置一个 Webhook
- 前往 Settings → Inbound Webhooks,点击 Add inbound webhook。
- 选择服务商(或选择 Generic 以适配任何能发送 JSON 的工具)和 Target inbox,然后把传入的数据映射到联系人(见下文)。
- 选择事件到达时要执行的操作。
- 将 Webhook URL 复制到外部工具中并启用它。
每个 Webhook 都可以随时启用或停用,列表会显示每个 Webhook 的服务商与状态。
这里的操作与 Automation 中完全一致 — 包括收件箱选择、接收人、电子邮件收件箱下的邮件主题、Cc 与 Bcc 字段,以及 Send a Message 操作上的文件附件。Send a Message 操作还可以引用事件中的值,让消息直接说出外部工具发来的内容(见下文)。
映射传入的数据
Payload mapping 下的每一行把传入数据中的一个字段放到联系人的一个字段上:Name、Phone number、Email、Identifier 或自定义属性。如果没有联系人与该电话号码或邮箱匹配,系统会在 Target inbox 中创建一个新联系人。
- 保存 Webhook,点击 Listen for test event,然后从你的工具发送一次测试。
- 如果映射仍为空,编辑器会为名称像姓名、电话或邮箱的字段自动填好。检查后保存。
- 要自己选择字段,打开 Field in the incoming data。它会列出上一次测试事件中的每个字段及其值,你也仍可以输入路径,例如
customer.phone。

当映射的字段传来空值(空文本或 null)时,这一行对应的自定义属性会被清空,旧值不会继续留在联系人上。例如,配送工具为一趟还没有运单号的行程发送 "tracking_no": "",就会清掉之前的运单号。如果根本没有发送这个字段,该属性会保持原值。Name、Phone number 和 Email 永远不会因为空值而被清空。
检查每一行映射
编辑器会在每一行下方显示它从上一次测试事件中读到的值,例如 Reads “+60123456789” from the last test event。

Nothing found at this path in the last test event 表示路径不对。字段从数据的最顶层开始,所以发送 {"phone": "…"} 的工具需要填 phone,而不是 payload.phone。
WhatsApp 或短信收件箱通过电话号码联系联系人,邮件收件箱则通过邮箱。如果没有任何一行能读到它,编辑器会显示警告,因为这些事件将被跳过。
在消息中使用事件里的值
- 先发送一次测试事件(Listen for test event),这样才有字段可选。
- 在 Send a Message 操作的消息框中输入
{{。 - 列表最前面是最近一次收到的事件中的字段,每个都带有它的值,例如 From the last received event: Dinding。之后是常用的联系人和会话字段。
- 选择一个字段,它会以可用的写法插入消息中。
| 字段 | 插入消息的内容 |
|---|---|
| 普通名称 | {{payload.Location}} |
| 含空格或符号的名称 | {{payload['Filter Q2']}} |
| 列表中的某一项,从 0 开始数 | {{payload.answers[0].a}} |
在 Official WhatsApp API 收件箱上,通过 Add WhatsApp template for closed window 添加一个已获批准的模板。模板的变量同样可以使用这些 {{payload...}} 值。从未给你的号码发过消息的新线索总是在 24 小时窗口之外,所以他们收到的就是这个模板。
Note:事件中的值只在 Send a Message 中有效。私人备注、团队邮件、外发 Webhook、message sequence 和自动化规则运行时都拿不到这个事件。要在这些地方使用某个值,请把它映射到联系人的自定义属性,然后使用 {{contact.custom_attribute.<key>}}。
查看每个事件的处理结果
Recent events 列出最近 20 个事件以及每个事件的处理结果。发送事件后点击 Refresh。

| 结果 | 含义 |
|---|---|
| Done | 已找到或创建联系人,并执行了操作。Open conversation 打开该会话。如果某个操作失败,会在事件下列出其名称。 |
| Skipped | 没有创建任何内容。该行会说明原因:没有找到电话号码或邮箱、电话号码无效(请带上国家代码,例如 +60123456789)、未选择目标收件箱,或 Webhook 已被关闭。 |
| Ignored | 该事件属于此 Webhook 不使用的类型,例如不是预约、改期或取消的 Cal.com 事件。 |
| Failed | 我们这边出现问题,我们的团队会收到通知。 |
常见问题
为什么联系人上还显示旧值?
很可能是你的工具没有发送这个字段,而不是发送了空值。没有发送的字段会让属性保持原样;把它作为空文本发送才能清空。
为什么 payload 的值在 message sequence 或自动化规则里是空的?
它们运行时拿不到这个事件。请把这个值映射到联系人的自定义属性,然后在序列或规则中使用 {{contact.custom_attribute.<key>}}。
为什么输入 {{ 时列表是空的?
列表显示的是最近一次收到的事件中的字段。先发送一次测试事件,再重新输入 {{。