SIM900 numeros autorizados string agenda[]

Buenas tardes, tengo por el momento un codigo que me permite realizar 3 acciones sobre un modulo rele, y cualquier numero que sepa cual es el mensaje a enviar podra manipularlo, quiero evitar esa sitaucion por medio de un string agenda[] que encontre en internet, pero no se como condicionar mi codigo para que si el numero que envio el mensaje esta en el string, realice la accion, creando asi una especie de filtro de seguridad para manipular los reles.

Este es el codigo

#include <SoftwareSerial.h>




SoftwareSerial SIM900(7,8); // Configura el puerto serie para el SIM900

char incoming_char = 0; //Variable que guarda los caracteres que envia el SIM900
String agenda[] = {"XXXXXXXXX" , "XXXXXXXXX"};  //Array con los numeros autorizados
String mensaje = "";
int relay_pin = 2;

void setup()
{

pinMode(relay_pin, OUTPUT);   // Setting erlay pin as output pin 
digitalWrite(relay_pin, HIGH);  // Making relay pin initailly low

inicializaSIM900();
}

void loop()
{
  if (SIM900.available() > 0)
  {
    incoming_char = SIM900.read(); //Guardamos el carácter del GPRS
    Serial.print(incoming_char); //Mostramos el carácter en el monitor serie
    mensaje = mensaje + incoming_char ; // Añadimos el carácter leído al mensaje
  }
identifica_SMS();

}


void inicializaSIM900()
{ 
  
  digitalWrite(9, HIGH);   // Descomentar para activar la alimentación de la tarjeta por Software
  delay(1000);             
  digitalWrite(9, LOW);
  delay (5000);
  SIM900.begin(19200); //Configura velocidad del puerto serie para el SIM900
  Serial.begin(19200); //Configura velocidad del puerto serie del Arduino
  Serial.println("OK");
  delay (1000);
  SIM900.println("AT + CPIN = \"1234\""); //Comando AT para introducir el PIN de la tarjeta
  delay(25000); //Tiempo para que encuentre una RED
  SIM900.print("AT+CMGF=1\r"); //Configura el modo texto para enviar o recibir mensajes
  delay(1000);
  SIM900.print("AT+CNMI=2,2,0,0,0\r"); // Saca el contenido del SMS por el puerto serie del GPRS
  delay(1000);


}

void identifica_SMS()
{
  int led_on = mensaje.indexOf("Encender");
  int led_off = mensaje.indexOf("Apagar");
  int led_ok = mensaje.indexOf("Reset");
  if (led_on >= 0)
   {
    digitalWrite(relay_pin, LOW);
        delay(1000);

        
        Serial.println("\nLED ENCENDIDO");
        mensaje = "" ; //Bórralo para la próxima vez
        SIM900.print("AT+CMGD=1,4");
  }
 else if (led_off >= 0)
  {
   digitalWrite(relay_pin, HIGH);
        delay(1000);

        
        Serial.println("\nLED APAGADO");
        mensaje = "" ; //Bórralo para la próxima vez
        SIM900.print("AT+CMGD=1,4");
  }
else if (led_ok >=0)
  {

   digitalWrite(relay_pin, HIGH);
   delay(5000);
   digitalWrite(relay_pin, LOW);
    Serial.print("\nLED OK");
    mensaje = "" ; //Bórralo para la próxima vez
    SIM900.print("AT+CMGD=1,4");
  }
}

void borrarMensaje()
{
  SIM900.print("AT+CMGD=1,4");
  delay(60000);
}

En tu código usas por ejemplo:

int led_on = mensaje.indexOf("encender");

Con ese código buscas en el texto recibido la palabra "encender" y actuas en consecuencia.

Lo mismo tienes que hacer con cada numero de telefono, en pseudocodigo sería algo asi:

String numeros[total]={.....}
bool valido=false;
for (int i=0; i<total; i++) {
  if ( mensaje.indexOf(numeros[i]) ) valido=true;
}

if ( valido == true ) {
  // Analizo el resto del mensaje.
}

Asi, cuando la variable valido sea cierta significa que en el mensaje aparece uno de los numeros de tu agenda.