ich arbeite mich seit einigen Tagen durchs Internet.
Ich suche einen Skill, mit dem ich RSS-Feeds vorlesen lassen kann.
Damit könnte ich z.B. Lokale Nachrichten anhören.
Beispiel: News Ortenau
wie ich bisher recherchierte, gibt es hierfür noch keinen offiziellen Skill. Auch keine generelle RSS-Lese-Skills.
In der US-Version gibt es wohl einen Skill namens "Flash Briefing Skill API", der funktioniert bei uns nicht. Außerdem sind die Lesezyklen bei max. 1x stündlich, ich bräuchte alle 15 Minuten.
Folgende Quellen habe ich schon gelesen & nachgebaut etc.
-https://github.com/alirawashdeh/rss-reader-alexa (eigentliche Quelle)
-faehigkeiten-skills-entwickeln-f8/skill ... t1025.html
(letzterer ändert die rss-version in lesen von Textfiles um. Der Thread hilft dort habe ich auch eine Datei zum bearbeiten gefzbdeb
(https://dl.dropboxusercontent.com/u/588 ... odules.zip) um dort einige Files zu bearbeiten und dann Auf den AWS hochzuladen.
-es gibt auch noch im obigen Thread einen Hinweis auf Heise-RSS Reader. der baut aber darauf auf, dass man einen eigenen ssl-Server inklusive Proxy verwendet. das finde ich doch etwas zu überkandidelt...
Nun mein Aufbau:
Im AWS habe ich
1) den veränderten Zip-File (index.js wie folgt geändert
Code: Alles auswählen
/**
* App ID for the skill
*/
var APP_ID = "amzn1.ask.skill.dastehtmeinerichtigeNrdrin";
var AlexaSkill = require('./AlexaSkill');
var parser = require('rss-parser');
var RssReader = function () {
AlexaSkill.call(this, APP_ID);
};
// Extend AlexaSkill
RssReader.prototype = Object.create(AlexaSkill.prototype);
RssReader.prototype.constructor = RssReader;
RssReader.prototype.eventHandlers.onSessionStarted = function (sessionStartedRequest, session) {
console.log("RssReader onSessionStarted requestId: " + sessionStartedRequest.requestId
+ ", sessionId: " + session.sessionId);
// any initialization logic goes here
};
RssReader.prototype.eventHandlers.onLaunch = function (launchRequest, session, response) {
console.log("RssReader onLaunch requestId: " + launchRequest.requestId + ", sessionId: " + session.sessionId);
var speechOutput = "Willkommen, welche Feeds willst du?";
var repromptText = "Welche Feeds willst du?";
response.ask(speechOutput, repromptText);
};
RssReader.prototype.eventHandlers.onSessionEnded = function (sessionEndedRequest, session) {
console.log("RssReader onSessionEnded requestId: " + sessionEndedRequest.requestId
+ ", sessionId: " + session.sessionId);
// any cleanup logic goes here
};
RssReader.prototype.intentHandlers = {
// register custom intent handlers
"GetBBCNews": function (intent, session, response) {
var url;
if(intent.slots && intent.slots.FeedName)
{
switch (intent.slots.FeedName.value.toLowerCase()) {
case "Blitzer":
url = "http://www.hitradio-ohr.de/ortenauticker";
break;
case "Verkehr":
url = "http://www.hitradio-ohr.de/ortenauticker";
break;
default:
response.tellWithCard("Unable to understand that request" + intent.slots.FeedName.value, "RSS Headlines", "Couldn't understand the request" + intent.slots.FeedName.value);
return;
}
}
else
{
response.tellWithCard("Unable to understand that request", "RSS Headlines", "Couldn't understand the request");
return;
}
parser.parseURL(url, function(err,parsed){
var output = "" + parsed.feed.title + ". <break time=\"0.8s\"/> ";
var i = 0;
parsed.feed.entries.forEach(function(entry){
if(i <= 4)
{
console.log(entry.title);
output = output + entry.title + ". <break time=\"0.6s\"/> "
i++;
}
})
var ssmlOutput = {
speech: '<speak>' + output + '</speak>',
type: AlexaSkill.speechOutputType.SSML
};
response.tellWithCard(ssmlOutput, "RSS Headlines", "Reading headlines from: " + parsed.feed.title);
});
},
"AMAZON.HelpIntent": function (intent, session, response) {
response.ask("You can say what feed you want to hear", "You can say what feed you want to hear");
}
};
// Create the handler that responds to the Alexa Request.
exports.handler = function (event, context) {
// Create an instance of the RssReader skill.
var rssReader = new RssReader();
rssReader.execute(event, context);
};
Im Developer-Account habe ich dann "Feed" angelegt, bei dem Intent-Schema war bei dem dort angegebenen Muster wohl nicht das passende dabei. Ich habe dann mein eigenes verwendet:
Code: Alles auswählen
{
"intents": [
{
"intent": "GetBBCNews",
"slots": [
{
"name": "FeedName",
"type": "LISTOFFEEDS"
}
]
},
{
"intent": "GetDailyNewsDigest"
},
{
"intent": "AMAZON.HelpIntent"
},
{
"intent": "AMAZON.StopIntent"
},
{
"intent": "AMAZON.CancelIntent"
}
]
}
ich legte noch einen Slot "LISTOFFEEDS" an, inhalt "Blitzer" und "Verkehr"
und bei den Utterances war im Alexa-BBC-Feed auch lediglich ein nicht angepasstes Muster dabei. Deshalb habe ich vorläufig folgendes eigegeben:
Code: Alles auswählen
GetBBCNews what's the latest in {FeedName}
GetBBCNews get me {FeedName} news
GetBBCNews what's happening in {FeedName}
GetBBCNews {FeedName}
GetBBCNews tell me about {FeedName}
Wenn ich sage "Alexa, starte Feed", bekomme ich die Antwort: "Willkommen, welche Feeds willst Du?
bekomme ich die Antwort: "ich kann folgenden Feed nicht ausführen, Blitzer"
--> an diesem Punkt hänge ich. Alexa erkennt wohl den Feed, aber das handling funktioniert irgendwie nicht...
Grundsätzlich: ich habe schon 3 Skills für mich eingerichtet, bin aber sicher noch am Anfang des mächtigen Alexa-Wissens...
Also, kann jemand helfen?