Refine wb-rules examples and align player/TTS API
This commit is contained in:
117
configs/wb-rules/wb-rules-examples.js
Normal file
117
configs/wb-rules/wb-rules-examples.js
Normal file
@@ -0,0 +1,117 @@
|
||||
// Примеры wb-rules для ОДНОЙ выбранной станции.
|
||||
//
|
||||
// Как использовать:
|
||||
// 1) подставь id станции из data/stations.json в переменную STATION;
|
||||
// 2) скопируй файл в /etc/wb-rules/;
|
||||
// 3) перезапусти сервис wb-rules.
|
||||
|
||||
var API_BASE = "http://127.0.0.1:9124";
|
||||
var STATION = "PUT_EXACT_STATION_ID_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", "");
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user