# SendCommand

## Шаблон SendCommand <a href="#template_send_command" id="template_send_command"></a>

```xml
<Command Name="" Type="SendCommand" Assembly="SMSCenterEngine">
  <UserSqlQuery>
    <Text></Text>
  </UserSqlQuery>
  <PasswordSqlQuery>
    <Text></Text>
  </PasswordSqlQuery>
  <Background Value="True" />
  <MultipleText Value="True" />
  <PhonesSqlQuery>
    <Text></Text>
  </PhonesSqlQuery>
  <NormalizePhones Type="Full" />
  <Variables>
    <Variable Name="VariableName" Value="[переменная]" />
  </Variables>
  <TitleVariable Value="[имя]" />
  <CommonTextSqlQuery>
    <Text></Text>
  </CommonTextSqlQuery>
  <MaleTextSqlQuery>
    <Text></Text>
  </MaleTextSqlQuery>
  <FemaleTextSqlQuery>
    <Text></Text>
  </FemaleTextSqlQuery>
  <PostSqlQuery>
    <Text></Text>
  </PostSqlQuery>
  <UpdateStatusSqlQuery>
    <Text></Text>
  </UpdateStatusSqlQuery>
</Command>
```

## Описание SendCommand <a href="#description_send_command" id="description_send_command"></a>

```xml
<Command Name="SendCommandName" Type="SendCommand" Assembly="SMSCenterEngine">
  <!--Тэги, общие для всех команд-->
  <!--Тэги, общие для всех команд сборки SMSCenterEngine-->
  <!--Тэги, специфичные для определенной команды (зависит от типа) сборки SMSCenterEngine-->
</Command>
```

## Тэги, специфичных для SendCommand <a href="#tags_send_command" id="tags_send_command"></a>

### Background <a href="#background" id="background"></a>

Признак, определяющий, будет ли отправка СМС происходить в фоновом режиме (в отдельном потоке, то есть без задержки для приложения, вызвавшего данную команду).

Необязательный тэг. Значение тэга `<Background>`: не ожидается.

Если тэг `<Background>` отсутствует, то для атрибута `Value` используется значение False.

```xml
<Background Value="False" />
```

#### Атрибуты тэга `<Background>` <a href="#attributes_tag_background" id="attributes_tag_background"></a>

<table data-header-hidden><thead><tr><th align="center"></th><th width="529.3333333333333"></th></tr></thead><tbody><tr><td align="center">Value</td><td><p>Значение.</p><p></p><p>Обязательный атрибут. Ожидается логическое значение.</p></td></tr></tbody></table>

### MultipleText <a href="#multiple_text" id="multiple_text"></a>

Признак, определяющий, будет ли отправка СМС происходить с разным текстом для разных адресатов.

Необязательный тэг. Значение тэга `<MultipleText>`: не ожидается.

Если тэг `<MultipleText>` отсутствует, то для атрибута `Value` используется значение False.

#### Атрибуты тэга `<MultipleText>` <a href="#attributes_tag_multiple_text" id="attributes_tag_multiple_text"></a>

<table data-header-hidden><thead><tr><th align="center"></th><th width="529.3333333333333"></th></tr></thead><tbody><tr><td align="center">Value</td><td><p>Значение.</p><p></p><p>Обязательный атрибут. Ожидается логическое значение.</p></td></tr></tbody></table>

### PhonesSqlQuery <a href="#phones_sql_query" id="phones_sql_query"></a>

Sql-запрос, возвращающий список телефонов, переменных для автозамены в тексте сообщений, имена, а также пол владельцев, которым следует отправить сообщение через систему "СМС-Центр".

