"Вам СМС от Террасофт" - часто приходится видеть такое у клиентов:smile:? Для нас это достаточно распространённая задача, поэтому решил описать, как мы ее решаем в реальных проектах. Вообще для отправки смс есть 2 технических подхода: использовать интернет-сервисы рассылок или установить локальный GSM-шлюз (таким шлюзом может выступать 3G-модем с соответствующим ПО). Сегодня мы рассмотрим первый вариант...

С точки зрения пользователя все просто – в разделы Контрагенты и Контакты добавляется кнопка «SMS», при нажатии на которую открывается окно для ввода текста сообщения:

Телефон Контрагента/Клиента подтягивается автоматически из средства связи с типом «Мобильный телефон». Естественно можно выбрать несколько Контрагентов/Контактов для отправки смс.
Чтобы вести учет отправленных смс, создан отдельный раздел, а для Контрагента/Контакта добавлена соответствующая деталь-запрос:

Теперь к тому, как это работает. Грузим сервисы с FTP, создаем раздел, кнопки, пишем обработчик нажатия кнопки:

function ShowSMSDialog(AccountOrContact) {

    var Attributes = GetNewDictionary();
    var DefaultValues = GetNewDictionary();

    DefaultValues.Add('SelectedIDs', grdData.SelectedIDs);
    DefaultValues.Add('Account_or_Contact', AccountOrContact);
    Attributes('NotifyObject') = Self;
    ShowEditWindowEx('wnd_SMS', Attributes, DefaultValues);
}

Непосредственно отправка выглядит так:
function SendAllSMS(Self, Text) {
    var SelectedIDs = GetArrayByCollection(GetDefaultValue(Self, 'SelectedIDs'));
    var AccountOrContact = GetArrayByCollection(GetDefaultValue(Self, 'Account_or_Contact'));
    var Phone = '';
    var SmsText;
    var count = SelectedIDs.length;
    var countOfFailedSMS = 0;
    var countOfSuccessSMS = 0;

    for (var i = 0; i SelectedIDs.length; i++) {
        Phone = GetMobilePhoneNumberFromAccount(AccountOrContact, SelectedIDs[i]);
        SmsText = Text;

        if (Phone != null)
            SendSmsSinglePhone(SmsText, Phone, SelectedIDs[i], AccountOrContact);
        else {
            SaveSMS(AccountOrContact, SelectedIDs[i], SmsText, false);
            countOfFailedSMS++;
        }

    }

    countOfSuccessSMS = (count - countOfFailedSMS);
    ShowInformationDialog("Отправлено SMS: " + countOfSuccessSMS + ' из ' + count);
}

Теперь нужно добавить параметр и фильтр Name в сервис sq_CommunicationType:

Также для настроек создается отдельный справочник:

В нем заполняются следующие поля:

Ну и наконец для отображения результатов рассылки нужно добавить справочник «Результаты: SMS» и деталь «SMS» с нужными колонками. Подробная инструкция также доступна на FTP.
Примерно также мы реализуем отправку смс в BPMonline, так что не вижу смысла отдельно писать пост по отправке смс оттуда.

Нравится

Поделиться

1 комментарий

Спасибо Александру за очередное расширение 3.Х. Очень нужная и востребованная вещь в жизни и в программе.

Показать все комментарии