un sensor y activación 2 reles

Hombre. Como te dije, el código no era literal, sino para darte una idea. Creo que así sí compilaría. Queda por ver si hace lo que quieres:

//SERVIDOR
#include <ESP8266WiFi.h>

const char WiFiClave[] = "";  //Sin clave
const char AP_Nombre[] = "ESP8266";

const int releAbajo = 2;
const int releArriba = 0;

enum {Arriba, Abajo} estadoPersiana=Arriba;

WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  pinMode(releAbajo, OUTPUT);
  pinMode(releArriba,OUTPUT);
 
  WiFi.mode(WIFI_AP);
  WiFi.softAP(AP_Nombre, WiFiClave);   
  server.begin();
}

void loop() {
  WiFiClient client = server.available();   // ¿Hay un cliente conectado?
  if (!client) { return;}
  String req = client.readStringUntil('\r');  // Lee la primera linea de la petición del cliente

  if (req.indexOf("/gpio/0") != -1) {
    if (estadoPersiana==Arriba) {
      digitalWrite(releAbajo, HIGH);
      delay(20000);
      digitalWrite(releAbajo, LOW);
      estadoPersiana=Abajo;
    }
  }
  else if (req.indexOf("/gpio/1") != -1) {
    if (estadoPersiana==Abajo) {
      digitalWrite(releArriba, HIGH);
      delay(20000);
      digitalWrite(releArriba, LOW);
      estadoPersiana=Arriba;
    }   
  }
  
  client.flush();
}

No puedes suponer el estado de la persiana si quieres que el programa trabaje bien. O lo conoces de alguna manera y trabajas por tiempos como ahora, o bien necesitas unos sensores de final de carrera. En este caso, efectivamente, lo óptimo sería combinar tiempo y sensor de final de carrera. Para ello necesitarás millis.