Chainlink webhook Job手动运行报jobRun.requestBody路径未找到
问题排查与解决方法
环境与报错复现
- 运行环境:Chainlink Docker镜像版本1.5.1-root,镜像sha256值为
310e5b014dcc135e9fc2d9ca6c9367687f7579db5119c6b2dc556309847d5a47 - 测试用webhook类型Job初始配置:
type = "webhook" schemaVersion = 1 observationSource = """ parse_request [type="jsonparse" path="data,result" data="$(jobRun.requestBody)"] send_to_bridge [type="bridge" name="get-sha256sum" requestData="{ \"url\": $(parse_request) }"] parse_request -> send_to_bridge """
- 触发方式:通过节点WebUI手动触发,传入参数如下:
{ "data": { "url": "https://i.kym-cdn.com/entries/icons/original/000/018/012/this_is_fine.jpeg", } }
- 报错现象:
jsonparse任务执行失败,抛出错误data: key requestBody / keypath jobRun.requestBody: keypath not found,任务状态标记为ERRORED,返回的任务核心信息如下:
{ "job": { "__typename": "Job", "id": "6", "name": "wh4", "observationSource": " parse_request [type=\"jsonparse\" path=\"data,result\" data=\"$(jobRun.requestBody)\"] send_to_bridge [type=\"bridge\" name=\"get-sha256sum\" requestData=\"{ \\\"url\\\": $(parse_request) }\"] parse_request -> send_to_bridge " }, "status": "ERRORED" }
报错核心原因
三个问题叠加导致报错:
- 字段取值源错误:
jobRun.requestBody字段仅在通过外部HTTP接口触发webhook Job时才会自动填充,内容是HTTP请求的完整原始请求体。通过WebUI手动触发Job时,传入的参数会直接挂载到jobRun对象根层级,不存在requestBody子字段,自然会报keypath not found。 - JSON解析路径配置错误:传入的参数结构是
data.url,但Job里jsonparse任务配置的解析路径是data,result,就算取值源正确,也会因为找不到result字段报错。 - 传入参数格式错误:WebUI输入的JSON参数里,
url字段末尾多了一个多余的尾逗号,属于非法JSON格式,部分场景下会直接导致参数解析失败。
webhook类型Job正确手动运行方式
根据触发场景二选一即可:
方式1:继续使用WebUI手动触发
需要修改Job配置,修正取值源和解析路径,修正后的完整配置如下:
type = "webhook" schemaVersion = 1 observationSource = """ parse_request [type="jsonparse" path="data,url" data="$(jobRun)"] send_to_bridge [type="bridge" name="get-sha256sum" requestData="{ \"url\": $(parse_request) }"] parse_request -> send_to_bridge """
配置保存后,在WebUI触发页面传入修正了格式的JSON参数即可正常运行,参数示例:
{ "data": { "url": "https://i.kym-cdn.com/entries/icons/original/000/018/012/this_is_fine.jpeg" } }
方式2:保留原有jobRun.requestBody取值逻辑
这种方式不能用WebUI触发,需要调用节点外部API触发:
- 先在节点配置中为该webhook Job生成外部访问令牌
- 向节点webhook触发接口发送POST请求,请求体直接传入要提交的JSON参数,此时节点会自动将完整请求体赋值给
jobRun.requestBody字段 - 注意:就算用API触发,原配置里的
jsonparse路径还是错误的,需要把path="data,result"改成path="data,url",同时删掉请求参数里的多余尾逗号,否则依然会执行失败。
内容的提问来源于stack exchange,提问作者Utgarda
相关产品推荐
相关产品推荐

