Coder Social home page Coder Social logo

nfriend / days-until Goto Github PK

View Code? Open in Web Editor NEW
1.0 3.0 0.0 27.59 MB

An Alexa skill that counts the number of days until special events.

Home Page: https://www.amazon.com/dp/B0759KJ8D2

License: Other

Shell 1.54% TypeScript 89.15% JavaScript 9.30%
alexa alexa-skills-kit alexa-custom-skill alexa-sdk typescript node alexa-skill alexa-app nlp

days-until's Introduction

Days Until

GitLab build status

An Alexa skill that counts the number of days until special events.

View the published skill here: https://www.amazon.com/dp/B0759KJ8D2

Example Dialog

You: "Alexa, ask Days Until to create a new countdown for the end of the world on May 21."
Alexa: "Okay, I'll start a new countdown for the end of the world on May 21, 2011. Does that sound right?"
You: "Yes!"

Later that day...

You: "Alexa, ask Days until, 'How long until the end of the world?'"
Alexa: "17 days!"

Overview

Days Until helps you keep track of the number of days until special events. Set up a count down with any of these:

  • "Alexa, open Days Until"
  • "Alexa, ask Days Until to start a new countdown"
  • "Alexa, ask Days Until to create a countdown for the first day of school"
  • "Alexa, ask Days Until to create a new countdown for the first day of school on August 21"

Alexa will then confirm the date with you before the count down is saved.

After you've created a count down, you can ask Alexa how many days there are until the event:

  • "Alexa, ask Days Until, 'How many days until the first day of school?'"
  • "Alexa, ask Days Until, 'How long until the first day of school?'"

Alexa will then calculate the number of days from today until the event's date and report back to you.

If you're having trouble getting Alexa to recognize your event name, try something a bit simpler. For example, instead of "John Smith's retirement party at the lakehouse", try "the retirement party", or even just "the party".

Developing

  1. Clone this repo
  2. cd lambda
  3. yarn
  4. yarn build
  5. yarn test
  6. yarn lint

See the scripts section of lambda/package.json for a complete list of commands that can be used during development.

The yarn prepush script runs all prerequisite scripts necessary for the pipeline to succeed. It is recommended to run this script before pushing to master.

Additionally, this project uses the ASK CLI for deployment and testing. You can install the CLI globally using yarn global add ask-cli, and then run CLI commands at the root of this project, e.g. ask dialog. See ASK CLI's documentation for a complete list of available commands.

Building the model

This skill's model is generated using the Alexa Skill Utterance and Schema Generator library. This library takes en-US.grammar and outputs en-US.json. To run this process, run yarn model. Note that you will need a JDK installed for this command to run; it executes alexa-generate.jar which is included in this repository.

Testing

The easiest way to develop on this project is using test-driven development through Jest. You can run the tests using yarn test or yarn test:watch. See the existing tests for some examples.

i18n

This project uses i18next for internationalization ("i18n"). i18next-scanner is used to extract the strings directly from the source into this project's i18n directory. You can run this extraction process by running yarn translate.

To make this skill available in all English-speaking Amazon stores, a utility script (lambda/utility-scripts/copy-english-files.js) can be run to copy the appropriate en-US files/sections to en-CA, en-GB, en-AU, and en-IN.

Troubleshooting

I get an error message like "errorMessage": "lambdaFunc[lambdaHandler] is not a function" when running tests

This is most likely because of a compilation error when running the tests. Try running yarn build and make sure this succeeds.

Linting

This project uses Prettier and ESLint to help keep the codebase consistent. You can run all linting checks using yarn lint. Many of the more tedious errors can be fixed automatically; to do this, run yarn lint --fix.

Deploying

Deployment of the skill is handled by this project's GitLab pipeline. Any new commits added to master will trigger a redeploy of the skill (to its "development" stage).

Currently, the pipeline is: GitLab build status

Pipeline variables

The GitLab pipeline relies on a few environment variables:

Variable name Description
AWS_ACCESS_KEY_ID The AWS access key ID of the IAM user that executes the deployment
AWS_SECRET_ACCESS_KEY The AWS secret access key of the user mentioned above
ASK_VENDOR_ID The ASK vendor ID associated with the Alexa Developer account that owns the skill
ASK_REFRESH_TOKEN The OAuth 2.0 refresh token of the Alexa Developer account mentioned above
SENTRY_AUTH_TOKEN The Sentry API token used to upload sourcemaps to Sentry
PROJECT_TOKEN Token used to commit and push changes back to GitLab inside the pipeline. A project-level access token with write_repository scope is sufficient.
ASSETS_BUCKET_NAME Name of the AWS S3 bucket that stores and hosts assets (e.g. images, sound effects) used by the skill

More info on these variables and how to generate their values can be found in this blog post.

IAM user permissions

The IAM user used to execute the deploy must have an IAM policy like this applied:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "iam:GetRole",
        "iam:PassRole",
        "s3:*",
        "logs:*",
        "lambda:*",
        "iam:CreateRole",
        "cloudformation:*",
        "dynamodb:*",
        "iam:AttachRolePolicy",
        "iam:PutRolePolicy"
      ],
      "Resource": "*"
    }
  ]
}

Skill description, updates description, and testing instructions

See comments in lambda/utility-scripts/copy-plain-text-content.js for an explanation about how skill-package/*.txt files get read and used as content for skill.json.

Acknowledgements

Icons from www.flaticon.com were made by the following authors:

days-until's People

Contributors

nfriend avatar renovate-bot avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.