• Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
MagicMirror Forum
  • Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
A New Chapter for MagicMirror: The Community Takes the Lead
Read the statement by Michael Teeuw here.

MMM-awesome-alexa

Scheduled Pinned Locked Moved Utilities
241 Posts 43 Posters 300.0k Views 47 Watching
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G Offline
    Ghost2000
    last edited by Oct 9, 2020, 9:12 PM

    This post is deleted!
    1 Reply Last reply Reply Quote 0
    • G Offline
      Ghost2000 @sdetweil
      last edited by Oct 9, 2020, 9:14 PM

      @sdetweil said in MMM-awesome-alexa:

      http://localhost:someportnumber >1000

      http://localhost:3000/ or http://localhost:3000/authresponse

      1 Reply Last reply Reply Quote 0
      • G Offline
        Ghost2000 @sdetweil
        last edited by Ghost2000 Oct 9, 2020, 9:18 PM Oct 9, 2020, 9:17 PM

        @sdetweil

        http://localhost:3000/authresponse = It does not work
        http://localhost:3000/ = It does not work

        Invalid. Please enter your Redirect URI.

        S 1 Reply Last reply Oct 9, 2020, 9:19 PM Reply Quote 0
        • S Offline
          sdetweil @Ghost2000
          last edited by Oct 9, 2020, 9:19 PM

          @Ghost2000 yes, looking at the code now…

          Sam

          How to add modules

          learning how to use browser developers window for css changes

          1 Reply Last reply Reply Quote 0
          • G Offline
            Ghost2000
            last edited by Oct 9, 2020, 9:21 PM

            InkedScreenshot 2020-10-09 23.19.20_LI.jpg

            S 1 Reply Last reply Oct 9, 2020, 9:33 PM Reply Quote 0
            • S Offline
              sdetweil @Ghost2000
              last edited by Oct 9, 2020, 9:33 PM

              @Ghost2000 yeh, some bug in their helper code… suddenly

              edit the config_helper.js

              change this line to return true;

                              return true; // "Invalid. Please enter your Redirect URI.";
              
              

              using your return url in my avs config and on the helper
              must copy ALL of the url from helper (2 lines) to the browser address field
              hit enter
              Screenshot at 2020-10-09 16-28-24.png
              then sign in
              Screenshot at 2020-10-09 16-30-33.png

              then click allow,
              apparently I have something running at port 3000
              Screenshot at 2020-10-09 16-32-21.png
              but

              code is there

              Sam

              How to add modules

              learning how to use browser developers window for css changes

              S 1 Reply Last reply Oct 9, 2020, 9:37 PM Reply Quote 0
              • S Offline
                sdetweil @sdetweil
                last edited by Oct 9, 2020, 9:37 PM

                @Ghost2000 and it worked

                Sam

                How to add modules

                learning how to use browser developers window for css changes

                G 1 Reply Last reply Oct 9, 2020, 9:38 PM Reply Quote 0
                • G Offline
                  Ghost2000 @sdetweil
                  last edited by Ghost2000 Oct 9, 2020, 9:39 PM Oct 9, 2020, 9:38 PM

                  @sdetweil NO

                  const chalk = require("chalk");
                  const clear = require("clear");
                  const figlet = require("figlet");
                  const inquirer = require("inquirer");
                  const request = require("request-promise");
                  const CLI = require("clui");
                  
                  const spinner = new CLI.Spinner("Getting response from Amazon...");
                  
                  const questions = [
                      {
                          name: "clientId",
                          type: "input",
                          message: "Enter your Client ID from Alexa Voice Service (AVS):",
                          validate: value => {
                              if (value.length) {
                                  return true;
                              } else {
                                  return "Please enter your Client ID.";
                              }
                          },
                      },
                      {
                          name: "clientSecret",
                          type: "input",
                          message: "Enter your Client Secret from Alexa Voice Service (AVS):",
                          validate: function(value) {
                              if (value.length) {
                                  return true;
                              } else {
                                  return "Please enter your Client Secret.";
                              }
                          },
                      },
                      {
                          name: "productId",
                          type: "input",
                          message: "Enter your Product ID from Alexa Voice Service (AVS):",
                          validate: function(value) {
                              if (value.length) {
                                  return true;
                              } else {
                                  return "Please enter your Product ID.";
                              }
                          },
                      },
                      {
                          name: "redirectUri",
                          type: "input",
                          message: "Enter your Redirect URI (allowed return URL) from Alexa Voice Service (AVS):",
                          validate: function(value) {
                              const pattern = new RegExp(
                                  "^(https?:\\/\\/)?" + // protocol
                                  "((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|" + // domain name
                                  "((\\d{1,3}\\.){3}\\d{1,3}))" + // OR ip (v4) address
                                  "(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*" + // port and path
                                  "(\\?[;&a-z\\d%_.~+=-]*)?" + // query string
                                      "(\\#[-a-z\\d_]*)?$",
                                  "i", // fragment locator
                              );
                  
                              if (!!pattern.test(value)) {
                                  return true;
                              } else {
                                  return "Invalid. Please enter your Redirect URI.";
                              }
                          },
                      },
                  ];
                  
                  const authCodeQuestion = [
                      {
                          name: "authCode",
                          type: "input",
                          message: "Enter your Authorization code (from previous step):",
                          validate: value => {
                              if (value.length) {
                                  return true;
                              } else {
                                  return "Please enter your Authorization Code.";
                              }
                          },
                      },
                  ];
                  
                  const continueQuestion = [
                      {
                          name: "continue",
                          type: "confirm",
                          message: "Do you wish to continue to generate the MagicMirror config?",
                          default: true,
                      },
                  ];
                  
                  const configQuestions = [
                      {
                          name: "wakeWord",
                          type: "list",
                          message: "What do you want your Wake Word to be? (The phrase used to activate this module)",
                          choices: ["Alexa", "Smart Mirror", "Snowboy"],
                      },
                      {
                          name: "liteMode",
                          type: "confirm",
                          message: "Do you want to use lite mode?",
                          default: false,
                      },
                      {
                          name: "useVisualization",
                          type: "confirm",
                          message: "Do you want to use visulization?",
                          default: true,
                      },
                  ];
                  
                  const generateQuery = params =>
                      Object.keys(params)
                          .map(key => key + "=" + params[key])
                          .join("&");
                  
                  clear();
                  
                  console.log(chalk.yellow(figlet.textSync("Awesome Alexa", { horizontalLayout: "full" })));
                  
                  console.log(chalk.underline("Welcome to the Config Helper tool!"));
                  console.log("This tool will help you get the Refresh Token needed to run MMM-awesome-alexa.");
                  console.log(
                      "It will optionally generate your config for you, if you wish. If not, you can still create it manually after.",
                  );
                  console.log("Go to https://developer.amazon.com/alexa/console/avs/products to get the details.\n");
                  
                  const run = async () => {
                      const output = await inquirer.prompt(questions);
                  
                      const scopeData = {
                          "alexa:all": {
                              productID: output.productId,
                              productInstanceAttributes: {
                                  deviceSerialNumber: 123, // Can be anything
                              },
                          },
                      };
                  
                      const queryParams = generateQuery({
                          client_id: output.clientId,
                          scope: "alexa:all",
                          scope_data: JSON.stringify(scopeData),
                          response_type: "code",
                          redirect_uri: output.redirectUri,
                      });
                  
                      console.log(
                          chalk.blue("Hooray! Link is generated. Part 1 is done. Please go on the link below.\n"),
                      );
                      console.log(
                          chalk.yellow("Please be aware that at the end,"),
                          chalk.bgRed("THERE WILL BE AN ERROR!"),
                          chalk.green("This is normal.\n"),
                      );
                  
                      console.log(`https://www.amazon.com/ap/oa?${queryParams}`);
                  
                      console.log("\n^^^ Copy and paste the above in your Browser ^^^, follow the instructions.");
                      console.log(
                          "The authorization code you want is in the address bar in the final screen: https://imgur.com/a/6DbYlKA",
                      );
                  
                      const authOutput = await inquirer.prompt(authCodeQuestion);
                  
                      spinner.start();
                  
                      const amazonTokenReponse = await request.post("https://api.amazon.com/auth/o2/token", {
                          form: {
                              grant_type: "authorization_code",
                              code: authOutput.authCode,
                              client_id: output.clientId,
                              client_secret: output.clientSecret,
                              redirect_uri: output.redirectUri,
                          },
                          json: true,
                      });
                  
                      spinner.stop();
                      console.log(
                          chalk.bgGreen(
                              "\nComplete! Your refresh token should be in the Amazon response below. If not raise an issue:\n",
                          ),
                      );
                      console.dir(amazonTokenReponse, { colors: true });
                  
                      const continueOutput = await inquirer.prompt(continueQuestion);
                  
                      if (!continueOutput.continue) {
                          process.exit();
                      }
                  
                      const configOutput = await inquirer.prompt(configQuestions);
                  
                      console.log(chalk.green("\nCongrats! Here is the full config:\n"));
                      console.dir(
                          {
                              module: "MMM-awesome-alexa",
                              position: "bottom_bar",
                              config: {
                                  wakeWord: configOutput.wakeWord,
                                  clientId: output.clientId,
                                  clientSecret: output.clientSecret,
                                  deviceId: output.productId,
                                  refreshToken: amazonTokenReponse.refresh_token,
                                  lite: configOutput.liteMode,
                                  isSpeechVisualizationEnabled: configOutput.useVisualization,
                              },
                          },
                          { colors: true },
                      );
                  };
                  
                  run();
                  
                  

                  Have You Teamview ? You can help :D

                  S 1 Reply Last reply Oct 9, 2020, 9:39 PM Reply Quote 0
                  • S Offline
                    sdetweil @Ghost2000
                    last edited by Oct 9, 2020, 9:39 PM

                    @Ghost2000 said in MMM-awesome-alexa:

                            if (!!pattern.test(value)) {
                                return true;
                            } else {
                                return "Invalid. Please enter your Redirect URI.";  < <<<<<<<<<< change that line 
                            }
                    

                    Sam

                    How to add modules

                    learning how to use browser developers window for css changes

                    G 1 Reply Last reply Oct 9, 2020, 9:42 PM Reply Quote 0
                    • G Offline
                      Ghost2000 @sdetweil
                      last edited by Ghost2000 Oct 9, 2020, 9:43 PM Oct 9, 2020, 9:42 PM

                      const chalk = require("chalk");
                      const clear = require("clear");
                      const figlet = require("figlet");
                      const inquirer = require("inquirer");
                      const request = require("request-promise");
                      const CLI = require("clui");
                      
                      const spinner = new CLI.Spinner("Getting response from Amazon...");
                      
                      const questions = [
                          {
                              name: "clientId",
                              type: "input",
                              message: "Enter your Client ID from Alexa Voice Service (AVS):",
                              validate: value => {
                                  if (value.length) {
                                      return true;
                                  } else {
                                      return "Please enter your Client ID.";
                                  }
                              },
                          },
                          {
                              name: "clientSecret",
                              type: "input",
                              message: "Enter your Client Secret from Alexa Voice Service (AVS):",
                              validate: function(value) {
                                  if (value.length) {
                                      return true;
                                  } else {
                                      return "Please enter your Client Secret.";
                                  }
                              },
                          },
                          {
                              name: "productId",
                              type: "input",
                              message: "Enter your Product ID from Alexa Voice Service (AVS):",
                              validate: function(value) {
                                  if (value.length) {
                                      return true;
                                  } else {
                                      return "Please enter your Product ID.";
                                  }
                              },
                          },
                          {
                              name: "redirectUri",
                              type: "input",
                              message: "Enter your Redirect URI (allowed return URL) from Alexa Voice Service (AVS):",
                              validate: function(value) {
                                  const pattern = new RegExp(
                                      "^(https?:\\/\\/)?" + // protocol
                                      "((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|" + // domain name
                                      "((\\d{1,3}\\.){3}\\d{1,3}))" + // OR ip (v4) address
                                      "(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*" + // port and path
                                      "(\\?[;&a-z\\d%_.~+=-]*)?" + // query string
                                          "(\\#[-a-z\\d_]*)?$",
                                      "i", // fragment locator
                                  );
                      
                                  if (!!pattern.test(value)) {
                                      return true;
                                  } else {
                                      return true;
                                  }
                              },
                          },
                      ];
                      
                      const authCodeQuestion = [
                          {
                              name: "authCode",
                              type: "input",
                              message: "Enter your Authorization code (from previous step):",
                              validate: value => {
                                  if (value.length) {
                                      return true;
                                  } else {
                                      return "Please enter your Authorization Code.";
                                  }
                              },
                          },
                      ];
                      
                      const continueQuestion = [
                          {
                              name: "continue",
                              type: "confirm",
                              message: "Do you wish to continue to generate the MagicMirror config?",
                              default: true,
                          },
                      ];
                      
                      const configQuestions = [
                          {
                              name: "wakeWord",
                              type: "list",
                              message: "What do you want your Wake Word to be? (The phrase used to activate this module)",
                              choices: ["Alexa", "Smart Mirror", "Snowboy"],
                          },
                          {
                              name: "liteMode",
                              type: "confirm",
                              message: "Do you want to use lite mode?",
                              default: false,
                          },
                          {
                              name: "useVisualization",
                              type: "confirm",
                              message: "Do you want to use visulization?",
                              default: true,
                          },
                      ];
                      
                      const generateQuery = params =>
                          Object.keys(params)
                              .map(key => key + "=" + params[key])
                              .join("&");
                      
                      clear();
                      
                      console.log(chalk.yellow(figlet.textSync("Awesome Alexa", { horizontalLayout: "full" })));
                      
                      console.log(chalk.underline("Welcome to the Config Helper tool!"));
                      console.log("This tool will help you get the Refresh Token needed to run MMM-awesome-alexa.");
                      console.log(
                          "It will optionally generate your config for you, if you wish. If not, you can still create it manually after.",
                      );
                      console.log("Go to https://developer.amazon.com/alexa/console/avs/products to get the details.\n");
                      
                      const run = async () => {
                          const output = await inquirer.prompt(questions);
                      
                          const scopeData = {
                              "alexa:all": {
                                  productID: output.productId,
                                  productInstanceAttributes: {
                                      deviceSerialNumber: 123, // Can be anything
                                  },
                              },
                          };
                      
                          const queryParams = generateQuery({
                              client_id: output.clientId,
                              scope: "alexa:all",
                              scope_data: JSON.stringify(scopeData),
                              response_type: "code",
                              redirect_uri: output.redirectUri,
                          });
                      
                          console.log(
                              chalk.blue("Hooray! Link is generated. Part 1 is done. Please go on the link below.\n"),
                          );
                          console.log(
                              chalk.yellow("Please be aware that at the end,"),
                              chalk.bgRed("THERE WILL BE AN ERROR!"),
                              chalk.green("This is normal.\n"),
                          );
                      
                          console.log(`https://www.amazon.com/ap/oa?${queryParams}`);
                      
                          console.log("\n^^^ Copy and paste the above in your Browser ^^^, follow the instructions.");
                          console.log(
                              "The authorization code you want is in the address bar in the final screen: https://imgur.com/a/6DbYlKA",
                          );
                      
                          const authOutput = await inquirer.prompt(authCodeQuestion);
                      
                          spinner.start();
                      
                          const amazonTokenReponse = await request.post("https://api.amazon.com/auth/o2/token", {
                              form: {
                                  grant_type: "authorization_code",
                                  code: authOutput.authCode,
                                  client_id: output.clientId,
                                  client_secret: output.clientSecret,
                                  redirect_uri: output.redirectUri,
                              },
                              json: true,
                          });
                      
                          spinner.stop();
                          console.log(
                              chalk.bgGreen(
                                  "\nComplete! Your refresh token should be in the Amazon response below. If not raise an issue:\n",
                              ),
                          );
                          console.dir(amazonTokenReponse, { colors: true });
                      
                          const continueOutput = await inquirer.prompt(continueQuestion);
                      
                          if (!continueOutput.continue) {
                              process.exit();
                          }
                      
                          const configOutput = await inquirer.prompt(configQuestions);
                      
                          console.log(chalk.green("\nCongrats! Here is the full config:\n"));
                          console.dir(
                              {
                                  module: "MMM-awesome-alexa",
                                  position: "bottom_bar",
                                  config: {
                                      wakeWord: configOutput.wakeWord,
                                      clientId: output.clientId,
                                      clientSecret: output.clientSecret,
                                      deviceId: output.productId,
                                      refreshToken: amazonTokenReponse.refresh_token,
                                      lite: configOutput.liteMode,
                                      isSpeechVisualizationEnabled: configOutput.useVisualization,
                                  },
                              },
                              { colors: true },
                          );
                      };
                      
                      run();
                      
                      
                      S 1 Reply Last reply Oct 9, 2020, 9:43 PM Reply Quote 0
                      • 1
                      • 2
                      • 15
                      • 16
                      • 17
                      • 18
                      • 19
                      • 24
                      • 25
                      • 17 / 25
                      17 / 25
                      • First post
                        165/241
                        Last post
                      Enjoying MagicMirror? Please consider a donation!
                      MagicMirror created by Michael Teeuw.
                      Forum managed by Sam, technical setup by Karsten.
                      This forum is using NodeBB as its core | Contributors
                      Contact | Privacy Policy