Versuch den Skill zum Laufen zu bekommen

Hallo,

leider verzweifle ich aktuell am Einrichten des Skills. Eigentlich lief alles ohne Problem durch bis zu dem Punkt, an dem ich alles testen wollte:

{
  "session": {
    "sessionId": "SessionId.24915590-082b-4379-9a8c-ac843dbb2c45",
    "application": {
      "applicationId": "amzn1.ask.skill.XXX"
    },
    "attributes": {},
    "user": {
      "userId": "amzn1.ask.account.AXXX"
    },
    "new": true
  },
  "request": {
    "type": "IntentRequest",
    "requestId": "EdwRequestId.a5f783d3-f4d5-4f2b-a6ae-41fab92d0bf4",
    "locale": "de-DE",
    "timestamp": "2017-03-25T18:09:17Z",
    "intent": {
      "name": "SwitchIntent",
      "slots": {
        "Status": {
          "name": "Status",
          "value": "ein"
        },
        "Device": {
          "name": "Device",
          "value": "Küchen Licht"
        },
        "Yesno": {
          "name": "Yesno"
        },
        "Devicetypes": {
          "name": "Devicetypes",
          "value": "das"
        }
      }
    }
  },
  "version": "1.0"
}

The remote endpoint could not be called, or the response it returned was invalid.

Hm, hat einer eine Idee für mich?

Nur bei diesem Versuch oder immer?
Was steht im Log (CloudWatch) dazu?

Hallo Alex,

das Problem habe ich immer. Im Cloudwatch sagt er:

Syntax error in module ‘index’: SyntaxError
at Module._compile (module.js:373:25)
at Object.Module._extensions…js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Module.require (module.js:353:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/var/task/index.js:8:16)
at Module._compile (module.js:409:26)
at Object.Module._extensions…js (module.js:416:10)

Sieht so aus, als ob das Skill nicht korrekt erzeugt wurde.
Du musst irgend einen Fehler gemacht haben.
Wirklich alle Dateien (options.js, languagefile.js und index.js) als ZIP-Datei hochgeladen?

Hm, ja habe ich. Alle 4 *.js Dateien als ein Archiv gezippt und hochgeladen. Vorher die options.js angepasst und deutsche languagefile ausgewählt. Bei den Einstellungen habe ich EU Irland, Trigger Alexa Skills Kit, Runtime Node.js 4.3, Handler index.handler, existing role: lambda_basic_execution, memory 512mb, timeout 3sec, novpc…

Ich hab die Funktion bei AWS auch bereits mehrfach angelegt…

Laut Fehlermeldung kann er eine der Dateien nicht laden.
Gibt es ggf. ein (Unter-)verzeichnis im ZIP-Archiv?

Zip-Archiv passt. Habe es bereits mit mehreren Programmen erstellt. Hm, alles sehr komisch…wird wohl so nichts werden. Dann wohl doch HABridge :frowning:

Kannst du mal die ersten 20 Zeilen von deiner index.js posten oder mir zumailen?

Hallo Alex,

sorry, ich komme jetzt erst wieder dazu :wink:

Hier die ersten Zeilen der index.js:

'use strict';

var http = require('http');
var https = require('https');
var AWS = require('aws-sdk');
var AlexaSkill = require('./AlexaSkill');
var langfile=require('./languagefile');
var optionfile=require('./options');

var options=optionfile.options;
var STATE_RESPONSES=langfile.STATE_RESPONSES;
var GLOBAL_TRANSLATE=langfile.GLOBAL_TRANSLATE;
var REPLACE_TEXT=langfile.REPLACE_TEXT;

var EchoFibaro = function () {
    AlexaSkill.call(this, options.appid);
};

EchoFibaro.prototype = Object.create(AlexaSkill.prototype);
EchoFibaro.prototype.constructor = EchoFibaro;

var re=new RegExp(Object.keys(REPLACE_TEXT).join("|"),"gi"); 

function matchRuleShort(str, rule) {
  return new RegExp("^" + rule.split("*").join(".*") + "$", "i").test(str);
}

Array.prototype.getIdOfDeviceWithName = function(obj) {
    return this.filter(function(item) {
        for (var prop in obj)
        {
            // prop is the key; item[prop] is the value of the target array-list working on; obj[prop] is the filter array given as parameter
            //console.log("Remove Me: prop="+prop+", obj[prop]="+obj[prop]+", item[prop]="+item[prop]);
            if (!(prop in item) || obj[prop].toLowerCase() !== item[prop].toLowerCase())
                 return false;
        }
        return true;
    });
};


Und nun eigentlich noch die options.js, wenn es geht geschwärzt :wink:

Laut der Fehlermeldung liegt der Fehler hier:
var optionfile=require(’./options’);

Die options.js soll eingebunden werden und das klappt nicht (entweder wird sie nicht gefunden oder sie enthält fehlerhaften Inhalt, sprich kann nicht korrekt geparst werden).

Du meintest aber ja schon, dass die options.js im ZIP Archiv enthalten ist, neben den drei anderen Dateien (languagefile.js, AlexaSkill.js und index.js).
Somit müsste diese an sich nicht in Ordnung sein.

Hi Alex,

danke für deinen Support!!!

Hier die options.js

module.exports.options = {
  appid: "amzn1.ask.skill.XXXXXXXX",
  host: „XXXXXXXX.dnsXXXX.XX“,	// NO http:// !!! just the pure domain name
  port: „80“,
  headers: {
      'Authorization': 'Basic ' + new Buffer(encodeURIComponent(„LOGINXXX“) + ":" + encodeURIComponent(„PASSWORTXXX“)).toString("base64"),
      'Content-Type': 'text/html'
  },
  useHttps: false,
  rejectUnauthorized: false, // Change to false if you self-signed your certificate
  reAsk: false       // Change to false if Alexa should only ask once
};

Kein Problem, gerne!

Es müssten die Anführungszeichen sein!
Sind die in deiner Datei wirklich unten/oben?
Hast du die Datei in Word(pad) geöffnet gehabt?

Wahnsinn!!! Es waren tatsächlich die “” :frowning: Vielen Dank. Jetzt geht alles :slight_smile:

Super, freut mich zu lesen :slight_smile: