You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JSON数据传入Chainlink Webhook任务?报错排查咨询

我尝试将「Pipeline Input」通过$(jobRun.requestBody)流水线变量传递给外部适配器,先经jsonparse任务解析,再通过fetch任务发送。但无论怎么尝试,运行Webhook任务时都会报错:

data: key requestBody (segment 1 in keypath jobRun.requestBody): keypath not found

Chainlink管理UI显示的Pipeline Input界面如下:
Chainlink管理UI的Pipeline Input界面

相关参考:Chainlink官方Webhook任务类型文档

我的任务定义如下:

type = "webhook"
schemaVersion = 1
name = "account-balance-webhook"
forwardingAllowed = false
observationSource = """
parse_request  [type="jsonparse" path="data,address" data="$(jobRun.requestBody)"]
fetch        [type=bridge name="test" requestData="{\"id\": \"0\", \"data\": { \"address\": \"$(parse_request)\"}}"]
parse        [type=jsonparse path="data,free" data="$(fetch)"]

    parse_request -> fetch -> parse
"""

运行环境:Docker容器,使用镜像smartcontract/chainlink:1.11.0-root

背景:正在开发外部适配器,需要快速便捷地进行测试。


解决方法

  1. 明确变量的适用场景
    $(jobRun.requestBody)对应实际HTTP请求发送到Webhook端点的请求体内容,而UI中填写的「Pipeline Input」属于模拟测试场景,此时需使用$(input)来引用输入内容,而非$(jobRun.requestBody)。

  2. 调整任务定义适配测试场景
    针对UI内的模拟测试,修改后的任务定义如下:

    type = "webhook"
    schemaVersion = 1
    name = "account-balance-webhook"
    forwardingAllowed = false
    observationSource = """
    parse_request  [type="jsonparse" path="data,address" data="$(input)"]
    fetch        [type=bridge name="test" requestData="{\"id\": \"0\", \"data\": { \"address\": \"$(parse_request)\"}}"]
    parse        [type=jsonparse path="data,free" data="$(fetch)"]
    
        parse_request -> fetch -> parse
    """
    

    同时确保「Pipeline Input」填写的是符合格式的JSON,示例:{"data": {"address": "0x1234567890abcdef1234567890abcdef12345678"}}

  3. 生产场景的注意事项
    若通过实际HTTP请求触发Webhook,需确保POST请求的Body为合法JSON格式,此时$(jobRun.requestBody)才能正确读取到请求内容。


内容的提问来源于stack exchange,提问作者WebSpence

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:55:15