Расширяем границы взаимодействия

13 26

В последнее время стало много вопросов о возможности отправлять sms-сообщения из DIRECTUM. Данные вопросы мы уже несколько раз слышали от наших заказчиков, а так же эту тему затронули на недавно прошедшем партнерском форуме DIRECTUM. По-видимому, настало самое время для воплощения этого механизма в жизнь.

С конца прошлого года мы начали изучать интернет в поисках того, что сейчас предлагается и какие есть варианты для программной отправки sms. Существуют несколько вариантов: специальные программки и специализированные веб-сервисы, есть как платные так и бесплатные версии. Бесплатные варианты быстро отсеялись по причине того, что коммерческие предложения более профессиональны, стабильны и надежны.  На программках останавливаться мы не стали, т.к. решили реализовывать свой функционал в DIRECTUM. А на веб-сервисах остановимся по подробней.

Поисковики выдают большие списки сайтов на запрос "сервисы отправки смс". И все предоставляют услуги по отправке коротких сообщений. Немного они друг от друга отличаются, но все же принципы работы одинаковые:

Каждый веб-сервис предлагает свой протокол взаимодействия (API). В большинстве случаев это:

  • Через электронную почту (SMTP протокол).
  • Через Web (HTTP/HTTPS).
  • Через SMPP протокол.
  • Через SOAP протокол.

Немного детальней о взаимодействии:

  • Через почтовый протокол предусмотрено два варианта для отправки СМС. 
    - Первый, самый простой и самый негибкий вариант - отправка электронного письма на специальный адрес. Письмо формируется в максимально упрощенном варианте, например, номер телефона указывается в заголовке, а текст СМС пишется в теле письма.
    - Второй вариант более сложен, но очень гибок. В этом случае в теле письма нужно перечислить необходимые для отправки СМС параметры в определенном формате.
  • Отправка по протоколу HTTP(S) пользуется наибольшей популярностью. Для отправки СМС сообщения необходимо вызвать скрипт на сайте сервиса методом GET или POST с определенными параметрами. Одним вызовом скрипта можно отправить как одно, так и много сообщений. Варьируя параметры можно отправить практически любое СМС сообщение, включая сложные бинарные СМС.
  • Отправка по протоколу SMPP происходит согласно стандартному описанию протокола взаимодействия с SMS-сервером.

С каким именно сервисом предпочтете работать Вы, выбирать Вам. Возможно, у Вашего заказчика будут свои предпочтения или он уже сотрудничает с одним из них, тогда Вам нужно будет уточнить параметры формирования запросов к сервисам согласно его протокола взаимодействия.

Далее приложен пример реализации взаимодействия DIRECTUM 4.9.0 с сервисом SMSTraffic по варианту SMTP v2.

     

В материале представлен один из простых вариантов реализации функционала отправки sms-сообщений. Полнофункциональная версия уже разрабатывается нами и получит большой набор возможностей работы с короткими сообщениями: несколько вариантов протоколов взаимодействия с веб-сервисами и, вероятно, несколькими сервисами, интерфейсы для пользователей СЭД для ручной отправки sms, возможность массовых рассылок и уведомлений, обратная связь.

Систем-Консалт_SMS.rar (11,60 Кб)

Отредактировал Алексей Долгих, 03.03.2013 в 19:35
Алексей Долгих

Представленная версия хоть и является free, но многое может. Например, подменять номер отправителя или отправлять служебные смс, которые не сохраняются в телефоне получателя :)

Анатолий Придыбайло

Интересное решение!

Установить но не понятно чем заполнять константу SMSSendBySMTPConfig

Алексей Долгих

Анатолий, в константе SMSSendBySMTPConfig заполняются параметры для отправки писем по протоколу SMTP, фактически параметры учетной записи для отправки электронных писем.

Алексей Долгих

Она уже предзаполненна, только пароль скрыт, для примера вполне подойдет.

Анатолий Придыбайло
Она уже предзаполненна, только пароль скрыт, для примера вполне подойдет.

странно она у меня не заполнена

Алексей Долгих

Действительно странно, если не заполнена, тогда дополню примерами руководство.

Дмитрий Тарасов
Она уже предзаполненна, только пароль скрыт, для примера вполне подойдет.

У меня тоже не заполнена и чем её надо заполнять, непонятно.
 
в константе SMSSendBySMTPConfig заполняются параметры для отправки писем по протоколу SMTP, фактически параметры учетной записи для отправки электронных писем

А стандартные настройки почты, которые настраиваются в сценарии "Установки модулей системы DIRECTUM" не подойдут или тут имеется ввиду что-то другое? 
Денис Баранов

Алексей, рассмотрите в качестве развития решения реализацию собственного сервиса по отправке. Отправлять SMS через GSM-модем элементарно просто, я такую вещь еще в студенчестве писал. А то непонятно каким публичным веб-сервисам доверять не каждый готов. Неизвестно, не складируются ли они там где-нибудь вместе с номерами сотрудников. Помните, какая история с утечкой произошла не так давно?

Алексей Долгих

