创建了Webhook之后,当我填写表单时,它将向我的API发送一个POST请求,但是主体为空。
我在互联网上找不到任何东西,SM文档还有很多不足之处。
我的API
async testWebhook({ request, response }) {
console.log('request.body', request.body)
response.status(200).send()
return
}
那会是什么?
答案 0 :(得分:1)
如果您的应用程序在Express.js上运行,我找到了答案
Survey Monkey Webhook POST声明了标头'application / vnd.surveymonkey.response.v1 + json'
如果您不在Express中处理此问题,则request.body对象将为空。
您可以使用body-parser并定义标题:
app.use(bodyParser.json({
type: 'application/vnd.surveymonkey.response.v1+json'
}));
在此处查看文档-body-parser types
我还应该提到,当我使用Survey Monkey创建Webhook时,确实包含了“ content-type”,但是直到我在应用程序中添加了此额外配置后,它才开始向我显示POST数据。
创建Webhook的示例:
{
"name": "My Survey Completed Webhook",
"event_type": "response_completed",
"object_type": "survey",
"object_ids": ["1234"],
"subscription_url": "https://APP_URL/survey-responses",
"content_type": "application/json"
}
答案 1 :(得分:0)
主体应具有JSON,其主体与示例类似。一个可能的问题是SurveyMonkey中的webhook向主体发送了一个自定义内容类型标头,例如application/vnd.surveymonkey.survey.v1
,可能无法在您的服务器上很好地发挥作用。
我不确定它是否已记录,但是您可以在创建Webhook时在正文中包括application/json
作为内容类型:
POST /v3/webhooks
{
...
"content_type": "application/json"
}
这可能会使它正常运行,而无需更改服务器中的正文解析器设置。