Files
local_yandex_station/configs/wb-rules/wb-rules-examples.js

118 lines
4.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Примеры wb-rules для ОДНОЙ выбранной станции.
//
// Как использовать:
// 1) подставь IP станции (или station_id) в переменную STATION;
// 2) скопируй файл в /etc/wb-rules/;
// 3) перезапусти сервис wb-rules.
var API_BASE = "http://127.0.0.1:9124";
var STATION = "PUT_STATION_IP_HERE";
function enc(v) {
return encodeURIComponent(String(v === undefined || v === null ? "" : v));
}
function apiExec(query, cb) {
runShellCommand("curl -s '" + API_BASE + "/api/exec?" + query + "'", {
captureOutput: true,
exitCallback: function(exitCode, output) {
if (exitCode !== 0) return cb({ ok: false, error: "curl_failed" });
try { cb(JSON.parse(output || "{}")); } catch (e) { cb({ ok: false, error: "bad_json", raw: output }); }
}
});
}
function player(cmd) {
apiExec("action=player&station=" + enc(STATION) + "&cmd=" + enc(cmd), function() {});
}
function tts(text, volume) {
apiExec(
"action=tts&station=" + enc(STATION) + "&text=" + enc(text) + "&volume=" + enc(volume),
function() {}
);
}
function command(text) {
apiExec("action=command&station=" + enc(STATION) + "&text=" + enc(text), function() {});
}
function audioTts(text, audioId, volume, voice, effect) {
var v = String(voice || "");
var e = String(effect || "");
apiExec(
"action=tts&station=" + enc(STATION) +
"&text=" + enc(text) +
"&tts_audio=" + enc(audioId) +
"&tts_voice=" + enc(v) +
"&tts_effect=" + enc(e) +
"&volume=" + enc(volume),
function() {}
);
}
defineVirtualDevice("alice_one_station_examples", {
title: "Алиса: одна станция",
cells: {
play_btn: { type: "pushbutton", value: false, title: "Play" },
stop_btn: { type: "pushbutton", value: false, title: "Stop" },
next_btn: { type: "pushbutton", value: false, title: "Next" },
prev_btn: { type: "pushbutton", value: false, title: "Prev" },
tts_btn: { type: "pushbutton", value: false, title: "TTS" },
command_btn: { type: "pushbutton", value: false, title: "Command" },
audio_tts_btn:{ type: "pushbutton", value: false, title: "Audio + TTS" }
}
});
// Правило 1: команда player=play
defineRule("alice_example_play", {
whenChanged: "alice_one_station_examples/play_btn",
then: function(v) { if (v) player("play"); }
});
// Правило 2: команда player=stop
defineRule("alice_example_stop", {
whenChanged: "alice_one_station_examples/stop_btn",
then: function(v) { if (v) player("stop"); }
});
// Правило 3: команда player=next
defineRule("alice_example_next", {
whenChanged: "alice_one_station_examples/next_btn",
then: function(v) { if (v) player("next"); }
});
// Правило 4: команда player=prev
defineRule("alice_example_prev", {
whenChanged: "alice_one_station_examples/prev_btn",
then: function(v) { if (v) player("prev"); }
});
// Правило 5: обычный TTS-текст с громкостью 35
defineRule("alice_example_tts", {
whenChanged: "alice_one_station_examples/tts_btn",
then: function(v) {
if (!v) return;
tts("Тестовое голосовое сообщение", 35);
}
});
// Правило 6: обычная голосовая команда станции
defineRule("alice_example_command", {
whenChanged: "alice_one_station_examples/command_btn",
then: function(v) {
if (!v) return;
command("включи радио");
}
});
// Правило 7: звук + TTS в одном запросе (параметр tts_audio)
defineRule("alice_example_audio_tts", {
whenChanged: "alice_one_station_examples/audio_tts_btn",
then: function(v) {
if (!v) return;
// Тот же звук и голос, что в правиле "Дверной звонок" из `Новая папка/rules.json`.
audioTts("Кто-то ждёт у входной двери", "alice-sounds-things-bell-1.opus", 70, "anton_samokhvalov", "");
}
});