Interrupt using Serial Data

I am working on a project where my arduino periodically sends sensor data to mobile phone by SMS through GSM Module. It also receives data from the mobile phone like "Fan off" like stuff. It works like this.

  1. Send data to to GSM module with delay(100000)
  2. Also receive instruction from GSM Module for fan ON or motor OFF.....

Now my problem is that when I introduce delay to set the time period between 2 SMS to be sent, the instruction to Arduino of say FAN ON also gets delayed by 100000ms.
I want to use an Interrupt. In between the delay of 100000ms if any Serial input comes (1 or 2 or 3 or 4), output sets respectively.
Please see the code below. Sensor input is not there for now as I am conectentrating on interrupt part right now.

int status_m, status_f;
char inchar,inchar1,time;
////////////////////////////////////////////////////////
void setup()
{ 
  Serial.begin(9600);  
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(12, INPUT);
  pinMode(13, INPUT);
   Serial.println("AT+CSMS=1\r"); 
 delay(200);
  Serial.print("AT+CNMI=2,2,0,0,0"); 
  delay(300);
  Serial.print('\n');
  delay(1000);
}
/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
void loop()
{ while(Serial.available()>0)
  { 
fan();
  }
  message();
  delay(10000);
}
/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
void call()
{  Serial.print("\r \n");
  delay(1000);
Serial.print("ATD09730689900;");
delay(1000);
}

////////////////////////////////////////////////////////////////
void message()
{
  float temp, humi;
  Serial.print("\r");
  delay(1000);                  
  Serial.print("AT+CMGF=1\r");    
  delay(1000);
  Serial.print("AT+CMGS=\"+919730689900\"\r");
  delay(1000);
  Serial.println('\r');
  Serial.print("Temperature=");
  Serial.println(temp);
  Serial.print('\r');
  Serial.print("Humdity=");
  Serial.println(humi);
  Serial.print('\r');
  Serial.print("Dew point=");
  Serial.print('\n');
  if (status_f==1)
  {Serial.print("Fan is ON");
  Serial.print('\r');
  }
  else
  {Serial.print("Fan is OFF");
  Serial.print('\r');
  }
  Serial.print('\n');
   if (status_m==1)
  {Serial.print("Motor is ON");
  Serial.print('\r');
  }
  else
  {Serial.print("Motor is OFF");
  Serial.print('\r');
  }
  Serial.print('\n');
  Serial.print("---REPLY---");
  Serial.print('\n');
  Serial.print("'1' for FAN ON, Motor ON");
     Serial.print('\n');
     Serial.print("'2' for FAN ON, Motor OFF");
     Serial.print('\n');
     Serial.print("'3' for FAN OFF, Motor ON");
     Serial.print('\n');
     Serial.print("'0' for FAN OFF, Motor OFF");
     Serial.print('\n');
  delay(800);
  Serial.write(0x1A);
}
//////////////////////////////////////////////////////////////////
void fan()
{
     inchar=Serial.read(); 
     if (inchar=='1')
    {
      digitalWrite(12, HIGH);
      digitalWrite(13,HIGH);
     }
    
      
     else if (inchar=='2')
     {
       
      digitalWrite(12, HIGH);
     digitalWrite(13, LOW);
    }
    
     
     else if (inchar=='3')
     {
      digitalWrite(12, LOW);
     digitalWrite(13, HIGH);
    }
     
    
    else if (inchar=='0')
     {
       
      digitalWrite(12, LOW);
     digitalWrite(13, LOW);
    }
   status_f=digitalRead(12);
    delay(100);
    status_m=digitalRead(13);
 Serial.println("AT+CMGR=1\r");
  delay(2000);
}

I hope you understand what I am trying to say. Thanks for your patience. Please help. Thanks

Don't use delay(). See the "blink without delay" example in the IDE examples. Using that method you can poll the serial ports for new input while waiting between messages.