GSM Shield

A sugestão do programa apenas precisava de uns pequenos acertos, que eu presumo, você mesmo poderia ter debugado o código e verificado.

void loop() {
botao = digitalRead(pinoBotao);

if ((botao == 1) && (botao != botaoAntes)) {//contacto activou e anteriormente o botao nao estava activo.
//mete aqui o teu codigo de envio de mensagem.
digitalWrite(ledVerm, HIGH);
delay(2000);

}
{
delay(3000);
botaoAntes = botao;

}}

Além do programa ficar preso em 2 Delays, o LED apenas era ligado 01 vez, porque não há um comando para desligá-lo. E também só era ligado quando os 2 delays eram executados primeiros, fazendo você ter que segurar o botão para acionar o LED.

Fiz uma pequena alteração no seu código, logo abaixo segue:

const unsigned int  led_do_Arduino = 13; //LED do Arduino
const unsigned int  leitura_do_botao = 12;
unsigned char     estado_anterior_do_botao = 0;
unsigned char     estado_atual_do_botao = 0;

void setup() 
{
  pinMode(leitura_do_botao, INPUT);
  pinMode(led_do_Arduino, OUTPUT);
  digitalWrite(led_do_Arduino, LOW);
}

void loop() 
{
  
  estado_atual_do_botao = digitalRead(leitura_do_botao); //pino 12

  if ((estado_atual_do_botao == 1) && (estado_atual_do_botao != estado_anterior_do_botao)) //contacto activou e anteriormente o botao nao estava activo.
  {
    
    //mete aqui o teu codigo de envio de mensagem.
        
    digitalWrite(led_do_Arduino, HIGH);
    delay(2000);    
    digitalWrite(led_do_Arduino, LOW);
  }
    estado_anterior_do_botao = estado_atual_do_botao;
}

ATENÇÃO:
Escreva esse código numa folha de papel e vá com a caneta preenchendo ao lado os valores das variáveis e simule mentalmente o funcionamento. Dessa forma você vai entender e facilitará seu aprendizado.