{"id":13799458,"url":"https://github.com/Accenture/alexia","last_synced_at":"2025-05-13T08:31:14.464Z","repository":{"id":57175720,"uuid":"59293646","full_name":"Accenture/alexia","owner":"Accenture","description":"A Framework for creating Amazon Echo (Alexa) skills using Node.js","archived":false,"fork":false,"pushed_at":"2020-09-15T18:54:39.000Z","size":156,"stargazers_count":164,"open_issues_count":8,"forks_count":42,"subscribers_count":26,"default_branch":"master","last_synced_at":"2025-04-09T15:01:13.092Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Accenture.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-05-20T12:46:33.000Z","updated_at":"2024-03-11T15:23:49.000Z","dependencies_parsed_at":"2022-09-03T11:00:11.937Z","dependency_job_id":null,"html_url":"https://github.com/Accenture/alexia","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Accenture%2Falexia","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Accenture%2Falexia/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Accenture%2Falexia/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Accenture%2Falexia/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Accenture","download_url":"https://codeload.github.com/Accenture/alexia/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253903712,"owners_count":21981736,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-04T00:01:02.941Z","updated_at":"2025-05-13T08:31:14.169Z","avatar_url":"https://github.com/Accenture.png","language":"JavaScript","funding_links":[],"categories":["NPM Modules"],"sub_categories":[],"readme":"![Alexia](alexia-logo.png \"Alexia\")\n\nA Framework for creating Amazon Echo (Alexa) skills using Node.js\n\n  [![NPM Version][npm-image]][npm-url]\n  [![Build Status][travis-image]][travis-url]\n  [![Coverage Status][coveralls-image]][coveralls-url]\n\n```javascript\nconst alexia = require('alexia');\nconst app = alexia.createApp();\n\napp.intent('HelloIntent', 'Hello', () =\u003e {\n  return 'Hello from Alexia app';\n});\n```\n\n**HTTPS Server**\n\n```javascript\napp.createServer().start();\n```\n\n*or*\n\n**AWS Lamba**\n\n```javascript\nexports.handler = (event, context, callback) =\u003e {\n  app.handle(event, data =\u003e {\n    callback(null, data);\n  });\n};\n```\n\n## Installation\n\n`npm install alexia --save`\n\nOptional: requires [Handling Amazon Requests manually](#handling-amazon-requests-manually)\n\n`npm install hapi --save`\n\n## Overview\n\nAlexia helps you to write Amazon Echo skills using Node.js. This framework handles Amazon Echo requests and automatically calls intents in your application. See the [Features and Samples](#features-and-samples)\n\n## Table of Contents\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n\n- [Terminology](#terminology)\n- [Features and Samples](#features-and-samples)\n  - [Create App](#create-app)\n  - [Set default value for shouldEndSession](#set-default-value-for-shouldendsession)\n  - [Create Intents](#create-intents)\n  - [Create Welcome Message](#create-welcome-message)\n  - [Built-in Intents](#built-in-intents)\n  - [Slots](#slots)\n  - [Custom Slots](#custom-slots)\n  - [Session Attributes](#session-attributes)\n  - [Cards](#cards)\n  - [Reprompt](#reprompt)\n  - [SSML](#ssml)\n  - [Read Original Request Data](#read-original-request-data)\n  - [Asynch Intent Handling](#asynch-intent-handling)\n  - [Generate Speech Assets](#generate-speech-assets)\n  - [Save Speech Assets To Directory](#save-speech-assets-to-directory)\n  - [Register Intents using pattern matching](#register-intents-using-pattern-matching)\n  - [Actions](#actions)\n  - [Localization](#localization)\n  - [Handling Amazon Requests](#handling-amazon-requests)\n  - [Handling Amazon Requests Manually](#handling-amazon-requests-manually)\n- [Deploy](#deploy)\n  - [Heroku](#heroku)\n  - [AWS Lambda](#aws-lambda)\n- [Create Alexa skill](#create-alexa-skill)\n- [Testing](#testing)\n  - [Device Testing](#device-testing)\n  - [Echosim.io (Online Simulator)](#echosimio-online-simulator)\n  - [Unit Testing](#unit-testing)\n- [Debugging](#debugging)\n- [Scripts](#scripts)\n- [Contributing](#contributing)\n- [License](#license)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n## Terminology\n\nCreating new skills for Amazon Echo using alexia requires you to understand some basic terms. This part should clarify the most of them.\n\n- **Skill** - Alexa app\n- **Intent** - Invoked if one of intent `utterances` is recognized\n- **Utterance** - Voice input example\n- **Slot** - Variable part of utterance\n- **Session Attributes** - data persisted through the session\n- **Cards** - visual output displayed in [Alexa app](http://alexa.amazon.com/)\n\n## Features and Samples\n\n### Create App\n\nTo create new app simply call `alexia.createApp()`\n\n```javascript\nconst alexia = require('alexia');\nconst app = alexia.createApp('MyApp');\n```\n\n### Set default value for shouldEndSession\n\nIf you want to set default value of shouldEndSession response property you can do it by specifying `shouldEndSessionByDefault` property in App options.\n\n```javascript\nconst app = alexia.createApp('MyApp', {shouldEndSessionByDefault: true});\n```\n\nAlternatively you can use `app.setShouldEndSessionByDefault()` method.\n\n```javascript\napp.setShouldEndSessionByDefault(true);\n```\n\n### Create Intents\n\nYou have to give a name for the intent when you are creating it. Also you can set multiple utterances for any of your intents.\n\n```javascript\n// Named intent\napp.intent('MyIntent', 'Hello Alexa my name is Michael', () =\u003e 'Hi Michael');\n\n// Intent with more utterances\napp.intent('AnotherIntent', ['Hello', 'Hi', 'Whats up'], () =\u003e 'Hello yourself');\n```\n\n### Create Welcome Message\n\nIf you want more than just a generic \"Welcome\" from Alexa, you can use the onStart method to help you achieve that.\n\n```javascript\napp.onStart(() =\u003e {\n  return 'Welcome to My Hello World App, say hello world to get started, or say help to get more instructions';\n});\n```\n\n### Built-in Intents\n\nAmazon Alexa Skills Kit provides a collection of built-in intents. These are intents for very common actions. Alexia provides convenient methods for their reusing and extending.\n\nList of built-in intents: `cancel`, `help`, `next`, `no`, `pause`, `previous`, `repeat`, `resume`, `startOver`, `stop`, `yes`.\n\nSee official Amazon docs: [Available Built-in Intents](https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/implementing-the-built-in-intents#Available Built-in Intents)\n\n```javascript\n// Use default built-in utterances\napp.builtInIntent('stop', () =\u003e 'Stopping now');\n\n// Extend built-in utterances\napp.builtInIntent('stop', 'Stop now', () =\u003e 'Stopping now');\napp.builtInIntent('stop', ['Stop now', 'Please stop'], () =\u003e 'Stopping now');\n```\n\n### Slots\n\nAs mentioned in [Terminology](#terminology) section - slots represent variable part of user input in utterances. To make their creation bit easier our utterances contain slot name with type. These samples are converted into common utterances recognized by Alexa and slots are included in intentSchema.\n\n```javascript\napp.intent('SlotIntent', 'My number is {num:Number}', (slots) =\u003e {\n  return `Your number is ${slots.num}`;\n});\n```\n\n### Custom Slots\n\nAlexia helps you to create custom slots by specifying its `name` and `utterances`\n\n```javascript\napp.customSlot('Name', ['Arnold', 'Otto', 'Walda', 'Pete']);\n\napp.intent('CustomSlotIntent', 'My name is {name:Name}', (slots) =\u003e {\n  return `Hi ${slots.name}`;\n});\n```\n\n### Session Attributes\n\nIntent can be resolved using simple string (a text response) or more complex `responseObject`. Its attribute `attrs` will override current sessionAttributes. If you wish to extend current session attributes you can use for example `Object.assign` method. Make sure you set `end` attribute to `false` to keep the session open (default: `true`). See [Session Attributes example](examples/session-attributes.js). Session attribute `previousIntent` is reserved.\n\n```javascript\napp.intent('AttrsIntent', 'session attributes test', (slots, attrs) =\u003e {\n  return {\n    text: 'Alexa response text here',\n    attrs: {\n      attr1: 'Whatever to be remebered in this session'\n    },\n    end: false\n  };\n});\n```\n\n### Cards\n\nTo display card in Alexa app add configuration to responseObject `card` property\n\n```javascript\napp.intent('CardsIntent', 'Whats in shopping cart', () =\u003e {\n  return {\n    text: 'Your shopping cart contains Amazon Echo Device and 2 more items. To see the full list check out your Alexa app',\n    card: {\n      title: 'Shopping cart',\n      content: 'You shopping cart contains: Amazon Echo, Amazon Tap, Echo Dot'\n    }\n  };\n});\n```\n\n### Reprompt\n\nTo add reprompt text to your response add `reprompt` string value to responseObject\n\n```javascript\napp.intent('RepromptIntent', 'Send email to Mom', () =\u003e {\n  return {\n    text: 'What is the text of your message',\n    reprompt: 'Sorry I did not catch it. What is the text of your message'\n  };\n});\n```\n\n### SSML\n\nUse SSML to create more complex text responses. Just set the `ssml` parameter of responseObject to `true` and enter `SSML` into `text` property. See official Amazon docs: [Speech Synthesis Markup Language](https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/speech-synthesis-markup-language-ssml-reference)\n\n```javascript\napp.intent('SSMLIntent', 'what are the digits of number {num:Number}', (slots) =\u003e {\n  return `\u003csay-as interpret-as=\"digits\"\u003e${number}\u003c/say-as\u003e`\n});\n```\n\n### Read Original Request Data\n\nYou can access the original Amazon request data from third parameter of handler. See example below.\n\n```javascript\napp.intent('OriginalRequestData', 'read original request data', (slots, attrs, data) =\u003e {\n  console.log('userId', data.session.user.userId);\n  return 'Hi';\n});\n```\n\n### Asynch Intent Handling\n\nFor asynchronous intent handling add fourth parameter to your handler callback and call it when your response is ready. The response structure is identical to responseObject.\n\n```javascript\napp.intent('AsyncIntent', 'Search for something in database', (slots, attrs, data, done) =\u003e {\n  setTimeout(() =\u003e {\n    done('Work complete');\n  }, 120);\n});\n```\n\n### Generate Speech Assets\n\nTo minimize manual work needed while deploying your Alexa skills you can use our speechAssets generator. This helps you to create `intentSchema`, `sampleUtterances` and `customSlots` for your apps.\n\nSpeech assets consists of:\n  - **intentSchema** - array of intents with slots\n  - **utterances** - phrases that are used to invoke intents\n  - **customSlots** - custom slot types with samples\n\n\n For more information see [interaction model reference](https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/alexa-skills-kit-interaction-model-reference)\n\n```javascript\nconst speechAssets = app.speechAssets(); // object\nconsole.log(speechAssets.toString()); // stringified version - f.e. copy paste from console\n```\n\n### Save Speech Assets To Directory\n\nIf you want to use your assets (`intentSchema`, `sampleUtterances` and `customSlots`) later and have them stored, this function will do it for you. You can pass the name of your directory or leave it empty which defaults to `/speechAssets`.\n\nDirectory structure looks like this:\n```\n├── speechAssets\n    ├── intentSchema.json\n    ├── utterances.txt\n    └── customSlots\n        ├── Name.txt\n        ├── Age.txt\n        ...\n```\n\n```javascript\napp.saveSpeechAssets('speechAssets'); // No argument leads to default value 'speechAssets'\n```\n\n### Register Intents using pattern matching\n\nIf your intents are located in separate files you need to register them to the app. One way how to do this is to wrap intent into function taking `app` as a parameter.\n\n**src/intents/hello-intent.js**\n\n```javascript\nmodule.exports = app =\u003e app.intent('HelloIntent', 'hello', () =\u003e {\n  return 'Hello';\n});\n```\n\nNext you need to register it by importing it manually and supplying the `app` as a parameter.\n\nYou can also use our shorthand function for finding and registering all intents files that match pattern. See [node-glob](https://github.com/isaacs/node-glob) for more pattern matching examples.\n\n**src/app.js**\n\n```javascript\napp.registerIntents('src/intents/*-intent.js');\n```\n\n### Actions\n\nFeature of Alexia that helps you to control flow of the intents. To understand it easier see the code below.\n\nBy defining the action you enable transition from one intent to another. When no actions are specified, every intent transition is allowed.\n\nAction properties `from` and `to` can be defined as `string` (one intent), `array` (multiple intents) or `'*'` (all intents).\n\nEach action could have condition to check whether the transition should be handled or the fail method should be invoked. If no fail method is defined `app.defaultActionFail()` is invoked when condition of handling is not met or the action (transition) is not defined.\n\n```javascript\n// Allow transition from any intent to `intent1`.\napp.action({\n  from: '*',\n  to: 'intent1'\n});\n\n// Allow transition from `@start` intent to `intent2`.\napp.action({\n  from: '@start',\n  to: 'intent2'\n});\n\n// Allow transition from `intent1` to `intent2` if condition is met using custom fail handler\napp.action({\n  from: 'intent1',\n  to: 'intent2',\n  if: (slots, attrs) =\u003e slots.pin === 1234,\n  fail: (slots, attrs) =\u003e 'Sorry, your pin is invalid'\n});\n\n// Allow transition from `intent2` to `intent3` and also `intent4`.\napp.action({\n  from: 'intent2',\n  to: ['intent3', 'intent4']\n});\n\n// Set default fail handler\napp.defaultActionFail(() =\u003e 'Sorry, your request is invalid');\n```\n\n### Localization\n\nAlexia uses [i18next](https://github.com/i18next/i18next) for localizing response texts, utterances and custom slots.\n\nFor better understanding see localized app example: [examples/multi-language](examples/multi-language).\n\nThese are the steps required to localize your existing application:\n\n1. Install dependencies: `npm install --save i18next i18next-node-fs-backend`\n2. Initialize `i18next` instance - see [the example app](examples/multi-language/multi-language-app.js)\n3. Set `i18next` instance to your app to enable localization: `app.setI18next(i18next)`\n4. Create directory with all locales\n5. Omit utterances in all intents and access the translate function using `app.t('key')`\n\nLocalized intent example:\n\n```javascript\napp.intent('LocalizedIntent', slots =\u003e {\n  return app.t('text', slots);\n});\n```\n\nExample `locales` directory structure:\n\n```\nlocales/\n├── en/                  # Directory for all en locales\n│   ├── translation.js   # Translations of response texts and utterances for each intent\n│   └── custom-slots.js  # Translations of custom slots\n└── de/                  # Directory for all de locales ...\n    ├── translation.js\n    └── custom-slots.js\n```\n\nLocalization notes:\n- You can localize `LaunchRequest` or `SessionEndedRequest` as well. Just add the entry along the intent names in translations\n- To localize built in intents, say `AMAZON.YesIntent` use entry names after the `.` suffix. So `AMAZON.YesIntent` becomes just `YesIntent`\n- To access the translation use: `app.t('key')` This `key` needs to be nested in the current intent translation entry. You don't have to use the full path to the key - the prefix is automatically added depending on the current request\n- Each intent translation should have `utterances` property. We support the `richUtterances` syntax f.e: `My age is {age:Number}`\n- The locale to be used is decided depending on the `data.request.locale` Its value could be currently one of: `en-US`, `en-GB`, `en-CA`, `en-IN`, `en-AU`, `de-DE`, `fr-FR`, `ja-JP`\n\n### Handling Amazon Requests\n\nTo handle Amazon requests you need to create HTTP server with POST route. You can take advantage or our API to create Hapi server so you don't have to create it manually. This requires to install `hapi` as dependency:\n\n```\nnpm install hapi --save\n```\n\n\n```javascript\nconst options = {\n  path: '/', // defaults to: '/'\n  port: 8888 // defaults to: process.env.PORT or 8888\n};\nconst server = app.createServer(options);\n```\n\n### Handling Amazon Requests Manually\n\nYou can create your own HTTP from scratch to handle Amazon requests manually. See below example with [Hapi](http://hapijs.com/) server\n\n```javascript\nconst Hapi = require('hapi');\nconst server = new Hapi.Server();\nconst app = require('./app'); // Your app\n\nserver.connection({\n  port: process.env.PORT || 8888\n});\n\nserver.route({\n  path: '/',\n  method: 'POST',\n  handler: (request, response) =\u003e {\n    app.handle(request.payload, (data) =\u003e {\n      response(data);\n    });\n  }\n});\n\nserver.start((err) =\u003e {\n  if (err) throw err;\n  console.log('Server running at:', server.info.uri);\n  app.saveSpeechAssets();\n});\n```\n\n## Deploy\n\n### Heroku\n\n 1. Create free [Heroku](https://www.heroku.com) acount\n 2. Install [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli)\n    - ensure that you don’t have the legacy Heroku Toolbelt or Heroku Ruby gem installed\n 3. Be sure to have `start` script defined in `package.json`\n 4. Be sure to create server handler on POST endpoint. See [Handling Amazon Requests](#handling-amazon-requests)\n 5. Run `git init` if git was not yet initialized in your project\n 6. Be sure to `heroku login` and enter your credentials\n 7. Run `heroku create` in project directory\n 8. Run `git push heroku master`\n 9. Copy your server URL to your Alexa Skill configuration. See [Create Alexa Skill](#create-alexa-skill)\n\n### AWS Lambda\n\n1. Create account and login to [AWS Console](https://console.aws.amazon.com/console)\n2. Create new Lambda function\n3. Set function invocation to `index.handler`\n4. Add Alexa Skills Kit trigger\n5. Export `handler` in your index.js file\n6. Upload zipped project folder into AWS Lambda\n7. Copy Lambda function ARN to your Alexa Skill configuration\n\n```javascript\nexports.handler = (event, context, callback) =\u003e {\n  app.handle(event, data =\u003e {\n    callback(null, data);\n  });\n};\n```\n\n## Create Alexa skill\n\n- Login to your [Amazon developer account](https://developer.amazon.com)\n- Select Apps \u0026 Services\n- Select Alexa\n- Select Alexa Skills Kit\n- Add a new Skill\n- Set skill info required to run app:\n\n  **Skill Information**\n    - Name: Name of your app, can be whatever\n    - Invocation Name: Short phrase or abbreviation of your app name. Will be used to start your app by saying: `Alexa, start MyApp` if your invocation name is `MyApp`\n\n  **Interaction model**\n    - Use our speech assets generator `app.saveSpeechAssets()` to generate and save speech assets to `speechAssets` directory\n    - Custom Slot Types: Click `Add Slot Type`\n        - Type: name of custom slot type\n        - Values: contents of `speechAssets/customSlots/**` or enter custom slot samples manually\n        - Do this for each custom slot\n    - Intent Schema: enter contents of `speechAssets/intentSchema.json`\n    - Sample Utterances: enter contents of `speechAssets/sampleUtterances.txt`\n\n  **Configuration**\n    - Endpoint: select HTTPS and enter url or your publicly accesible server\n\n  **SSL Certificate**\n    - Select what applies to your SSL certificate\n    - Could remain unselected when no certificate is required\n\n  **Test**\n    - Enable skill testing on this account\n    - Enter one of your utterances and click `Ask MyApp`\n\n## Testing\n\n### Device Testing\n\n- Connect to your Amazon Echo device using the same developer account where you created skill\n- Enable application for testing\n- Say `Alexa, start \u003cmyApp\u003e`\n\n### Echosim.io (Online Simulator)\n\n- Open [Echosim.io](https://echosim.io/)\n- Login with your Amazon developer account\n- Interact with Alexa simulator\n\n### Unit Testing\n\nEach application should be unit-tested. We are exposing simple API helping you to create sample Alexa requests for testing and debugging.\n\n```javascript\nalexia.createRequest({\n  type: 'IntentRequest',\n  name: 'UnknownIntent',\n  slots: {},\n  attrs: {},\n  appId: 'amzn1.echo-sdk-123456',\n  sessionId: 'SessionId.357a6s7',\n  userId: 'amzn1.account.abc123',\n  requestId: 'EdwRequestId.abc123456',\n  timestamp: '2016-06-16T14:38:46Z',\n  locale: 'en-US',\n  new: false\n});\n```\n\nAll the properties optional and defaults to the values you see in the example above. Sample usage:\n\n```javascript\nalexia.createRequest({type: 'IntentRequest', name: 'HelloIntent', slots: ..., attrs: ...});\nalexia.createIntentRequest('HelloIntent', slots, attrs, isNew, appId); // Shorter version - does not support all of the properties\n```\n\nBefore writing unit tests make sure to install all the dependencies. In our example we will be using mocha and chai with expect.\n\n```bash\nnpm install mocha chai expect --save-dev\n```\n\nExample below illustrates simple unit testing for intentRequest. Testing of launchRequest or sessionEndedRequest would look the same\n\n```javascript\nconst expect = require('chai').expect;\nconst alexia = require('alexia');\nconst app = require('./path-to-app.js');\n\n// Create sample requests\nconst launchRequest = alexia.createLaunchRequest();\nconst sessionEndedRequest = alexia.createSessionEndedRequest();\nconst intentRequest = alexia.createIntentRequest('MyIntent');\n\n// Sample MyIntent test suite\ndescribe('(Intent) MyIntent', () =\u003e {\n  it('should handle MyIntent', done =\u003e {\n\n    // Simulate Alexa request handling\n    app.handle(intentRequest, response =\u003e {\n\n      // Test the response\n      expect(response).to.be.defined;\n      done();\n    });\n  });\n});\n```\n\n## Debugging\n\nWe are using [debug](https://github.com/visionmedia/debug) package to debug our alexia applications. To start application in debug mode export environment variable `DEBUG`\n\nExamples:\n\n- `DEBUG=alexia:info` - print only info logs\n- `DEBUG=alexia:debug` - print only debug logs\n- `DEBUG=alexia:*` - print all logs\n\nTo start your app with info logs run in terminal:\n\n```bash\nDEBUG=alexia:info npm start\n```\n\n## Scripts\n\n- `npm test` - run unit tests\n- `npm test:dev` - run unit tests in development mode using nodemon as watcher\n- `npm run lint` - run eslint\n- `npm run lint:fix` - run eslint and automatically fix problems\n- `npm run toc` - update TOC in README.md\n\n## Contributing\n\nAlexia is an open source project and we encourage contributions. Please make sure to cover your code with unit tests.\n\nAfter updating README.md please run: `npm run toc`\n\nFor more information refer to general guide [Contributing to Open Source](https://guides.github.com/activities/contributing-to-open-source/)\n\n## License\n\n[MIT](LICENSE)\n\n  [npm-image]: https://img.shields.io/npm/v/alexia.svg\n  [npm-url]: https://npmjs.org/package/alexia\n  [travis-image]: https://img.shields.io/travis/Accenture/alexia/master.svg\n  [travis-url]: https://travis-ci.org/Accenture/alexia\n  [coveralls-image]: https://coveralls.io/repos/github/Accenture/alexia/badge.svg?branch=master\n  [coveralls-url]: https://coveralls.io/github/Accenture/alexia?branch=master\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAccenture%2Falexia","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAccenture%2Falexia","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAccenture%2Falexia/lists"}