fletcherist / yandex-dialogs-sdk

☂️Build your skill for Yandex.Alice with ease. (nodejs/typescript)
MIT License
122 stars 16 forks source link
alice alice-sdk alisa yandex-alisa yandex-dialogs

yandex-dialogs-sdk

npm version

Note: this is an open-source project. It is not affiliated with Yandex LLC.

Tiny zen library to create skills for Yandex.Alice

yandex-dialogs-sdk — Telegram chat, if you need help

Install SDK

npm i yandex-dialogs-sdk --save

To enable debug mode run DEBUG=yandex-dialogs-sdk node YOUR_APP.js

Videotutorials

🔨 Built with SDK

Getting Started

const { Alice, Reply, Markup } = require('yandex-dialogs-sdk')
const alice = new Alice();

const M = Markup;
alice.command('', async ctx => Reply.text('Look, what i can!'));
alice.command('Give a piece of advice', async ctx =>
  Reply.text('Make const not var'),
);
alice.command(
  ['What is trending now?', 'Watch films', 'Whats in the theatre?'],
  ctx => {
    return {
      text: `What about 50 Angry Men?`,
      buttons: [M.button('Buy ticket'), M.button('What else?')],
    };
  },
);
alice.command(/(https?:\/\/[^\s]+)/g, ctx => Reply.text('Matched a link!'));
alice.any(async ctx => Reply.text(`I don't understand`));
const server = alice.listen(3001, '/');

Hot middlewares from maintainer

Handle non-trivial scenarios

const { Alice, Scene, Stage } = require('yandex-dialogs-sdk')
const stage = new Stage();
const alice = new Alice();
const SCENE_AT_BAR = 'SCENE_AT_BAR';
const atBar = new Scene(SCENE_AT_BAR);

atBar.command('show menu', ctx =>
  Reply.text('only vodka here', {
    buttons: ['buy vodka', 'go away'],
  }),
);
atBar.command('buy vodka', ctx => Reply.text(`you're dead`));
atBar.command('go away', ctx => {
  ctx.leave();
  return Reply.text('as you want');
});
atBar.any(ctx => Reply.text(`no money no honey`));

stage.addScene(atBar);
alice.use(stage.getMiddleware());
alice.command('i want some drinks', ctx => {
  ctx.enter(SCENE_AT_BAR);
  return Reply.text('lets go into pub', {
    buttons: ['show menu', 'go away'],
  });
});

A lot of examples in folder ./examples

API

Alice
const { Alice } = require('yandex-dialogs-sdk')

alice.any('text', ctx => null)

// create event listener // triggers when request processing is finished alice.on('response', ctx => { console.log(ctx.response) })


###### Images Api
To use this API you have to provide your auth data.
[More info](https://tech.yandex.ru/dialogs/alice/doc/resource-upload-docpage)
```javascript
const alice = new Alice({
  oAuthToken: OAUTH_TOKEN,
  skillId: SKILL_ID
});
Context

ctx.session.set('price', 200); const price = ctx.session.get('price'); // 200

> **[enter/leave example](https://github.com/fletcherist/yandex-dialogs-sdk/blob/master/examples/scenes.js)**

###### Stage
```javascript
const { Stage } = require('yandex-dialogs-sdk')
const stage = new Stage()
Middlewares
const createMessagesCounterMiddleware = () => {
  let count = 0
  return async (ctx, next) => {
    // You can do anything with context here
    count += 1;
    return next(ctx)
  }
}
alice.use(createMessagesCounterMiddleware())
Reply
const { Reply } = require('yandex-dialogs-sdk')
IMAGE_ID = '213044/d13b0d86a41daf9de232'
EXTRA_PARAMS = { // Extra params are optional
  tts: 'Hi the+re',
  buttons: ['one', Markup.button('two')],
  end_session: true
}
Events
// create event listener
// triggers when request processing is finished
alice.on('response', ctx => {
  console.log(ctx.response)
})
Markup
const { Markup } = require('yandex-dialogs-sdk')

CONTRIBUTING

git clone

npm install && npm run test && npm run dev

Typescript will be compiled into ./dist

Contributors

Thanks all these awesome people for this product.


Stanislav Popov

📖

Nikita Rogozhin

📖

Roman Paradeev

📖

Vanya Klimenko

📖

Dmitry Guketlev

📖

Alexander Karpov

📖

Phil Romanov © MIT 2018