Inbound Webhooks

最后更新

Inbound webhooks(入站 Webhook)让外部工具能够触发你账户中的操作。一个 Webhook 会从外部服务(例如像 Cal.com 这样的预约工具)接收已签名的事件,将其数据与联系人匹配,并对该联系人的会话执行你选择的操作 — 发送消息、应用消息序列、分配会话、添加标签等等。

典型用法:客户在你的排期工具中预约会议 → Webhook 触发 → 联系人立即收到一条 WhatsApp 确认消息,并在会议前安排一条提醒序列。

观看教程

设置一个 Webhook

  1. 前往 Settings → Inbound Webhooks,点击 Add inbound webhook。
  2. 选择服务商(或选择 Generic 以适配任何能发送 JSON 的工具)和 Target inbox,然后把传入的数据映射到联系人(见下文)。
  3. 选择事件到达时要执行的操作。
  4. 将 Webhook URL 复制到外部工具中并启用它。

每个 Webhook 都可以随时启用或停用,列表会显示每个 Webhook 的服务商与状态。

这里的操作与 Automation 中完全一致 — 包括收件箱选择、接收人、电子邮件收件箱下的邮件主题、Cc 与 Bcc 字段,以及 Send a Message 操作上的文件附件。Send a Message 操作还可以引用事件中的值,让消息直接说出外部工具发来的内容(见下文)。

映射传入的数据

Payload mapping 下的每一行把传入数据中的一个字段放到联系人的一个字段上:Name、Phone number、Email、Identifier 或自定义属性。如果没有联系人与该电话号码或邮箱匹配,系统会在 Target inbox 中创建一个新联系人。

  1. 保存 Webhook,点击 Listen for test event,然后从你的工具发送一次测试。
  2. 如果映射仍为空,编辑器会为名称像姓名、电话或邮箱的字段自动填好。检查后保存。
  3. 要自己选择字段,打开 Field in the incoming data。它会列出上一次测试事件中的每个字段及其值,你也仍可以输入路径,例如 customer.phone。

字段列表显示测试事件中的每个字段及其值

当映射的字段传来空值(空文本或 null)时,这一行对应的自定义属性会被清空,旧值不会继续留在联系人上。例如,配送工具为一趟还没有运单号的行程发送 "tracking_no": "",就会清掉之前的运单号。如果根本没有发送这个字段,该属性会保持原值。Name、Phone number 和 Email 永远不会因为空值而被清空。

检查每一行映射

编辑器会在每一行下方显示它从上一次测试事件中读到的值,例如 Reads “+60123456789” from the last test event。

根据测试事件填好的 Payload mapping,每行显示读到的值

Nothing found at this path in the last test event 表示路径不对。字段从数据的最顶层开始,所以发送 {"phone": "…"} 的工具需要填 phone,而不是 payload.phone。

WhatsApp 或短信收件箱通过电话号码联系联系人,邮件收件箱则通过邮箱。如果没有任何一行能读到它,编辑器会显示警告,因为这些事件将被跳过。

在消息中使用事件里的值

  1. 先发送一次测试事件(Listen for test event),这样才有字段可选。
  2. 在 Send a Message 操作的消息框中输入 {{。
  3. 列表最前面是最近一次收到的事件中的字段,每个都带有它的值,例如 From the last received event: Dinding。之后是常用的联系人和会话字段。
  4. 选择一个字段,它会以可用的写法插入消息中。
字段 插入消息的内容
普通名称 {{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。

Recent events 中一个 Done 事件和一个 Skipped 事件

结果 含义
Done 已找到或创建联系人,并执行了操作。Open conversation 打开该会话。如果某个操作失败,会在事件下列出其名称。
Skipped 没有创建任何内容。该行会说明原因:没有找到电话号码或邮箱、电话号码无效(请带上国家代码,例如 +60123456789)、未选择目标收件箱,或 Webhook 已被关闭。
Ignored 该事件属于此 Webhook 不使用的类型,例如不是预约、改期或取消的 Cal.com 事件。
Failed 我们这边出现问题,我们的团队会收到通知。

常见问题

为什么联系人上还显示旧值?

很可能是你的工具没有发送这个字段,而不是发送了空值。没有发送的字段会让属性保持原样;把它作为空文本发送才能清空。

为什么 payload 的值在 message sequence 或自动化规则里是空的?

它们运行时拿不到这个事件。请把这个值映射到联系人的自定义属性,然后在序列或规则中使用 {{contact.custom_attribute.<key>}}。

为什么输入 {{ 时列表是空的?

列表显示的是最近一次收到的事件中的字段。先发送一次测试事件,再重新输入 {{。

相关文章