Как получить текст из фрейма Dialogflow Web Demo - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь извлечь текст ответа сервера из встроенного файла Dialog Web Demo

Вот мой код. В настоящее время вывод null:

<!DOCTYPE html>
<html lang=\"en\">
<head><meta name=\"viewport\" content=\"width=device-width, initial- scale=1, user-scalable=no\"/>
<title>Dialog</title>
</head>
<body>
<div align="center">
<iframe
    id="dialog"
    allow="microphone;"
    width="350"
    height="430"
    src="https://console.dialogflow.com/api-client/demo/embedded/xxxxxxxxxxxxxxxxxxxxxxxxxxx">  
</iframe>
</div>
<div align="center">
<script>
     var dialogFrame = document.getElementById("dialog");
     var dialogDocument = dialogFrame.contentWindow.document;
     var dialogResponse = dialogDocument.getElementById("server-response");
     document.write(dialogResponse);
</script>
</div>
</body>
</hmtl>

Я ожидаю извлечь текст, отвечающий Dialogflow, но результат будет null.

1 Ответ

0 голосов
/ 31 января 2019

Данные не могут быть получены из элемента HTML <iframe>, который является только блоком отображения. Данные могут быть получены через вызов API; в Dialogflow вы получаете эти данные с Fulfillments .

Проверьте нижеприведенный поток, чтобы развернуть приложение Node в App Engine, обслуживать чат Dialogflow в конечной точке по умолчанию и публиковать данные выполнения в /fulfillment конечной точке.

A) Настройка выполнения

Обратите внимание на следующее:

  • URL: введите конечную точку HTTPS Express POST (например, https://[PROJECT_ID].appspot.com/fulfillment)
  • оставьте все остальные поля пустыми
  • Домены: включить webhook для всех доменов
  • После создания и сохранения вам по-прежнему необходимо включить выполнение для каждого намерения (и его последующего исполнения, если таковое имеется), которое вы используете

Б) Применение

  • Создание Node-приложения в App Engine из консоли

Затем разверните это приложение, заменив <iframe> на ваше:

app.yaml

runtime: nodejs8

package.json

{
  "dependencies": {
    "actions-on-google": "^2.5.0",
    "dialogflow-fulfillment": "^0.5.0",
    "express": "^4.16.4"
  },
  "scripts": {
    "start": "node index.js"
  }
}

index.js

'use strict';

const {WebhookClient} = require('dialogflow-fulfillment');
const express = require('express');
const bodyParser = require('body-parser');
var path = require('path');

const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

function WebhookProcessing(req, res) {
    const agent = new WebhookClient({request: req, response: res});

    console.log('Dialogflow Request headers: ' + JSON.stringify(req.headers));
    console.log('Dialogflow Request body: ' + JSON.stringify(req.body));

    console.log(JSON.stringify(req.body.queryResult.queryText));
    console.log(JSON.stringify(req.body.queryResult.fulfillmentText));

}

app.get('/', (req, res) => {
    res.sendFile(path.join(__dirname + '/index.html'));

});

app.post('/fulfillment', function (req, res) {
    WebhookProcessing(req, res);
});

const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
  console.log(`Server listening on port ${PORT}...`);
});

index.html

<!DOCTYPE html>
<html lang=\"en\">
<head><meta name=\"viewport\" content=\"width=device-width, initial- scale=1, user-scalable=no\"/>
<title>Dialog</title>
</head>
    <body>
        <div align="center">
            <iframe
                allow="microphone;"
                width="350"
                height="430"
                src="https://console.dialogflow.com/api-client/demo/embedded/xxxxxxxxxxxxxxxxxxxxxxxxxxx">  
            </iframe>
        </div>
    </body>
</hmtl>

Когда пользователь начинает разговор в чате, функция WebhookProcessing выводит журналы тела и заголовка каждого запроса (каждое сообщение, отправленное пользователем), а также извлекает и регистрирует значения обоих полей queryText (пользователь сообщение) и fulfillmentText (ответ бота).

Обратите внимание, что это всего лишь пример интеграции в App Engine, вы также можете рассмотреть возможность развертывания облачной функции, и если вы работаете с базой данных Firebase, тогда вы можете использовать встроенный редактор и развернуть функцию из Dialogflow .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...