Harden paradizweb guardrails: block outbound action requests in web bridge
This commit is contained in:
@@ -46,6 +46,16 @@ function sanitizeForWebsite(text) {
|
|||||||
return cleaned;
|
return cleaned;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isExternalActionRequest(text) {
|
||||||
|
const t = String(text || '').toLowerCase();
|
||||||
|
const markers = [
|
||||||
|
'отправ', 'напиши в telegram', 'напиши в телеграм', 'telegram', 'телеграм',
|
||||||
|
'whatsapp', 'ватсап', 'vk', 'вк', 'email', 'e-mail', 'почт', 'позвон',
|
||||||
|
'создай задачу', 'api', 'webhook', 'уведомлен'
|
||||||
|
];
|
||||||
|
return markers.some((m) => t.includes(m));
|
||||||
|
}
|
||||||
|
|
||||||
function json(res, code, payload) {
|
function json(res, code, payload) {
|
||||||
res.writeHead(code, {
|
res.writeHead(code, {
|
||||||
'Content-Type': 'application/json; charset=utf-8',
|
'Content-Type': 'application/json; charset=utf-8',
|
||||||
@@ -65,7 +75,9 @@ function runAgent(userText) {
|
|||||||
'Работай только по теме бронирования/подбора проживания для Парадиз.',
|
'Работай только по теме бронирования/подбора проживания для Парадиз.',
|
||||||
'Используй только логику скилла paradiz.',
|
'Используй только логику скилла paradiz.',
|
||||||
'Не выполняй задачи вне бронирования и не меняй файлы.',
|
'Не выполняй задачи вне бронирования и не меняй файлы.',
|
||||||
'Если данных не хватает для брони — задай уточняющие вопросы.'
|
'Если данных не хватает для брони — задай уточняющие вопросы.',
|
||||||
|
'СТРОГО ЗАПРЕЩЕНО: любые внешние действия и коммуникации (Telegram/VK/WhatsApp/email/звонки/API-вызовы/отправка сообщений/создание задач/изменения в сторонних системах).',
|
||||||
|
'Если пользователь просит внешнее действие, ответь только текстом: "Я передам информацию менеджеру, он свяжется с вами." и продолжи сбор данных по бронированию.'
|
||||||
].join(' ');
|
].join(' ');
|
||||||
|
|
||||||
const message = `${guardrail}\n\nОтвечай клиенту полезно и конкретно. Не используй NO_REPLY для веб-чата. Никогда не выводи служебные техстроки (аккаунт, модель, лимиты, codex-аккаунт).\n\nВопрос клиента: ${userText}`;
|
const message = `${guardrail}\n\nОтвечай клиенту полезно и конкретно. Не используй NO_REPLY для веб-чата. Никогда не выводи служебные техстроки (аккаунт, модель, лимиты, codex-аккаунт).\n\nВопрос клиента: ${userText}`;
|
||||||
@@ -117,6 +129,13 @@ const server = http.createServer(async (req, res) => {
|
|||||||
const question = String(parsed.question || '').trim();
|
const question = String(parsed.question || '').trim();
|
||||||
if (!question) return json(res, 400, { ok: false, error: 'question_required' });
|
if (!question) return json(res, 400, { ok: false, error: 'question_required' });
|
||||||
|
|
||||||
|
if (isExternalActionRequest(question)) {
|
||||||
|
return json(res, 200, {
|
||||||
|
ok: true,
|
||||||
|
answer: 'Я передам информацию менеджеру, он свяжется с вами. А пока напишите, пожалуйста, даты заезда/выезда и состав гостей — подготовлю варианты и стоимость.'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const answer = await runAgent(question);
|
const answer = await runAgent(question);
|
||||||
return json(res, 200, { ok: true, answer });
|
return json(res, 200, { ok: true, answer });
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
Reference in New Issue
Block a user