Я пытаюсь реализовать книгу диалогового потока для подключения к WordPI API, но получаю сообщение об ошибке: Не определены ответы для платформы: ноль - PullRequest
0 голосов
/ 03 мая 2020

Вот мой код. Как настроить его так, чтобы он возвращал ответ для интеграции с Google Assistant? Я хотел бы использовать этот код в встроенном редакторе кода Dialogflow или развернуть его для функций firebase.

process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
    const agent = new WebhookClient({ request, response });
    console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
    console.log('Dialogflow Request body: ' + JSON.stringify(request.body));



    function getProjects(agent){
        const api = 'https://playhacker.com/wp-json/wp/v2';
        const tag = agent.parameters.tag;
        //let url = `${api}/posts?tags=${tag}&_embed`;


        let getPosts = (tag, callback) => {
            let url = `${api}/posts?tags=${tag}&_embed`;
            request({url}, (err, res, body) => {
                if (err) {
                    callback('Sorry, there was an error getting posts from our blog', err);
                    return;
                } else {
                    let posts = JSON.parse(body);
                    if (posts.length === 0) {
                        callback(`It does not seem like there is any content available on this topic`);
                        return;
                    } else {
                        let formattedPosts = posts.map((post) => {

                            return {
                                "payload": {
                                    "google": {
                                        "expectUserResponse": true,
                                        "richResponse": {
                                            "items": [
                                                {
                                                    "simpleResponse": {
                                                        "textToSpeech": "Here is a project we found for you"
                                                    }
                                                },
                                                {
                                                    "basicCard": {
                                                        "title": post.title.rendered,
                                                        "subtitle": "Project",
                                                        "formattedText": post.excerpt.rendered.replace(/<(?:.|\\n)*?>/gm, '').replace(/&[^\\s]*/, ''),
                                                        "image": {
                                                            "url": post._embedded['wp:featuredmedia'][0].media_details.sizes.listing.source_url,
                                                            "accessibilityText": "featured image"
                                                        },
                                                        "buttons": [
                                                            {
                                                                "title": "Read more",
                                                                "openUrlAction": {
                                                                    "url": post.link
                                                                }
                                                            }
                                                        ],
                                                        "imageDisplayOptions": "CROPPED"
                                                    }
                                                }
                                            ]
                                        }
                                    }
                                }
                            };
                        });

                        formattedPosts.unshift({
                            type: 0,
                            platform: 'google',
                            speech: 'Sure, here are some helpful projects'
                        });

                        callback(undefined, formattedPosts);
                        return;
                    }
                }
            });
        };


    }

    let intentMap = new Map();

    intentMap.set('getProjects',getProjects);
    agent.handleRequest(intentMap);
});

Когда я запускаю его в встроенном редакторе Dialogflow, я получаю эту ошибку:

{
 insertId: "000001-ec48afd6-c286-47e4-8c75-43a2c6f1fc08"  
 labels: {…}  
 logName: "projects/apologetic-robot-fiajxe/logs/cloudfunctions.googleapis.com%2Fcloud-functions"  
 receiveTimestamp: "2020-05-03T06:38:00.862369842Z"  
 resource: {
  labels: {…}   
  type: "cloud_function"   
 }
 severity: "ERROR"  
 textPayload: "Error: No responses defined for platform: null
    at V2Agent.sendResponses_ (/srv/node_modules/dialogflow-fulfillment/src/v2-agent.js:243:13)
    at WebhookClient.send_ (/srv/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:505:17)
    at promise.then (/srv/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:316:38)
    at <anonymous>
    at process._tickDomainCallback (internal/process/next_tick.js:229:7)"  
 timestamp: "2020-05-03T06:37:59.833Z"  
 trace: "projects/apologetic-robot-fiajxe/traces/29d9241c46088463269b00ecf3558974"  
}

1 Ответ

1 голос
/ 04 мая 2020

Ошибка Error: No responses defined означает, что вы не определили никакого ответа, который будет отправлен в диалог, который может быть показан обратно пользователю чат-бота.

Например. когда кодовый поток достигает функции getProjects, должен быть ответ обратно на диалоговый поток до того, как вернется из функции, что-то вроде

agent.add(`There seems to be some error`);

, которое в свою очередь покажет эту строку обратно пользователь.

В вашем примере выше, я не вижу, чтобы ваша getPosts функция вызывалась где-либо.

...