Мой Твистер - навык для Алисы

29 июня 2026

Как-то с детьми втроём играли в «Твистер», но некому было крутить стрелку. Если кто-то будет крутить, играют всего лишь двое - это довольно скучно. Тогда и родилась мысль: а почему бы Алисе из Яндекса не крутить эту самую стрелку? У неё же нет ног.

Чтобы запустить навык, скажите: Алиса, запусти навык «Мой Твистер» (или перейдите по ссылке Мой Твистер).

А дальше — наслаждайтесь игрой, периодически говоря: Дальше.

Под капотом

Под капотом — сервер на Node.js, который принимает POST-запрос с телом вида:

request = {
    meta: {
        // ...
    },
    session: {
        // ...
    },
    request: {
        original_utterance: "Пользовательский ввод",
        // ...
    },
    version: "1.0"
}

Здесь важно поле request.original_utterance. В зависимости от его значения:

  • 'ping' — отвечаем response: { text: 'OK', end_session: true }
  • '""' (пусто) — отвечаем приветствием response: { text: '<приветствие>', end_session: false }
  • всё остальное — отвечаем согласно вашей логике, например:
const a = ['Левая', 'Правая'];
const b = ['рука', 'нога'];
const c = ['на'];
const d = ['желтый', 'красный', 'синий', 'зеленый'];
const e = ['круг'];
const answer = `${sample(a)} ${sample(b)} ${sample(c)} ${sample(d)} ${sample(e)}`;
res.send({
    version, session,
    response: {
        text: answer, buttons: [], end_session: isEndSession
    }
}).status(200);

Несколько советов:

  • приводите все к одному регистру — так проще искать совпадения
  • при проверке utterance добавляйте синонимы (например, ['дальше', 'продолжить', 'продолжать', 'продолжай'])
  • если не удалось распознать команду, попросите пользователя повторить или переформулировать

Исходный код — на GitHub.