使用 Alexa Skill 连接到 Postgresql

Posted

技术标签:

【中文标题】使用 Alexa Skill 连接到 Postgresql【英文标题】:Connect to Postgresql with Alexa Skill 【发布时间】:2018-04-09 15:38:31 【问题描述】:

我正在尝试开发一个简单的 Alexa Skill,它使用 node.js 连接到 postgresql 数据库并返回结果。

我可以使用本地机器上的 node.js 连接到数据库,但在上传到 aws 上的 lambda 函数时不能。

我还是个新手,还在学习。我在发帖前做了很多研究,但没有运气。

 'query_one': function () 

        const  Pool, Client  = require('pg')

        const pool = new Pool(
            user: 'username',
            host: 'host information',
            database: 'database name',
            password: 'password',
            port: 5432,
        )

        pool.query('SELECT * FROM responses', (err, res) => 
            console.log(res.rows[1].answer)
            pool.end()
        )

        this.emit(':tellWithCard', 'test', this.t('SKILL_NAME'), 'test');

    

完整代码包括

'use strict';


const Alexa = require('alexa-sdk');

const APP_ID = 'app id is hidden from here';  // TODO replace with your app ID (OPTIONAL).


const languageStrings = 
    'en': 
        translation: 
            FACTS: [
                'SELECT answer FROM responses WHERE query_id=1',
                'SELECT answer FROM responses WHERE query_id=2',
            ],
            SKILL_NAME: 'Space Facts',
            GET_FACT_MESSAGE: "Here's your fact: ",
            HELP_MESSAGE: 'You can ask me questions about the health of the system, or, you can say exit... What can I help you with?',
            HELP_REPROMPT: 'What can I help you with?',
            STOP_MESSAGE: 'Goodbye!',
            WELCOME: 'Welcome to the health check monitor',
        ,
    ,
;


const handlers = 

    'LaunchRequest': function () 
        const welcome = this.t('WELCOME');
        this.emit(':tellWithCard', welcome, welcome, welcome);
    ,
    'query_one': function () 

        const  Pool, Client  = require('pg')

        const pool = new Pool(
            user: 'username',
            host: 'host information',
            database: 'database name',
            password: 'password',
            port: 5432,
        )

        pool.query('SELECT * FROM responses', (err, res) => 
            console.log(res.rows[1].answer)
            pool.end()
        )

        this.emit(':tellWithCard', 'test', this.t('SKILL_NAME'), 'test');

    ,
    'query_two': function () 
        const factArr = this.t('FACTS');
        const randomFact = factArr[1];
        const speechOutput = this.t('GET_FACT_MESSAGE');
        this.emit(':tellWithCard', speechOutput, this.t('SKILL_NAME'), randomFact);
    ,
    'AMAZON.HelpIntent': function () 
        const speechOutput = this.t('HELP_MESSAGE');
        const reprompt = this.t('HELP_MESSAGE');
        this.emit(':ask', speechOutput, reprompt);
    ,
    'AMAZON.CancelIntent': function () 
        this.emit(':tell', this.t('STOP_MESSAGE'));
    ,
    'AMAZON.StopIntent': function () 
        this.emit(':tell', this.t('STOP_MESSAGE'));
    ,
;

exports.handler = function (event, context) 
    const alexa = Alexa.handler(event, context);
    alexa.APP_ID = APP_ID;
    // To enable string internationalization (i18n) features, set a resources object.
    alexa.resources = languageStrings;
    alexa.registerHandlers(handlers);
    alexa.execute();
;

【问题讨论】:

【参考方案1】:

首先你所有的发射都会失败,这是正确的格式。 this.emit(':tellWithCard', speechOutput, cardTitle, cardContent, imageObj); 有关连接到数据库的信息,请参阅此帖子 How to make connection to Postgres via Node.js

享受,乐于助人!

【讨论】:

猎人您好,感谢您的回复。发射当前按预期工作。但是,与数据库的连接在我的本地工作正常,但是相同的代码在 lambda 函数中不起作用。我现在正在尝试将查询结果打印在日志中。 嗯,我不知道 lambda,我到处使用 nodejs。并点击自定义 https 端点并将任何变量保存到 json 对象。然后将它们作为 json 对象读取。 blog.risingstack.com/… 呢?你也可以每月花 5 美元去digitalocean.com 获得一个液滴,然后你就可以完全控制了。而且您的代码运行良好,因为您已经知道它可以在 nodejs 中运行。消除亚马逊中间商

以上是关于使用 Alexa Skill 连接到 Postgresql的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将alexa输出连接到amazon SQS

Alexa Skill Kit - 保存用户输入

在不使用特定技能名称的情况下调用 Alexa Skill

Alexa Skill - 如何获取要求 Alexa 的完整声明文本

如何在 Alexa Skill 中使用 Java 获取亚马逊用户电子邮件

Alexa Skill Development 使用 flask-ask 和 ngrok 错误