首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Alexa、Node.js和Alexa技能工具包阅读Facebook帖子的Alexa技能

使用Alexa、Node.js和Alexa技能工具包阅读Facebook帖子的Alexa技能
EN

Stack Overflow用户
提问于 2017-11-27 20:48:49
回答 2查看 434关注 0票数 0

我正在使用Alexa、Node.js和AlexaSitsKit开发Alexa技能,我使用的是一个分叉的技能示例-nodejs-事实项目&成功地部署和测试了示例事实项目.Now,我正在尝试修改该代码,以便在Facebook feeds.First上读取帖子,我试图开发一个节点应用程序,它可以读取帖子&下面是供您参考的successful.Please代码。

代码语言:javascript
复制
const FB = require('fb');
FB.setAccessToken('abc');
const query='cnninternational/posts';

FB.api(query, function (res) {
  if(!res || res.error) {
   console.log(!res ? 'error occurred' : res.error);
   return;
  }
  console.log(res);
});

接下来,我试图将上面的代码块集成到lambda function.Unfortunately中,我无法阅读Facebook上使用这些codes.Please发布的帖子,在面板下面的.Also中查找那些代码块,我也检查了云监视日志。我可以看到"GetNewsIntent",但我没有看到logs.Surprisingly中的"fb-init“、"fb- error”或“fb-exit”条目,日志中也没有错误。如果有人能帮助解决这个问题,我会非常感激的。

代码语言:javascript
复制
'use strict';
const Alexa = require('alexa-sdk');
const FB = require('fb');
const APP_ID = 'abc';

const SKILL_NAME = 'test';
const GET_FACT_MESSAGE = "Here's your news: ";
const STOP_MESSAGE = 'Goodbye!';


exports.handler = function(event, context, callback) {
    var alexa = Alexa.handler(event, context);
    alexa.appId = APP_ID;
    alexa.registerHandlers(handlers);
    alexa.execute();
};

const handlers = {
    'LaunchRequest': function () {
        this.emit('GetNewsIntent');
    },
    'GetNewsIntent': function () {

        console.log('GetNewsIntent');
        const speechOutput = GET_FACT_MESSAGE;
        const query='cnninternational/posts';
        FB.setAccessToken('abc');
        FB.api(query, function (res) {
          console.log('fb-init');
          if(!res || res.error) {
           console.log(!res ? 'error occurred' : res.error);
           console.log('fb-error');
           return;
          }
          console.log(res);
          speechOutput = speechOutput + res;
          console.log('fb-exit');
        });

        this.response.cardRenderer(SKILL_NAME, speechOutput);
        this.response.speak(speechOutput);
        this.emit(':responseReady');
    },
    'AMAZON.StopIntent': function () {
        this.response.speak(STOP_MESSAGE);
        this.emit(':responseReady');
    },
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-08 21:07:25

我已经删除了this.response.cardRenderer,this.response.speak &更改了代码位,它运行良好,now.Please可以找到下面的代码片段,这些代码片段可以用来阅读BBC Facebook页面上的帖子。

代码语言:javascript
复制
var accessToken = '';

exports.handler = function(event, context, callback) {
    var alexa = Alexa.handler(event, context);
    alexa.appId = APP_ID;
    alexa.registerHandlers(handlers);
    alexa.execute();
};

const handlers = {
    'NewSession': function() {
        var welcomeMessage = "Welcome to Athena";
        welcomeMessage = welcomeMessage +"<break time=\"1s\"/>"+ "<audio src='https://s3.amazonaws.com/my-ssml-samples/Flourish.mp3' />"+"<break time=\"1s\"/>";  
        welcomeMessage += HELP_MESSAGE;
        accessToken = this.event.session.user.accessToken;
        if (accessToken) {
            FB.setAccessToken(accessToken);
            this.emit(':ask', welcomeMessage, HELP_REPROMPT);
        }
        else {
            // If we don't have an access token, we close down the skill. 
            this.emit(':tellWithLinkAccountCard', "This skill requires you to link a Facebook account. Seems like you are not linked to a Facebook Account. Please link a valid Facebook account and try again.");
        }
    },
    'LaunchRequest': function () {
        this.emit('NewSession');
    },
    'ReadBbcNewsFacebookPostsIntent': function () {        
        var alexa = this;
        FB.api("bbcnews/posts", function (response) {
            if (response && !response.error) {
                if (response.data) {
                    var output = "Here are recent posts" + "<break time=\"1s\"/>";
                    var max = 5;
                    for (var i = 0; i < response.data.length; i++) {
                        if (i < max) {
                            output += "<break time=\"1s\"/>" + "Post " + 
                             (i + 1) + 
                            response.data[i].message.replace(/(?:https?|ftp):\/\/[\n\S]+/g, '')
                              + ". ";
                        }
                    }
                    alexa.emit(':ask', output+ ", What would you like to do next?",HELP_MESSAGE);
                } else {
                    // REPORT PROBLEM WITH PARSING DATA
                }
            } else {
                // Handle errors here.
                console.log(response.error);
                this.emit(':tell', EMPTY_ACCESS_TOKEN_MESSAGE, TRY_AGAIN_MESSAGE);
            }
        });
    }
};

票数 0
EN

Stack Overflow用户

发布于 2017-12-18 13:02:47

您实现帐户连接了吗?您应该使用event.session.user.accessToken作为setAccessToken()的参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47519559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档