【问题标题】:How to integerate Google actions dialogflow with hapi nodejs framework?如何将 Google 操作对话框流与 hapi node js 框架集成?
【发布时间】:2019-07-25 13:47:20
【问题描述】:

我正在尝试创建一个简单的 google home 操作。我能够成功地尝试 google firebase 功能中的一些基本功能。但是当我尝试对 Hapi 框架做同样的事情时,我无法让它工作?当我尝试搜索时,我只能看到 Express 和 lambda 框架?

我尝试与 hapi 集成,但只得到 500 作为响应。我也在粘贴它的sn-p

const { dialogflow } = require('actions-on-google')
const app = dialogflow({
    debug: true
})
const welcomeIntent = (conv) => {
    conv.contexts.set('previousintent', 1, { 'previousintent': 'welcomeIntent' })
    if (!conv.surface.capabilities.has('actions.capability.MEDIA_RESPONSE_AUDIO')) {
        conv.close('Sorry, this device does not support audio playback.')
        return
    }
    console.log('welcome intent')
    conv.ask('Welcome')
};
app.intent('Default Welcome Intent', welcomeIntent)

fulfillmentRoute.push({
    path: `${constants.V1_API_PATH}/vee/fulfillment`,
    method: 'POST',
    handler: app
})

【问题讨论】:

    标签: node.js dialogflow-es actions-on-google google-home hapi


    【解决方案1】:

    这是一个 Hapi 示例,

    const Hapi = require('@hapi/hapi');
    const dialogflow = require('dialogflow');
    const credentials = {
        client_email: process.env.GOOGLE_CLIENT_EMAIL,
        private_key: process.env.GOOGLE_PRIVATE_KEY,
    };
    
    const sessionClient = new dialogflow.SessionsClient(
        {
            projectId: process.env.GOOGLE_PROJECT_ID,
            credentials
        }
    );
    const init = async () => {
    
        const server = Hapi.server({
            port: 3000,
            host: 'localhost'
        });
    
        server.route({
            method: 'POST',
            path: '/',
            handler: async (request, h) => {
                const sessionID = "unique ID" // unique id
                const response = await sendTextQueryToDialogFlow(sessionID,request.payload.query)
                return response[0].queryResult;
            }
        });
    
        await server.start();
        console.log('Server running on %s', server.info.uri);
    };
    
    
    process.on('unhandledRejection', (err) => {
        console.log(err);
        process.exit(1);
    });
    
    init();
    
    async function sendTextQueryToDialogFlow(sessionId, text, params = {}) {
        const sessionPath = sessionClient.sessionPath(config.GOOGLE_PROJECT_ID, sessionId);
    
        const request = {
            session: sessionPath,
            queryInput: {
                text: {
                    text: text,
                    languageCode: process.env.DF_LANGUAGE_CODE,
                },
            },
            queryParams: {
                payload: {
                    data: params
                }
            }
        };
        return await sessionClient.detectIntent(request);
    }
    

    向您的服务器发送带有 JSON 数据的 POST 请求,

    { query:"hello" }
    

    你会得到回应。

    【讨论】:

    • 嗨@Nikhil,感谢您的回复。但是,我希望与 actions-on-google 库中的对话流集成。当我在 npm 中查看 dialogflow 时,发现它仍处于 beta 阶段。那么您能帮忙与 Google 上的操作集成吗?
    • 你可以使用同样的方式
    • 但是来自 actions-on-google 的对话流没有 SessionsClient。能不能详细点!!谢谢!
    猜你喜欢
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 2013-02-15
    • 2019-11-05
    • 1970-01-01
    • 2012-07-18
    • 2011-07-20
    相关资源
    最近更新 更多