Web钩子¶
警告
强烈建议 在决定使用 Webhook 并在整个实施过程中咨询开发人员、解决方案架构师或其他技术角色。如果配置不当,Webhook 可能会破坏 Odoo 数据库,并且恢复可能需要时间。
Webhook(可以在 Studio 中创建)是通过用户定义的 HTTP 回调由外部事件触发的自动化规则。当外部系统向 Odoo Webhook 的 URL(“触发器”)发送带有数据文件(“有效载荷”)的数据时,Odoo 会在数据库中响应一个预定义的操作。
与计划操作或手动 API 调用不同,Webhook 支持实时通信和自动化。例如,如果在外部 POS 系统中确认了销售订单,Webhook 可以立即更新 Odoo 的库存,从而确保系统同步。
注解
本文涵盖创建一个从外部来源 接收 数据的 Webhook。此外,还可以创建一个 向外部 Webhook 发送 API 调用的自动化操作 。
在 Studio 中创建 Webhook¶
Webhook 在 Studio 中进行配置,其设置分为 触发器 和 操作 两部分。
小技巧
在连接 Odoo 数据库时,设置 Webhook 不需要编写代码,但测试需要使用像 Postman 这样的外部工具。 自定义目标记录或操作 可能需要编程技能。
激活开发者模式 以修改 Webhook 的目标模型(例如,销售订单或联系信息),并查找模型的技术名称(可能需要用于正确的有效载荷配置)。
设置 Webhook 的触发器¶
要使用 Studio 创建 Webhook,请 打开 Studio ,点击 Webhook ,然后点击 新建 。在这里,为 Webhook 命名,根据需要修改 Webhook 的模型(要针对的数据库条目类型),并切换是否记录对 Webhook URL 的调用(这将跟踪 Webhook 的调用历史以便排查问题)。
Webhook 的 URL 是自动生成的。这是用于测试 Webhook 并将其连接到将向数据库发送更新的外部系统的 URL。
危险
Webhook 的 URL 是 机密的 ,应谨慎处理。在线或不加注意地分享它可能会导致未经授权的访问 Odoo 数据库。如有需要,请点击 轮换密钥 更改 URL。
最后,如果发送 Webhook 的系统不是 Odoo,请调整 目标记录 操作以查找包含在 API 调用有效载荷中的 JSON 记录。如果发送 Webhook 的系统是 Odoo 数据库,请确保 id
和 model
出现在有效载荷中。
小技巧
尽管 模型 已在 Odoo 中设置,但必须在有效载荷中包含模型的技术名称。将鼠标悬停在模型名称上,然后点击 内部链接 图标以在 模型 字段中找到此技术名称。例如,销售订单 Webhook 使用 销售订单 模型,但在有效载荷中使用的技术名称为 sale.order
。
注解
在 Odoo 数据库中创建记录时,不应使用目标记录的默认格式。而是使用 model.browse(i)
或 model.search(i)
。
设置 Webhook 的操作¶
在配置 Webhook 时设置其操作,请点击 添加操作 在 要执行的操作 标签页下。点击操作的 类型 并根据需要设置字段。
测试 Webhook¶
注解
测试 Webhook 需要先设置 Webhook,准备好要发送到 Webhook 的测试有效载荷,并使用外部工具或系统通过 POST
API 请求发送有效载荷。可以考虑使用像 Postman 这样的工具,从而减少对技术技能的需求。
如果在测试期间返回了 200 OK
或 status: ok
的消息,则表示 Webhook 在 Odoo 端正常运行。从这里开始,可以使用其他工具通过 Webhook 的 URL 自动将这些 Webhook 调用发送到 Odoo。
如果返回任何其他响应,响应中的数字有助于识别问题。例如,500 内部服务器错误
表示 Odoo 无法正确解析调用。如果出现这种情况,请确保 JSON 文件中的字段在 Webhook 的配置和发送测试调用的系统中正确映射。在 Webhook 配置中启用调用日志记录功能可提供错误日志(如果 Webhook 未按预期运行)。
实现 Webhook¶
一旦 Webhook 完全配置完成,开始将其连接到通过此 Webhook 向 Odoo 数据库发送数据的系统。确保在设置该系统时,API 调用被发送到 Webhook 的 URL。
Webhook 使用案例¶
以下是两个在 Odoo 中使用 Webhook 的示例。这些 Webhook 需要外部工具(工具会随示例列出)。
警告
在决定实施 Webhook 时,请咨询开发人员、解决方案架构师或其他技术角色。如果配置不当,Webhook 可能会破坏 Odoo 数据库,并且恢复可能需要时间。
更新销售订单的货币¶
此 Webhook 将 销售 应用中的销售订单更新为美元 (USD)。它适用于位于美国境外但母公司位于美国境内的子公司,或在合并期间将数据整合到一个 Odoo 数据库时。
设置 Webhook 的触发器¶
要设置此 Webhook,请打开 销售 应用。然后, 设置触发器 ,将 模型 设置为 销售订单
。此外,将 目标记录 设置为 model.env[payload.get('model')].browse(int(payload.get('id')))
。以下对此进行分解说明。
model :在 Odoo 中被更新的内容(在本例中为销售订单)。这与之前设置的 模型 相匹配。
env :操作发生的地方。在本例中,它是 Odoo。
payload :发送到 Webhook URL 的内容。这包含用于更新销售订单的信息。
get(‘model’) :告诉 Webhook 查看哪个数据库记录。在本例中,Webhook 检索 (
get
) 与特定模型
相关联的数据。在此示例中,这是销售订单模型。browse :告诉 Webhook 在由有效载荷设置的
模型
(销售订单)中查找要更新的内容。int :将目标转换为
整数
(一个完整数字)。这在有效载荷的目标记录中包含某些单词(字符串
)或小数时非常重要。get(‘id’) :识别正在 Odoo 中更新的销售订单编号。
设置 Webhook 的操作¶
设置触发器后,通过点击 添加操作 来设置 Webhook 的操作。对于 类型 ,点击 更新记录 。然后选择 更新
,选择字段 货币
,并选择 USD
以将货币字段更新为美元。最后,点击 保存并关闭 。
Webhook 设置总结¶
总结一下所设置的内容:Webhook 以销售订单为目标,通过其销售订单编号进行识别,并在向 Webhook 的 URL 发送包含该销售订单编号的 POST 请求时(由有效载荷的 id
记录标识),将其货币更新为 USD
。
测试 Webhook¶
测试 Webhook 的设置以确保一切正确。此过程使用名为 Postman 的工具发送模拟触发器。
本节将指导您如何在 Postman 中测试此 Webhook,但如果该工具中出现问题,则不会提供帮助。如需针对 Postman 的具体帮助,请联系其支持团队。
打开 Postman 后,创建一个新的 HTTP 请求,并将其方法设置为 POST 。接下来,复制正在测试的 Webhook URL 并将其粘贴到 Postman 的 URL 字段中。然后,点击 正文 标签页并选择 原始 选项。将文件类型设置为 JSON ,然后复制此代码并将其粘贴到文件中。
{
"model": "sale.order",
"id": "SALES ORDER NUMBER"
}
从这里开始,选择一个销售订单来测试 Webhook。如果无法在实时 Odoo 数据库中进行测试,可以考虑创建一个包含示例销售订单和已配置 Webhook 的演示数据库。将 SALES ORDER NUMBER
替换为销售订单编号(不带 S
或前导零)。例如,编号为 S00007
的销售订单应在 Postman 中输入为 7
。最后,在 Postman 中点击 发送 。
如果返回了 200 OK
或 status: ok
的消息,则表示 Webhook 在 Odoo 端正常运行。测试销售订单的货币已被更新。从这里开始,可以使用其他工具通过 Webhook 的 URL 自动将这些 Webhook 调用发送到 Odoo。
如果返回任何其他响应,与其关联的数字有助于识别问题。例如,500 内部服务器错误
表示 Odoo 无法正确解析调用。如果出现这种情况,请确保 model
和 id
字段在 Webhook 配置和 Postman 中正确映射。
创建新联系人¶
此 Webhook 使用自定义代码在 Odoo 数据库中创建新联系人。这对于自动创建新供应商或客户可能会有所帮助。
设置 Webhook 的触发器¶
要设置此 Webhook,请打开 联系人 应用。然后, 设置触发器 ,将 模型 设置为 联系人
。此外,将 目标记录 设置为 model.browse([2])
。以下对此进行分解说明。
model :在 Odoo 中被更新的内容(在本例中为联系人)。这与之前设置的 模型 相匹配。
browse :告诉 Webhook 在由有效载荷设置的
模型
(联系人)中查找要创建的内容。
设置 Webhook 的操作¶
设置触发器后,通过点击 添加操作 来设置 Webhook 的操作。对于 类型 ,点击 执行代码 ,然后将 代码 设置为下面的示例代码。最后,点击 保存并关闭 。
# variables to retrieve and hold data from the payload
contact_name = payload.get('name')
contact_email = payload.get('email')
contact_phone = payload.get('phone')
# a Python function to turn the variables into a contact in Odoo
if contact_name and contact_email:
new_partner = env['res.partner'].create({
'name': contact_name,
'email': contact_email,
'phone': contact_phone,
'company_type':'person',
'customer_rank': 1,
})
# an error message for missing required data in the payload
else:
raise ValueError("Missing required fields: 'name' and 'email'")
Webhook 设置总结¶
总结一下所设置的内容:当向 Webhook 的 URL 发送包含联系人信息的 API 调用时,Webhook 将创建一个联系人。
测试 Webhook¶
测试 Webhook 的设置以确保一切正确。此过程使用名为 Postman 的工具发送模拟触发器。
本节将指导您如何在 Postman 中测试此 Webhook,但如果该工具中出现问题,则不会提供帮助。如需针对 Postman 的具体帮助,请联系其支持团队。
打开 Postman 后,创建一个新请求,并将其方法设置为 POST 。接下来,复制正在测试的 Webhook URL 并将其粘贴到 Postman 的 URL 字段中。然后,点击 正文 标签页并点击 原始 。将文件类型设置为 JSON ,然后复制此代码并将其粘贴到文件中。
{
"name": "CONTACT NAME",
"email": "CONTACTEMAIL@EMAIL.COM",
"phone": "CONTACT PHONE NUMBER"
}
在 Postman 中将上述字段替换为新联系人的信息,然后点击 发送 。
如果返回了 200 OK
或 status: ok
的消息,则表示 Webhook 在 Odoo 端正常运行。新的测试联系人会出现在 联系人 应用中。从这里开始,可以使用其他工具通过 Webhook 的 URL 自动将这些 Webhook 调用发送到 Odoo。
如果返回任何其他响应,与其关联的数字有助于识别问题。例如,500 内部服务器错误
表示 Odoo 无法正确解析调用。如果出现这种情况,请确保 JSON 文件中的字段在 Webhook 配置和 Postman 中正确映射。