пятница, 29 июля 2011 г.

SMS и SharePoint

Уже больше года назад, мы писали на работе очень интересное решение, которое впоследствии вошло в состав нашего портала DeskWork - по отсылке оповещений, в том числе SMS. И вот в который раз убеждаюсь, насколько важно изучать SharePoint и его внутренности, потому что ценой минимальных усилий, оказывается, можно было бы глубоко сынтегрировать ту систему SMS-рассылок с SharePoint, получив массу вкусных бонусов (а может быть, мы это еще сделаем в будущем).

Я имею в виду встроенную в SharePoint возможность отсылать SMS и даже MMS по протоколу Office Mobile Service Protocol. Протокол вполне продуманный: предусмотрена пакетная отправка сообщений и интерфейс для получения статусов доставки... В этом посте я расскажу, как можно этот самый OMS использовать в своих решениях, и какие бонусы можно получить.

Office Mobile Service в SharePoint

Как вы знаете, в SharePoint есть такая распространенная кнопочка "Alert Me", которая позволяет настраивать оповещения об изменении элементов списков или файлов в библиотеках документов. Также, подписываться можно не на конкретные элементы, а на целые списки. Это делается централизованно, через User Settings => My Alerts.


После выбора, на какой список мы хотим подписаться, или на какой элемент списка - отображается большая форма настроек, среди которых есть интересный пункт Delivery Methods.


Ага, вот они, наши SMS! Но по умолчанию, они задисейблены. Чтобы настроить их, переходим на сайт Central Administration, выбираем System Settings => Configure mobile account:


Здесь нам предложат ввести адрес веб-сервиса и логин-пароль.


Что вводить!? Во-первых, можно создать собственный такой веб-сервис, который бы принимал данные в формате OMS, и затем использовал любой другой сервис по отсылке SMS-ок. Также, свой сервис можно заставить рассылать и напрямую, через GSM Gate.

Процедура создания собственного веб-сервиса подробно описана на MSDN.

Но конечно же, писать целый веб-сервис совсем необязательно. Есть большое число SMS-провайдеров, которые уже прекрасно понимают OMS-протокол и готовы для использования. Список их представлен на сайте Microsoft.

Office Mobile Service в Outlook

OMS-вебсервис, если его всё-таки написать, можно использовать не только в SharePoint, но и в Microsoft Office Outlook.



Если настроить Outlook на OMS-сервис, мы получаем возможность отсылать текстовые сообщения (есть даже Preview, как это будет выглядеть на среднем мобильном телефоне); плюс есть возможность отсылать оповещения о событиях календаря на телефон.

Объектная модель для отсылки SMS

Также, в SharePoint есть возможность самостоятельно отсылать SMS-ки через объектную модель... Простой вариант кода будет выглядеть примерно так:

// Берем аккаунт из настроек веб-приложения, и получаем инстанс OMS веб-сервиса
SPMobileMessagingAccount account = webApp.OutboundSmsServiceAccount;
SPMobileMessageWebService messagingWebService = new SPMobileMessageWebService(account);

// Формируем сообщение
SPMobileMessageSmsBuilder smsBuilder = new SPMobileMessageSmsBuilder(account);

// Получатели
smsBuilder.AddRecipient(mobile_telephone_number);

// Разбиваем текст на фрагменты по 132 символа (размер одной SMS)
smsBuilder.StartTextMessage();
List<StringBuilder> messageParts = SplitLongMessage(message)
foreach (StringBuilder chunk in messageParts)
{
    smsBuilder.AddChunk(chunk.ToString());
}
smsBuilder.EndTextMessage();

// At this point, the smsBuilder.Message property holds the message as an SPMobileSmsMessage object.
String messageXml = smsBuilder.GetMessageXml();

// Отсылаем
SPMobileMessageDeliveryReport report = messagingWebService.SendMessage(messageXml);

Всё довольно прозрачно, документация по классам доступна на MSDN.

Код взят из статьи Overview of Mobile Messaging Development, там же вы можете посмотреть подробности и некоторые более сложные случаи (в частности, пакетную отправку).

Выводы

