Reglas de Respuesta
Si no está seguro de los cambios que está realizando, proceda con cautela. Las modificaciones incorrectas pueden interrumpir el sistema.
Las Reglas de Respuesta (SRR) son un conjunto ordenado (de arriba a abajo; si la regla aplica, la evaluación se detiene), en formato JSON, que el backend evalúa para las solicitudes de suscripción entrantes.
Las Reglas de Respuesta anularán la configuración de Squads Externos.
Crear una Regla de Respuesta Personalizada
Vamos a crear una Regla de Respuesta personalizada que le dará a un usuario de Android con la aplicación cliente Happ una Plantilla personalizada y un encabezado personalizado.
Debería verse algo así:
- El usuario solicita una suscripción.
- Remnawave reconoce que está usando Happ en Android.
- Remnawave responde con una Plantilla
Happ Androidpersonalizada y agrega un encabezado personalizadoHappTheBestAppOnTheWorld.
Así podría verse la regla:
{
"name": "Happ Android",
"description": "Serve custom JSON for Android",
"enabled": true,
"operator": "AND", // Both "user-agent" and "x-device-os" must be matched
"conditions": [
{
"caseSensitive": false,
"headerName": "user-agent",
"operator": "CONTAINS",
"value": "happ"
},
{
"caseSensitive": false,
"headerName": "x-device-os",
"operator": "EQUALS",
"value": "android"
}
],
"responseType": "XRAY_JSON",
"responseModifications": {
"subscriptionTemplate": "Happ Android", // Serve the custom Template
"headers": [ // Serve the custom headers
{
"key": "x-provider-id",
"value": "HappTheBestAppOnTheWorld"
}
]
}
}
rules
Cada regla es un objeto con los siguientes campos:
-
name(cadena) — requerido; 1..50 caracteres"name": "Block Legacy Clients" -
description(cadena) — opcional; máx. 250 caracteres"description": "Blocks requests from legacy clients" -
enabled(booleano) — requerido
Controla si la regla está activa. Cuando esfalse, la regla se omite durante la evaluación."enabled": true -
operator(enum) — requerido;ANDuOR"operator": "AND" // Rule matches only if ALL conditions match
"operator": "OR" // Rule matches if ANY condition matches -
conditions(array)
Lista de condiciones a evaluar."conditions": [] // Empty = match everything (use for fallback rules) -
responseType(enum) — requerido
Determina qué respuesta enviar cuando la regla coincide:Tipo Descripción MIHOMOConfiguración YAML de Mihomo CLASHConfiguración YAML de Clash STASHConfiguración YAML de Stash SINGBOXConfiguración JSON de Sing-box XRAY_JSONConfiguración JSON de Xray XRAY_BASE64Configuración Xray en Base64 BROWSERPágina HTML para navegadores BLOCKHTTP 403 Prohibido STATUS_CODE_404HTTP 404 No Encontrado STATUS_CODE_451HTTP 451 No Disponible por Razones Legales SOCKET_DROPCerrar la conexión del socket -
responseModifications(array) - opcional
Modificaciones adicionales para aplicar a la respuesta. Puede usarse para proporcionar una Plantilla o encabezados personalizados.subscriptionTemplate(cadena) - opcional
Define una Plantilla específica para ser proporcionada si la regla coincide.headers(array) - opcional
Responder con un encabezado personalizado.key(cadena) - opcional
Nombre del encabezado.value(cadena) - opcional
Valor del encabezado.
applyHeadersToEnd(booleano) - opcional
Por defecto, los encabezados se agregan al formar la respuesta. En algunos casos, los encabezados establecidos en SRR pueden ser anulados por encabezados de otras partes del sistema (como Squads Externos). Si establece este indicador entrue, los encabezados de SRR se agregarán al final, justo antes de que se envíe la respuesta. En este caso, los encabezados de SRR pueden anular los encabezados de otras secciones.ignoreHostXrayJsonTemplate(booleano) - opcional
Cada Host puede tener su propia Plantilla Xray Json. Si establece este indicador entrue, se utilizará la Plantilla Xray Json definida por SRR. La Plantilla Xray Json del Host será ignorada.ignoreServeJsonAtBaseSubscription(booleano) - opcional
En ciertos escenarios puede querer servirXRAY_BASE64a las aplicaciones cliente que el Panel reconoce como capaces de aceptarXRAY_JSONcuandoServe JSON at Base Subscriptionestá habilitado.
Si establece este indicador entrue, la configuraciónServe JSON at Base Subscriptionserá ignorada (establecida enfalse).disableHwidCheck(boolean) - opcional
En algunos casos, las aplicaciones cliente pueden necesitar ignorar el HWID. Si este indicador se establece entrue, la verificación de soporte HWID se ignorará.
"responseType": "SINGBOX",
"responseModifications": {
"applyHeadersToEnd": true,
"headers": [
{
"key": "X-Custom-Header",
"value": "CustomValue"
}
],
"ignoreHostXrayJsonTemplate": true,
"ignoreServeJsonAtBaseSubscription": true,
"subscriptionTemplate": "Singbox Legacy"
}
rules.conditions
-
headerName(cadena) — requerido
El encabezado HTTP a verificar. Debe cumplir con RFC 7230."headerName": "user-agent" // Client app user-agent -
operator(enum) — requerido
Operación de comparación a realizar:Operador Descripción EQUALSCoincidencia exacta NOT_EQUALSCoincidencia exacta inversa CONTAINSSubcadena existente NOT_CONTAINSSubcadena ausente STARTS_WITHCoincidencia de prefijo NOT_STARTS_WITHAusencia de prefijo ENDS_WITHCoincidencia de sufijo NOT_ENDS_WITHAusencia de sufijo REGEXExpresión regular NOT_REGEXRegex inverso -
value(cadena) — requerido; 1..255 caracteres
El valor a comparar con el valor del encabezado."value": "^sfa|sfi|sfm|sft|karing|singbox|rabbithole" -
caseSensitive(booleano) — requerido"caseSensitive": true // The value is compared as is
"caseSensitive": false // The value is lowercased before comparison
Puede responder fácilmente con diferentes Plantillas para diferentes sistemas operativos.
En el siguiente ejemplo, los usuarios con iOS recibirán un JSON Happ iOS, y los usuarios con Android recibirán un JSON Happ Android.
{
"name": "Happ Android",
"description": "Serve custom JSON for Android",
"enabled": true,
"operator": "AND",
"conditions": [
{
"caseSensitive": false,
"headerName": "user-agent",
"operator": "CONTAINS",
"value": "happ"
},
{
"caseSensitive": false,
"headerName": "x-device-os",
"operator": "CONTAINS",
"value": "android"
}
],
"responseType": "XRAY_JSON",
"responseModifications": {
"subscriptionTemplate": "Happ Android"
}
},
{
"name": "Happ iOS",
"description": "Serve custom JSON for iOS",
"enabled": true,
"operator": "AND",
"conditions": [
{
"caseSensitive": false,
"headerName": "user-agent",
"operator": "CONTAINS",
"value": "happ"
},
{
"caseSensitive": false,
"headerName": "x-device-os",
"operator": "CONTAINS",
"value": "ios"
}
],
"responseType": "XRAY_JSON",
"responseModifications": {
"subscriptionTemplate": "Happ iOS"
}
}
- Los nombres de encabezados no distinguen mayúsculas de minúsculas
"user-agent" === "User-Agent" === "USER-AGENT" - Si un encabezado tiene múltiples valores, estos se concatenarán en una sola cadena, separados por comas.
- El valor faltante de los encabezados resulta en una regla omitida.