本地部署Odoo是否支持Webhooks?调用时遇404错误求助
Odoo本地实例Webhook请求404问题排查与解决
我在Odoo SH实例中配置Webhooks实现了多项自动化流程,现在要在本地部署的Odoo实例中复刻相同操作,测试了一段简单的请求代码,但返回404错误。
测试代码
import requests import json URL = "server-url" headers = {"Content-Type": "application/json"} payload = { "name": "Registro usando webhook y python", "email_from": "damartinez@swift-solutions.co", "phone": "32733888", "partner_id": 2, "user_id": 2, } json_data = json.dumps(payload) response = requests.post(URL, headers=headers, data=json_data) print(response.status_code) print(response.text)
错误返回
404 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <title>404 Not Found</title> <h1>Not Found</h1> <p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>
注:示例中的URL已做安全替换,实际使用的是正确的服务器地址。
排查与解决步骤
确认Webhook路由注册正确性
本地实例必须确保Webhook对应的控制器路由已通过http.route装饰器正确注册,示例如下:from odoo import http from odoo.http import request class WebhookController(http.Controller): @http.route('/webhook/custom', type='json', auth='public', methods=['POST'], csrf=False) def custom_webhook(self, **kwargs): # 自定义处理逻辑 return {'status': 'success'}需保证请求URL与路由路径、请求方法完全匹配。
检查权限与CSRF设置
若Webhook路由未设置csrf=False,本地实例的CSRF保护会拦截请求;同时确认路由的auth参数配置合理,比如auth='public'允许匿名访问,或根据需求设置auth='user'并携带认证信息。验证端口与路径配置
本地Odoo默认端口为8069,确保URL包含正确端口(如http://localhost:8069/webhook/custom);若使用反向代理(如Nginx),需检查是否存在路径重写或拦截情况。确认模块安装状态
包含Webhook控制器的模块必须在本地实例中安装并加载,可在后台应用列表检查模块状态,或通过启动命令-u 模块名更新模块。添加认证信息(若需要)
若Webhook路由要求用户认证,需在请求头中加入Authorization字段,示例:import base64 auth = base64.b64encode(b"用户名:密码").decode('utf-8') headers = { "Content-Type": "application/json", "Authorization": f"Basic {auth}" }
内容的提问来源于stack exchange,提问作者damar
相关产品推荐
相关产品推荐

