如何将JSON数据传入Chainlink Webhook任务?报错排查咨询
Chainlink Webhook任务中
jobRun.requestBody变量找不到的问题 我尝试将「Pipeline Input」通过$(jobRun.requestBody)流水线变量传递给外部适配器,先经jsonparse任务解析,再通过fetch任务发送。但无论怎么尝试,运行Webhook任务时都会报错:
data: key requestBody (segment 1 in keypath jobRun.requestBody): keypath not found
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
背景:正在开发外部适配器,需要快速便捷地进行测试。
解决方法
明确变量的适用场景
$(jobRun.requestBody)对应实际HTTP请求发送到Webhook端点的请求体内容,而UI中填写的「Pipeline Input」属于模拟测试场景,此时需使用$(input)来引用输入内容,而非$(jobRun.requestBody)。调整任务定义适配测试场景
针对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"}}生产场景的注意事项
若通过实际HTTP请求触发Webhook,需确保POST请求的Body为合法JSON格式,此时$(jobRun.requestBody)才能正确读取到请求内容。
内容的提问来源于stack exchange,提问作者WebSpence
相关产品推荐
相关产品推荐

