使用Dialogflow Agent从Messenger Webview检索回发

时间:2018-09-25 16:25:05

标签: bots dialogflow

我被困在这里。我正在尝试从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”。我不确定自己在做什么错,希望有人能帮助我。

谢谢。

1 个答案:

答案 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事件的回调。