Дмитрий, стандартные настройки, в принципе, можно использовать, потребуется минимум изменений, но специально сделано так, чтобы были отдельные настройки для данных фунций.

Денис, спасибо за подсказку! Чесно говоря, мы обдумывали такой вариант, но почемуто записали к реализации не в первую очередь ) хотя надо бы пересмотреть вопрос, т.к. он возможно проще для контроля клиенту. А по сохранению контактов, на сколько нам известно, данный сервис не сохраняет переданную информацию. Есть возможность сохранять списки и прочее, но работая с веб-интерфейсом напрямую.

Михаил Сергеев

Коль пошла такая пьянка, вот тут недавно появился новый материальчик на эту тему.

Алексей Язынин
Коль пошла такая пьянка, вот тут недавно появился новый материальчик на эту тему.
Зачетная там керосинка!
Алексей Долгих

Дополнил Руководство образцами заполнения констант.

Анатолий Придыбайло

ошибочка, в сценарии Отправка SMS по SMTP (max) в строку 11 нужно изменить на

Action = Trim(SubString(Results; '|'; 6))

Дмитрий Тарасов

Кто-нибудь уже потестил данное решение в действии? Как ощущения? 

Анатолий Придыбайло

потестить не получается, сценарий пишет что все отправлено а на деле ничего не уходит, возможно с настройками почты у меня что-то не так...

Алексей Долгих

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

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

я так и делаю,

1. зарегился на SMSTraffic получил логи с паролем, указал их в константу SMSAccount.

2. заполнил константу SMSSendBySMTPConfig на основе вашего примера:

ServerType=SMTP;Server=smtp.mail.ru;Port=25;User=******@mail.ru;Password=*******

здесь возникает вопрос нужно указывать почту на которую регистрировался на сайте SMSTraffic или можно другую?

3. в функциях SMSQuickSendBySMTP и SMSSendBySMTP поменял почту

здесь тоже вопрос какую надо? любую или на которую регистрировал?

запускаю любой сценарий (Отправка SMS по SMTP или Отправка SMS по SMTP (max)) выходит окно сообщение отправлено, а смс не приходит!

Алексей Долгих

 

1. Ок.
2. Можно другую. В константе SMSSendBySMTPConfig заполняются параметры почтового ящика, с которого отправляется письмо с параметрами смс (например может быть Вашим рабочим).
3. Укажите почту из п.2
 
Причины по которым может не работать:
а. Письмо с параметрами не уходит.
б. На счете сервиса нулевой баланс и нет тестовых смс.
 
для проверки пункта а попробуйте выполнить сценарий:
  objMessage = CreateObject("CDO.Message")
  objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
  objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = 'smtp.mail.ru'
  objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
  objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
  objMessage.BodyPart.CharSet = 'windows-1251'
  objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
  objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = '******@mail.ru'
  objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = '*******'
  objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
  objMessage.Configuration.Fields.Update
  objMessage.From = '******@mail.ru'
  objMessage.To = '******@mail.ru'
  objMessage.TextBody = 'messageTEXTmsgtxt11'
  objMessage.Send
  objMessage = nil
// - должно отправить и придти письмо самому себе

 

Дмитрий Тарасов

А у меня получилось отправить СМС. Тестировал на DIRECTUM 4.8:

Отправка СМС

Получение СМС

Только непонятно почему сообщение транслитом пришло, в настройках я явно указал, что не надо этого делать.

Алексей Долгих

Описанные выше ошибки исправлены.

Дмитрий, спасибо за скрины результатов тестирования!

Алексей Долгих

Добрый день, Роман!

В данном материале имеется ссылка на скачивание бесплатной рабочей lite-версии описанного решения. Возможно Вы не зарегистрированы на данном сайте и ссылка Вам сейчас не отображается.

В финансовом вопросе, все затраты будут исходить только от количества отправляемых СМС. Бонус: При регистрации на СМС-сервисе предоставляется некоторое количество бесплатных СМСок.

Развернуть у себя данную разработку и зарегистрироваться на сервисе Вы можете самостоятельно. Если заинтересует, мы можем оказать услуги по настройке, доработке, консультированию. Для детального обсуждения пишите в приватные сообщения, либо на почту infosys-consultru.

Александр Пчелинов

Добрый вечер. Не получается импортировать компоненты запуска из папки Tokens. Пишет, что файл повреждён

Алексей Долгих

Ответили на почту.

Александр Сентюрин

А нет возможности подключения GSM-модемов? Там же нет ничего сложного, зачем кормить сервисы, если есть корпоративные тарифы?

Алексей Долгих

Александр, возможность есть. DIRECTUM позволяет использовать объектную модель других систем. Как вариант можно найти, разработать или купить специализированную внешнюю программу и использовать ее, пример с прошедшего Авордса http://club.directum.ru/post/Rasshirjaem-granicy-vzaimodejjstvija.aspx. Можно разработать собственный модуль, к сожалению наша разработка была приостановлена, но, думаю, найдутся умельцы и выпустят такой функционал в свет :)

Авторизуйтесь, чтобы написать комментарий