Получение обратной передачи из Messenger Webview с помощью агента Dialogflow

Я застрял здесь. Я пытаюсь получить обратную запись от веб-просмотра, открытого в чат-боте Facebook Messenger, который я разрабатываю с помощью библиотеки выполнения DialoFlow с использованием NodeJS.

Я могу отправить полезную нагрузку, которая открывает определенный 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
          }]
      }
    }
  }
}

В моем веб-просмотре я могу отправить форму и получить данные из этой формы, используя jQuery Ajax:

let jqxhr = $.ajax({
    url: '/webhook',  // Fires my webhook
    data: { var1: 'Hello', var2: 'World' }, // Sent to my webhook
    dataType: 'json'
});

В моей книге я инициализирую своего агента и отправляю эти данные обратно в 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 ответов

Отправка 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"
}

Он содержит информацию о полученном сообщении, обнаруженном намерении и полезной нагрузке выполнения. Вы не имеете права изменять схему.

Кроме того, такой подход нежизнеспособен. В соответствии с этим в диалоговом потоке нет обратных вызовов для событий веб-просмотра на платформе обмена сообщениями.

Другие вопросы по тегам