Saltar al contenido principal

Reglas de Respuesta

aviso

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.

Templates menu
tip

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í:

  1. El usuario solicita una suscripción.
  2. Remnawave reconoce que está usando Happ en Android.
  3. Remnawave responde con una Plantilla Happ Android personalizada y agrega un encabezado personalizado HappTheBestAppOnTheWorld.

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 es false, la regla se omite durante la evaluación.

    "enabled": true
  • operator (enum) — requerido; AND u OR

    "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:

    TipoDescripció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 en true, 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 en true, 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 servir XRAY_BASE64 a las aplicaciones cliente que el Panel reconoce como capaces de aceptar XRAY_JSON cuando Serve JSON at Base Subscription está habilitado.
      Si establece este indicador en true, la configuración Serve JSON at Base Subscription será ignorada (establecida en false).
    • disableHwidCheck (boolean) - opcional
      En algunos casos, las aplicaciones cliente pueden necesitar ignorar el HWID. Si este indicador se establece en true, 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:

    OperadorDescripció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
Servir Plantillas específicas por Sistema Operativo

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"
}
}
Reglas de Resolución de Encabezados
  1. Los nombres de encabezados no distinguen mayúsculas de minúsculas
    "user-agent" === "User-Agent" === "USER-AGENT"
  2. Si un encabezado tiene múltiples valores, estos se concatenarán en una sola cadena, separados por comas.
  3. El valor faltante de los encabezados resulta en una regla omitida.