Итак, если мы хотим создать собственное решение для отправки SMS, нам в любом случае придется реализовывать сервис для отправки, и некий интерфейс для обращения к этому сервису. Причем, в любом случае для взаимодействия между сервисом и интерфейсом будет использоваться какой-то протокол или промежуточное хранилище данных. Если вовремя это понять и использовать протокол OMSP, то получим следующие бонусы:
  1. Клиенты смогут использовать ваш сервис не только в SharePoint, но и в Outlook.
  2. Клиенты смогут использовать ваш сервис для отсылки оповещений об изменениях в списках (My Alerts).
  3. Есть сторонние решения, которые также рассчитаны на использование OMS - вы имеете отличный шанс получить небольшую денежку за каждую отправленную их решениями смску!
  4. Клиент всегда может сменить провайдера, использовав вместо вашего сервиса - чужой, что многократно повышает географическую актуальность решения. К примеру, вы заключили договор с неким провайдером, который умеет отправлять SMS только по России. Но продукт продается и за рубежом...
В общем, на мой взгляд, OMS - это первое, на что должен посмотреть разработчик, который хочет внедрить в свое решение возможность отправки SMS.

9 комментариев:

  1. Подскажите в чем может быть проблема?
    На строчке:
    SPMobileMessageSmsBuilder smsBuilder = new SPMobileMessageSmsBuilder(account)
    выдает ошибку, что поставщик не поддерживает отправку смс. Хотя если поставить оповещения для списка, то смс уходит без проблем. Использую сервис http://smsofficer.com/

    ОтветитьУдалить
  2. Уфф... Разобрался... Надо было до этого написать:
    account.UpdateServiceProvider();
    Так все заработало.

    ОтветитьУдалить
  3. На сайте MS нашел провайдера http://smsofficer.com/ который дает 10 смс бесплатно для тестирования.
    Зарегистрировался, подключил Outlook - все прекрасно работает.

    Взялся настраивать SPF2010: не проходило тестовое подключение. Где-то вычитал, что нужно взять сертификат sms-провайдера и объяснить SPF'у, что это нормальный сертификат (он самозаверенный). Сделал. Тестовое подключение стало завершаться успешно. Но по настроенным событиям (любое изменение списка, например), на телефон ничего не приходило.

    Номер указывал в формате +7(xxx)xxxxxxx - пробовал по-разному, с пробелами, без пробелов и скобок. Все равно не работает. А где причину искать?

    Буду признателен за помощь :)

    ОтветитьУдалить
    Ответы
    1. Такая же проблема, настроил мобильную УЗ на ферме. Служба тестирования прошла успешно.
      Сделал оповещение списка при любом изменении, но сообщения не приходят.

      Удалить
  4. Добрый день, Андрей. Я не являюсь профессионалом SharePoint. Работаю в отделе ИТ, внедряю DeskWork. Возник вот такой вопрос. В DW имеется функционал для отправки СМС-сообщений через своего провайдера, но, как оказалось, только для модуля заявок и для задач документооборота. Но мне нужно настроить СМС-оповещения в созданных мной списках. Как мне пояснили в техподдержке, это мне придется настраивать через другого провайдера и предложили обратиться в Microsoft. Это на самом деле так? Почему нельзя все оповещения настроить на одного собственного провайдера DW? Здесь важен еще вопрос с оплатой пакетов СМС: возможен только безналичный расчет с оформлением соответствующих документов.

    ОтветитьУдалить
    Ответы
    1. Боюсь, что на текущий момент система отправки SMS, которая реализована в DeskWork, не поддерживает протокол Office Mobile Protocol, и соответственно вместе со стандартными оповещениями использоваться не может.

      Однако, есть немало провайдеров, в том числе в России, которые могут предоставить возможность отправки SMS из SharePoint и Outlook. Например, быстрый поиск в гугле меня привел к следующим двум сайтам: SMSOfficer.com и SMSOutlook.ru. Сам я ими не пользовался, но должно работать. Например, есть статья про настройку Outlook 2007 на использование SMSOfficer на Компьютерре. Если эти не устроят, поищите другие, на взгляд их довольно много.

      Удалить
    2. Спасибо. Но тогда предлагаю Вам, как разработчику DeskWork, все-таки доработать функционал, чтобы система настройки оповещений была универсальной. Я думаю, что не у меня одной возникла такая проблема.

      Удалить
    3. Jannet, я рядовой разработчик DeskWork, а никак не руководитель отдела или департамента, и очень ограниченно могу влиять на то, что будет дорабатываться, а что нет.

      Своему непосредственному руководителю я, конечно, покажу это обсуждение, но большего сделать не могу.

      Я думаю, вы имеете даже немного больший шанс на это повлиять, отправив пожелание через своего менеджера или через службу техподдержки :)

      Удалить
  5. А как можно менять содержание смс?

    ОтветитьУдалить

Внимание! Реклама и прочий спам будут беспощадно удаляться.