Обязательный тэг. Значение тэга `<PhonesSqlQuery>`: тэг [`<Text>`](#phones_sql_query_text).

```xml
<PhonesSqlQuery>
  <Text>
    SELECT
    sms_phone_id AS "Id",
    phone AS "Phone",
    title AS "Title",
    {Now} AS "DateSend",
    sex AS "Sex",
    text_id AS "TextId",
    variable_value AS "VariableName"
    FROM
    sms_phone
  </Text>
</PhonesSqlQuery>
```

#### Тэг `<Text>` <a href="#phones_sql_query_text" id="phones_sql_query_text"></a>

Содержит sql-запрос.

Обязательный тэг. Значение тэга `<Text>`: текст sql-запроса.

Sql-запрос должен возвращать список полей со следующими заголовками (алиасами):

1. Id - произвольный идентификатор, соответствующий телефону для отправки СМС, который будет использоваться в Post-запросе и UpdateStatus-запросе.
2. Phone - телефон для отправки СМС.
3. Title - имя адресата СМС, которое будет подставлено в текст сообщения через переменную TitleVariable (или через переменную с именем Title, описанную в тэге [`<Variables>`](#variables)).
4. DateSend - дата, когда сообщение будет передано от СМС-сервера оператору.
5. Sex - пол адресата СМС.
6. TextId (столбец обязателен только при истинном значении атрибута `Value` в тэге `<Multiple>`) - идентификатор отправляемого текста, указываемого в запросе из тэга [`<MaleTextSqlQuery>`](#male_text_sql_query) или [`<FemaleTextSqlQuery>`](#female_text_sql_query) (в зависимости от значения в поле "Sex").

\+ любые другие столбцы с произвольными именами переменных для замены, которые описаны в тэге [`<Variables>`](#variables) команды.

Текст sql-запроса поддерживает переменные типа {Parameter}, заменяемые при его выполнении значениями передаваемых клиентом параметров с соответствующими названиями.

### NormalizePhones <a href="#normalize_phones" id="normalize_phones"></a>

Способ, которым номера телефонов, полученные из поля Phone запроса PhonesSqlQuery, будут приводиться к нормальному виду перед отправкой в систему "СМС-Центр".

Необязательный тэг. Значение тэга `<NormalizePhones>`: не ожидается.

Если тэг `<NormalizePhones>` отсутствует, то для атрибута `Type` используется значение Full.

```xml
<NormalizePhones Type="Full" />
```

#### Атрибуты тэга `<NormalizePhones>` <a href="#attributes_tag_normalize_phones" id="attributes_tag_normalize_phones"></a>

<table data-header-hidden><thead><tr><th align="center"></th><th width="529.3333333333333"></th></tr></thead><tbody><tr><td align="center">Type</td><td><p>Тип нормализации.</p><p></p><p>Обязательный атрибут. Ожидается название одного из <a href="#normalize_phones_types">типов нормализации номеров телефонов</a>.</p></td></tr></tbody></table>

#### Типы нормализации номеров телефонов <a href="#normalize_phones_types" id="normalize_phones_types"></a>

<table data-header-hidden><thead><tr><th align="center"></th><th width="529.3333333333333"></th></tr></thead><tbody><tr><td align="center">None</td><td>Нормализация не выполняется</td></tr><tr><td align="center">Trim</td><td>Из телефона удаляются все символы, за исключением цифр</td></tr><tr><td align="center">Full</td><td>Из телефона удаляются все символы, за исключением цифр, в 11-значных номерах начальная 8-ка меняется на 7, в 10-значных в начало дописывается 7 (нормализация для российских номеров)</td></tr></tbody></table>

### Variables <a href="#variables" id="variables"></a>

Список переменных для замены в тексте сообщения. При отсутствии замен производиться не будет.

Необязательный тэг. Значение тэга `<Variables>`: список тэгов [`<Variable>`](#variables_variable).

```xml
<Variables>
  <Variable Name="VariableName" Value="[переменная]" />
</Variables>
```

#### Тэг `<Variable>` <a href="#variables_variable" id="variables_variable"></a>

Переменная для замены в тексте сообщения. В исходном сообщении все текстовые строки Value будут заменены на значения, полученные из поля Name запроса PhonesSqlQuery.

Обязательный тэг. Значение тэга `<Variable>`: не ожидается.&#x20;

#### Атрибуты тэга `<Variable>` <a href="#attributes_tag_variables_variable" id="attributes_tag_variables_variable"></a>

<table data-header-hidden><thead><tr><th align="center"></th><th width="529.3333333333333"></th></tr></thead><tbody><tr><td align="center">Name</td><td><p>Имя переменной для подстановки.</p><p></p><p>Обязательный атрибут. Ожидается название одного из полей, возвращаемых в запросе PhonesSqlQuery.</p></td></tr><tr><td align="center">Value</td><td><p>Текстовая строка, которая будет заменяться в исходном сообщении.</p><p></p><p>Необязательный атрибут. Значение атрибута <code>Value</code>: любое значение.</p></td></tr></tbody></table>

### TitleVariable <a href="#title_variable" id="title_variable"></a>

Текстовая строка, которая будет заменена в исходном тексте сообщения на имя адресата СМС. При отсутствии переменная заменяться не будет.

Необязательный тэг. Значение тэга `<TitleVariable>`: не ожидается.

```xml
<TitleVariable Value="[имя]" />
```

#### Атрибуты тэга `<TitleVariable>` <a href="#attributes_tag_title_variable" id="attributes_tag_title_variable"></a>

<table data-header-hidden><thead><tr><th align="center"></th><th width="529.3333333333333"></th></tr></thead><tbody><tr><td align="center">Value</td><td><p>Значение.</p><p></p><p>Обязательный атрибут. Значение атрибута <code>Value</code>: любое значение.</p></td></tr></tbody></table>

### CommonTextSqlQuery <a href="#common_text_sql_query" id="common_text_sql_query"></a>

Sql-запрос, возвращающий текст сообщения.

Обязательный тэг. Значение тэга `<CommonTextSqlQuery>`: тэг [`<Text>`](#common_text_sql_query_text).

```xml
<CommonTextSqlQuery>
  <Text>
    SELECT
    text_id AS "TextId",
    'Уважаемый, [имя]! Номер вашего заказа – [переменная]' AS "Text"
    FROM
    male_text
  </Text>
</CommonTextSqlQuery>
```

#### Тэг `<Text>` <a href="#common_text_sql_query_text" id="common_text_sql_query_text"></a>

Содержит sql-запрос.

Обязательный тэг. Значение тэга `<Text>`: текст sql-запроса.

Sql-запрос должен возвращать список полей со следующими заголовками (алиасами):

1. TextId (столбец обязателен только при истинном значении атрибута Value в тэге `<Multiple>`) - идентификатор отправляемого текста, на который будет ссылаться запрос из тэга [`<PhonesSqlQuery>`](#phones_sql_query).
2. Text - текст сообщения, возможно, содержащий текстовую строку TitleVariable, а также строки переменных, описанных в тэге [`<Variables>`](#variables) команды.

Текст sql-запроса поддерживает переменные типа {Parameter}, заменяемые при его выполнении значениями параметров с соответствующими названиями, передаваемых клиентом.

### MaleTextSqlQuery <a href="#male_text_sql_query" id="male_text_sql_query"></a>

Sql-запрос, возвращающий текст сообщения для лиц мужского пола.

Обязательный тэг. Значение тэга `<MaleTextSqlQuery>`: тэг [`<Text>`](#male_text_sql_query_text).

```xml
<MaleTextSqlQuery>
  <Text>
    SELECT
    text_id AS "TextId",
    'Уважаемый, [имя]! Номер вашего заказа – [переменная]' AS "Text"
    FROM
    male_text
  </Text>
</MaleTextSqlQuery>
```

#### Тэг `<Text>` <a href="#male_text_sql_query_text" id="male_text_sql_query_text"></a>

Содержит sql-запрос.

Обязательный тэг. Значение тэга `<Text>`: текст sql-запроса.

Sql-запрос должен возвращать список полей со следующими заголовками (алиасами):

1. TextId (столбец обязателен только при истинном значении атрибута Value в тэге `<Multiple>`) - идентификатор отправляемого текста, на который будет ссылаться запрос из тэга [`<PhonesSqlQuery>`](#phones_sql_query).
2. Text - текст сообщения, возможно, содержащий текстовую строку TitleVariable, а также строки переменных, описанных в тэге [`<Variables>`](#variables) команды.

Текст sql-запроса поддерживает переменные типа {Parameter}, заменяемые при его выполнении значениями параметров с соответствующими названиями, передаваемых клиентом.

### FemaleTextSqlQuery <a href="#female_text_sql_query" id="female_text_sql_query"></a>

Sql-запрос, возвращающий текст сообщения для лиц женского пола.

Обязательный тэг. Значение тэга \<FemaleTextSqlQuery>: тэг [`<Text>`](#female_text_sql_query_text).

```xml
<FemaleTextSqlQuery>
  <Text>
    SELECT
    text_id AS "TextId",
    'Уважаемая, [имя]! Номер вашего заказа – [переменная]' AS "Text"
    FROM
    female_text
  </Text>
</FemaleTextSqlQuery>
```

#### Тэг `<Text>` <a href="#female_text_sql_query_text" id="female_text_sql_query_text"></a>

Содержит sql-запрос.

Обязательный тэг. Значение тэга `<Text>`: текст sql-запроса.

Sql-запрос должен возвращать список полей со следующими заголовками (алиасами):

1. TextId (столбец обязателен только при истинном значении атрибута Value в тэге `<Multiple>`) - идентификатор отправляемого текста, на который будет ссылаться запрос из тэга [`<PhonesSqlQuery>`](#phones_sql_query).
2. Text - текст сообщения, возможно, содержащий текстовую строку TitleVariable, а также строки переменных, описанных в тэге [`<Variables>`](#variables) команды.

Текст sql-запроса поддерживает переменные типа {Parameter}, заменяемые при его выполнении значениями параметров с соответствующими названиями, передаваемых клиентом.

### PostSqlQuery <a href="#post_sql_query" id="post_sql_query"></a>

Sql-запрос, выполняющийся при успешной отправке каждого СМС.

Необязательный тэг. Значение тэга `<PostSqlQuery>`: тэг [`<Text>`](#post_sql_query_text).

```xml
<PostSqlQuery>
  <Text>
    UPDATE
    sms_phone
    SET
    message_id = {MessageId},
    text = {Text},
    sex = {Sex},
    cost = {Cost}
    WHERE
    sms_phone_id = {Id}
  </Text>
</PostSqlQuery>
```

#### Тэг `<Text>` <a href="#post_sql_query_text" id="post_sql_query_text"></a>

Содержит sql-запрос.

Обязательный тэг. Значение тэга `<Text>`: текст sql-запроса.

Sql-запрос должен возвращать список полей со следующими заголовками (алиасами):

Текст sql-запроса поддерживает переменные типа {Parameter}, заменяемые при его выполнении значениями параметров с соответствующими названиями, передаваемых клиентом.

Текст sql-запроса поддерживает переменную {MessageId}, заменяемые при его выполнении значением идентификатора СМС в системе "СМС-Центра".

Текст sql-запроса поддерживает переменную {Cost}, заменяемые при его выполнении значением стоимости отправки СМС в системе "СМС-Центра".

Текст sql-запроса поддерживает переменную {Id}, заменяемую при его выполнении значением, возвращенным для очередного телефона в запросе, указанном в тэге [`<PhonesSqlQuery>`](#phones_sql_query).

Текст sql-запроса поддерживает переменную {Text}, заменяемую при его выполнении значением текста, который был отправлен в СМС.

Текст sql-запроса поддерживает переменную {Sex}, заменяемую при его выполнении значением пола адресата СМС, указанном в тэге [`<PhonesSqlQuery>`](#phones_sql_query).

### UpdateStatusSqlQuery <a href="#update_status_sql_query" id="update_status_sql_query"></a>

Sql-запрос, выполняющийся после отправки всех сообщений с задержкой в 10 секунд после отправки последнего из них.

Необязательный тэг. Значение тэга `<UpdateStatusSqlQuery>`: тэг [`<Text>`](#update_status_sql_query_text).

```xml
<UpdateStatusSqlQuery>
  <Text>
    UPDATE
    sms_phone
    SET
    sms_status_id = {SMSStatusId}
    WHERE
    sms_phone_id = {Id}
  </Text>
</UpdateStatusSqlQuery>
```

#### Тэг `<Text>` <a href="#update_status_sql_query_text" id="update_status_sql_query_text"></a>

Содержит sql-запрос.

Обязательный тэг. Значение тэга `<Text>`: текст sql-запроса.

Sql-запрос должен возвращать список полей со следующими заголовками (алиасами):

Текст sql-запроса поддерживает переменные типа {Parameter}, заменяемые при его выполнении значениями параметров с соответствующими названиями, передаваемых клиентом.

Текст sql-запроса поддерживает переменную {SMSStatusId}, заменяемые при его выполнении значением статуса отправки в системе "СМС-Центра".

Текст sql-запроса поддерживает переменную {Id}, заменяемую при его выполнении значением, возвращенным для очередного телефона в запросе, указанном в тэге [`<PhonesSqlQuery>`](#phones_sql_query).

#### Возможные статусы отправки СМС в системе "СМС-Центр" <a href="#status_types" id="status_types"></a>

<table data-header-hidden><thead><tr><th align="center"></th><th width="529.3333333333333"></th></tr></thead><tbody><tr><td align="center">-1</td><td>Ожидает отправки оператору</td></tr><tr><td align="center">0</td><td>Передано оператору</td></tr><tr><td align="center">1</td><td>Доставлено</td></tr><tr><td align="center">3</td><td>Просрочено</td></tr><tr><td align="center">20</td><td>Невозможно доставить</td></tr><tr><td align="center">22</td><td>Неверный номер</td></tr><tr><td align="center">23</td><td>Запрещено</td></tr><tr><td align="center">24</td><td>Недостаточно средств</td></tr><tr><td align="center">25</td><td>Недоступный номер</td></tr></tbody></table>
