Получено SMS-сообщение

> [HTML Version](received-sms.html)

_(./images/sc_event_types_14.png)_

**Описание**

Создать скрипт с типом события "Получено SMS-сообщение" можно [через редактор скриптов](via-script-editor.md). Скрипт будет вызван после получения SMS процедурой [GetSMS](getsms.md) и имеет три параметра: 

- **smsPhone** - номер телефона отправителя; 

- **smsMsg** - текст sms-сообщения; 

- **smsTime** - время сообщения;

**Примеры скриптов**

**(./images/tog_code_1.png) 1. Чтение SMS-сообщений через заданный интервал**

Допустим, раз в 60 сек. требуется читать SMS-сообщения и выводить их в объект "Текст". Для этого, [создадим скрипт](via-script-editor.md) с типом события "[Таймер](second-passed.md)" - в параметре скрипта "Интервал" укажем значение 60 секунд. Напишем код скрипта:

````
begin  
  GetSMS(TRUE, FALSE);   // запрос на чтение и удаление SMS сообщений из памяти SIM-карты  
end.

````


Теперь каждые 60 секунд будет происходить отправка запроса на чтение и удаление SMS сообщений из памяти SIM-карты. Не рекомендуем читать SMS чаще чем каждые 5 секунд, так как модем отвечает не мгновенно. Для обработки полученных SMS-сообщений [создадим новый скрипт](via-script-editor.md) с типом события "Получено SMS-сообщение" . Допустим, в проекте имеется объект "Text1", в который мы хотим выводить сообщения (каждое сообщение с новой строки). Тогда код будет таким:

````
begin  
  Text1.Text := Text1.Text + smsTime + ' | ' + smsPhone + ' | ' + smsMsg + #13#10;  
end.

````
, где #13#10 - символ переноса строки.

**(./images/tog_code_1.png) 2. Извлечение параметров из сообщения содержащего разделители**

Если SMS-сообщение, к примеру содержит три параметра разделенных точкой и необходимо при получении сообщения извлечь их в три разных объекта "Text", то можно использовать такой скрипт с [типом события](event-types.md) "Получено SMS-сообщение" :

````
var  
  aWord: string;  
  I, aNumber, aLength: Integer;  
  
  procedure OnWord;  
  begin  
    case aNumber of  
      1: Text1.Text := aWord;  // первое слово записываем в Text1  
      2: Text2.Text := aWord;  // второе слово записываем в Text2  
      3: Text3.Text := aWord;  // третье слово записываем в Text3  
    end;  
  end;  
begin  
  aWord := '';  
  aNumber := 1;  
  aLength := Length(smsMsg); // получаем длину текста сообщения  
  if aLength > 0 then  
    for I := 1 to aLength do  // проходим по символам сообщения  
    begin  
      if smsMsg\[I\] <> '.' then    
        aWord := aWord + smsMsg\[I\];  
  
      if (smsMsg\[I\] = '.') or (I = aLength)  then  
      begin  
        OnWord;  
        aWord := '';  
        Inc(aNumber);  
      end;  
    end;  
end.
````

````
