我被困在这里。我正在尝试从Facebook Messenger聊天机器人中打开的Webview中获取回发信息,该聊天机器人是我使用NodeJS与DialoFlow的实现库一起开发的。
我能够发送打开如下所示特定URL的有效负载:
{
"facebook": {
"attachment": {
"type": "template",
"payload": {
"template_type": "button",
"text": "So you want to open the webview huh?",
"buttons": [{
"type": "web_url",
"url": "https://somewebsiteurlwithdataiwanttoget.como",
"title": "Open Website",
"messenger_extensions": true // To get psid and close window event
}]
}
}
}
}
在我的Web视图中,我能够提交表单并使用jQuery Ajax从该表单中获取数据:
let jqxhr = $.ajax({
url: '/webhook', // Fires my webhook
data: { var1: 'Hello', var2: 'World' }, // Sent to my webhook
dataType: 'json'
});
在我的Webook中,我初始化了代理程序,并使用自定义事件将这些数据发送回Messenger Bot(PS:我正在使用Express)。
// The webhook that receives post data from the form in my webview
router.post('/', function (req, res, next) {
// Initialize Agent
const agent = new WebhookClient({ request: req, response: res })
// Handle the intent
let intentMap = new Map()
// Set default handle if there are no intents
intentMap.set(null, handle)
// Handle stuff from the form
agent.handleRequest(intentMap)
function handle (agent) {
agent.add(`Just a test to see if this message gets to messenger`)
}
})
但是,我的控制台出现错误,提示“ This request is not a valid Dialogflow request
”。我不确定自己在做什么错,希望有人能帮助我。
谢谢。
答案 0 :(得分:1)
发送json { var1: 'Hello', var2: 'World' }
是这里的问题。
WebhookClient期望'req'参数遵循以下模式:
{
"responseId": "e72a8020-1051-489d-acb4-95c9ebeadcb7-ee1dc704",
"queryResult": {
"queryText": "view appointment",
"parameters": {
},
"allRequiredParamsPresent": true,
"fulfillmentText": "Hi here you go.",
"fulfillmentMessages": [
.
.
],
"intent": {
"name": "projects\/proj1\/agent\/intents\/77f38791-f2da-41bd-b44f-cef190d26fd9",
"displayName": "2-show-appointments"
},
"intentDetectionConfidence": 1,
"languageCode": "en"
},
"originalDetectIntentRequest": {
"source": "GOOGLE_TELEPHONY",
"payload": {
"telephony": {
"caller_id": "Anonymous"
}
}
},
"session": "projects\/proj1\/iKawldQ1RFSBIckQfGKww"
}
这包含有关接收到的消息,检测到的意图和实现有效负载的信息。您没有更改架构的自由。
此外,这种方法也不可行。根据{{3}},dialogflow在Messenger平台中没有Webview事件的回调。