Отправка СМС по протоколу SMPP через МЕГАФОН или через веб-сервис МТС (8.3 обычное приложение) Добавлено: отправка СМС мегафон по http


Конфигурация предназначена для отправки СМС по протоколу SMPP, напрямую, через МЕГАФОН.
Также в конфигурации есть отправка СМС через веб-сервис МТС.
Добавлено: отправка СМС мегафон по http

Инструкция по настройке:

  • МТС
  1. В справочнике «СервисыSMSрассылки» заполняем пользователя и пароль (пароль должен быть в формате MD5) полученные от оператора.
  2. Далее заполняем документ «SMSРассылка»
  3. Настраиваем регламентное задание «ОбработкаSMSСообщений»

Вот в принципе и все. С мегафоном сложнее… т.к. используется протокол SMPP, единственное, что я нашел для работы с 1С, это компонента WinSock.

  • МЕГАФОН
  1. В справочнике «СервисыSMSрассылки» заполняем пользователя, пароль, ip, и порт.
  2. Регистрируем компоненту WinSock. 
  3. В обработке «РассылкаSMSМегафон» необходимо поправить имя отправителя в функции сбора пакета Submit_sm.
  4. Заполняем документ «SMSРассылка»
  5. Настраиваем регламентное задание «ОбработкаSMSСообщений»
  • Регистрация компоненты WinSock:
  • Если регистрируем локально, тогда кидаем ее

C:WindowsSysWOW64 и в «Выполнить» прописываем regsvr32 “путь к файлу”, если на сервере, то см. ниже.

  • Регистрация на сервере. Компонента старая x32, поэтому, чтобы она работала на сервере x64, необходимо проделать следующее:
  1. Запускаем консоль «Службы компонентов» (Пуск ->Администрирование->Службы компонентов)
  2. В ветке «Приложения COM+» добавлем новое приложение. Правой кнопкой Создать -> Приложение
  3. Выбираем «Создать новое приложение»
  4. Имя задаем MSWinsockWinsock1, способ активации «серверное приложение»
  5. Учетную запись выбираем, под которой стартует сервер 1С
  6. В ветке созданного приложения переходим на ветку «Роли» открываем роль «CreatorOwner» и далее в разделе «Пользователи» создаем пользователя — учетную запись под которой работает сервер 1С.
  7. В ветке созданного приложения переходим на ветку «Компоненты» и создаем компонент.
  8. Выбираем «Установка новых компонентов», и в диалоге выбираем нужную компоненту (тип файла «все файлы»)
  9. Открываем свойства только что созданного компонента, идем на вкладку «Безопасность», проверяем в списке «Явно установленные для выделенных объектов роли» стоит ли галка напротив роль CreatorOwner — если нет, тогда устанавливаем ее.

При написании конфигурации очень помогли статьи //infostart.ru/public/319296/ и //infostart.ru/public/297040/ за что автору огромное спасибо.

Основное отличие  данный конфигурации это возможность отправки длинных сообщений с использованием UDH  и использование регламентного задания.

В архиве конфигурация, описание протокола SMPP и компонента WinSock.

Пишите вопросы в комментариях, рад буду помочь.

UPD 01.06.2024: Улучшена стабильность обработки(добавлена обработка некоторых ошибок — если номер кривой), добавлена обработка отчетов о доставке, переделана запись id сообщения.

UPD 10.08.2024: У мегафона появилась возможность отправки СМС по протоколу HTTP, для работы с HTTP необходимо запросить у мегафона Логин и пароль и чтобы ваш внешний ip они добавили в

разрешенные.

Для получения отчетов о доставке необходимо создать свой http сервис с методом POST.

Код получения отчета:

Функция ЗаписатьОповещениеСМС(Запрос)
Тело = Запрос.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);

ЗаписьЖурналаРегистрации("Отчет о доставке",УровеньЖурналаРегистрации.Информация,Метаданные.HTTPСервисы.API,,Тело);

Ответ = Новый HTTPСервисОтвет(200);
Возврат Ответ;
КонецФункции

Формат отчета о доставке JSON:

{«status»:»delivered»,»short_message»:»id:250046790892422 sub:001 dlvrd:001 submit date:1708100950 done date:1708100950 stat:DELIVRD err:0 text:»,»receipted_message_id»:»250046790892422″,»msg_id»:»571ehnhuvq4l960v»}

49 Comments

  1. BaHgaJI

    Всего одно скачивание, ну не серьезно ребят) Я так старался, так старался)

    Reply
  2. BaHgaJI

    Если кому надо могу выложить с обработкой отчетов о доставке мегафоновских смс,

    Reply
  3. php5

    Классная вещь, спасибо, пригодилось мне в работе!

    Reply
  4. BaHgaJI

    (4) php5, Пожалуйста, это моя работа, кто-то должен!

    Reply
  5. Prooa

    Здравствуйте, ни как не могу зарегистрировать на Windows7x64. Создаю приложение потом компоненту, выбираю файл, винда пишет что есть такая и не ставит компоненту, а при мWinSocketActiveX = Новый COMОбъект(«MSWinsock.Winsock.1»); выдает исключение, что и пропустил не подскажите? Очень нужно

    Reply
  6. Prooa

    (6) Prooa, зарегистрировал, но смс не отправляет, в режиме отладки видно что срабатывает только «//пришел пакет ENQUIRE_LINK» и все, что не так

    Reply
  7. BaHgaJI

    п(7) Prooa, проверьте пользователя и пароль

    Reply
  8. BaHgaJI

    (7) Prooa, ENQUIRE_LINK_RESP отправляете?

    Reply
  9. BaHgaJI

    (7) Prooa, или скачайте http://infostart.ru/public/393308/ там более наглядно, что приходит, что уходит

    Reply
  10. Prooa

    Скачал обработку все работает, а с вашей конфы не хочет

    Reply
  11. BaHgaJI

    (11) Prooa, походу только у вас не работает.

    скорее всего не правильное значение МатрицаДанных.SetValue(7, 4); //command_id 4=submit_sm submit_multi=21

    Reply
  12. BaHgaJI

    (11) Prooa, и еще с этими данными надо поиграть, они тоже часто разные у всех бывают

    МатрицаДанных.SetValue(17, 5); //source_addr_ton

    МатрицаДанных.SetValue(18, 0); //source_addr_npi

    Reply
  13. BaHgaJI

    (11) Prooa, нашел в чем могла быть проблема.

    в submit_sm_resp иногда приходит пакет с ошибкой если оператор по какой то причине не может отправить смс.

    Добавьте в процедуру ОбработатьПакет_submit_sm_resp

    КодОшибки = ВходящийПакет.GetValue(11);

    Если КодОшибки <> 0 Тогда

    ЗаписатьНовыйСтатусСМС(«ошибка отправки»);

    Возврат;

    КонецЕсли;

    Reply
  14. nikolayvg

    Здравствуйте. При установке компоненты на сервер 2008 R2 Standart возникла проблема в пункте

    8. Выбираем «Установка новых компонентов», и в диалоге выбираем нужную компоненту (тип файла «все файлы»).

    все выбираю, но компонента в списке не появляется. Что может быть не так?

    Reply
  15. BaHgaJI

    (15) nikolayvg, точно выбираете тип файла «Все файлы(*.*)» т.к. если файл в папке то он по-любому будет виден. Или в службе компонентов не появляется? Если в службе компонентов, то попробуйте любую другую компоненту добавить, а потом компоненту винсок, должна появиться.

    Reply
  16. nikolayvg

    (15) nikolayvg, На всякий случай для остальных:

    Воспользовался советом из http://infostart.ru/public/319296/ и установил Visual Basic

    Reply
  17. BaHgaJI

    Если приходит ошибка 88 (0x65) надо добавить задерку при отправке смс, примерно 5 смс в секунду

    Reply
  18. Bayker

    Добрый день, заключили договор с мегафоном, прислал вот это:

    1. IP-адрес крипто-сервера

    2. IP-адрес SMPP ESME

    3. IP-адрес крипто-сервера УФ ОАО «МегаФон»

    4. IP-адрес SMS-центра УФ ОАО «МегаФон»

    5. Ключ isakmp

    6. transform-set:

    7. PFS:

    8. Isakmp policy

    От дальнейшей помощи категорически отказывается, будет ли Ваша разработка работать с Тюменским мегафоном (если там вообще есть различия)?

    Reply
  19. BaHgaJI

    (19) Bayker, не могу сказать, по идее если по протоколу SMPP то отличий никаких не должно быть

    Reply
  20. SGordon1

    Обновление лежит отдельно , не в архиве?

    Reply
  21. BaHgaJI

    (21) SGordon1, да

    Reply
  22. flord

    Никто не сталкивался с такой ситуацией. После отправки команды Bind_transceiver компонента переходит в состояние State = 8 (клиент закрыл подключение)?

    Reply
  23. BaHgaJI

    (23) flord, значит ошибка в этом пакете, проверьте логин и пароль, он чувствителен к реестру. Лучше конечно узнать у оператора, что к ним приходит и в чем ошибка.

    Reply
  24. flord
    Reply
  25. BaHgaJI

    (25) flord, упоминания нет, потому что скорее всего Bind_transceiver кривой, скиньте как вы его переделали…

    Reply
  26. flord
    Reply
  27. BaHgaJI

    (27) flord, ну мой совет поставить после пароля

    Матрица.SetValue(29,0);

    Матрица.SetValue(30,0);

    Матрица.SetValue(31,0);

    Матрица.SetValue(32,0);

    Матрица.SetValue(33,52);

    Матрица.SetValue(34,1);

    Матрица.SetValue(35,1);

    Матрица.SetValue(36,0);

    Там где циферки слева соотвественно ваш индекс.

    Просто эти значения четко подобраны и менять их не стоит.

    Reply
  28. BaHgaJI

    (27) flord, так же у вас не верно Матрица.SetValue(Индекс, КодСимвола(interface_version));//interface_version = 4 (версия 4 = 3.4)

    Должно быть так interface_version 0x34 = 52

    Reply
  29. BaHgaJI

    (27) flord, и вот эти должны быть = 1

    addr_ton = 0;

    addr_npi = 0;

    Reply
  30. flord

    Если оставить так – то «съедаются» последние несколько символов пароля.

    Если смотреть описание pdu из описания протокола

    Матрица.SetValue(32,0); это system_тип

    Матрица.SetValue(33,52); это interface_version

    Матрица.SetValue(34,1); это addr_ton

    Матрица.SetValue(35,1); это addr_npi

    Матрица.SetValue(36,0); это address_range

    Я прав?

    А за что отвечают эти значения, не подскажете?:

    Матрица.SetValue(29,0);

    Матрица.SetValue(30,0);

    Матрица.SetValue(31,0);

    Reply
  31. BaHgaJI
    Reply
  32. flord

    (32) Выяснилось, что по нашему заключенному договору с Мегафоном в этой системе Bind_transceiver не поддерживается

    (Либо у Мегафона в принципе не поддерживается Bind_transceiver).

    Работает Bind_transmitter.

    A PDU на запрос BIND был правильным – изменил команду и заработало.

    Спасибо за помощь!

    Reply
  33. BaHgaJI

    (33) flord, Вот оно че, у нас мегафон на Bind_transceiver работает

    Reply
  34. Revolver_61

    Подскажите, что означает ошибка «Код Ошибки Постоянного Приложения Приемника ESME (ESME Receiver Permanent App Error Code)» ?

    Приходит в пакете submit_sm_resp

    Reply
  35. BaHgaJI

    (35) Revolver_61,

    1. неверные параметры в отправленном submit_sm.

    2. от smsc других регионов и операторов пришел ответ о невозможности принять смс по разным причинам.

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

    Reply
  36. BaHgaJI

    (35) Revolver_61, часто эта ошибка приходит если отправляется смс на городской номер

    Reply
  37. Tanis

    Доброго времени!

    Подскажите как именно работает с МТС? Обработку пока не скачивал.

    В описании сказано. что вводится логин и пароль (МД5). Эти «учетки» просто пользователя (своего личного) или после договора компании с МТС о доставке смс?

    По какому шлюзу обмен идет?

    Спасибо!

    Reply
  38. BaHgaJI

    Добрый день! Договор с МТС нужен, у них есть апи по SOAP. (веб сервис). В моей конфигурации пример этого веб-сервиса, в принципе самому там не сложно настроить.

    Reply
  39. real_alexasha

    Здравствуйте!

    Без создания регламентных заданий, обработка РассылкаSMSМегафон отправляет сообщения?

    Reply
  40. BaHgaJI

    (40) Добрый день!

    Конечно

    Reply
  41. cyborg55

    Добрый день. Пытаюсь отправить через мтс. Не получается. Как мне получить пароль в формате MD5? Это мне мтс должен в таком формате предоставить?

    Reply
  42. BaHgaJI

    (42) нет, мтс предоставляет в обычном формате, в мд5 на любом сайте конквертните, например http://decodeit.ru/md5

    Reply
  43. Spakus

    Здравствуйте.

    Скачал конфигурацию, пытаюсь отправить СМС через МТС.

    При запуске регламентного задания вываливается ошибка (см. скриншот) в функции «ПолучитьСтатистику» при вызове метода «GetStatistics».

    В чем ошибка?

    Reply
  44. BaHgaJI

    (44) В конфигураторе удалите ws ссылку и добавьте заново такую же.

    Reply
  45. ooki

    Здравствуйте, BaHgaJI. Спасибо за обработку. Пытаюсь настроить. Пакет bind_transceiver уходит, bind_transceiver_resp прилетает, тут все ок. Дальше отправляем submit_sm. В итоге submit_sm_resp возвращается с кодом ошибки 1 — Invalid Message Length (sm_length parameter). Хотя параметр sm_length не менялся при настройке submit_sm.

    МассивКодовРусскихБукв  = ЗакодироватьРусскийТекст(СообщениеТекст);
    ДлинаСообщения         = МассивКодовРусскихБукв.Количество();
    
    ……………………….. (часть кода заполнения первой части матрицы)
    
    Индекс = 28;
    Для  НомерСтроки = 1 По ДлинаНомераТелефона Цикл
    МатрицаДанных.SetValue(Индекс,КодСимвола(НомерТелефона,НомерСтроки));
    Индекс = Индекс+1;
    КонецЦикла;
    
    МатрицаДанных.SetValue(39, 0);
    МатрицаДанных.SetValue(40, 0); //esm_class
    
    МатрицаДанных.SetValue(41, 0); //protocol_id
    МатрицаДанных.SetValue(42, 0); //priority_flag
    
    МатрицаДанных.SetValue(43, 0);  //schedule_delivery_time
    
    МатрицаДанных.SetValue(44, 0);  //validity_period
    
    
    МатрицаДанных.SetValue(45, 0);   //registered_delivery //sa! 1
    МатрицаДанных.SetValue(46, 0);   //replace_if_present_flag
    МатрицаДанных.SetValue(47, DataCod);//data coding
    МатрицаДанных.SetValue(48, 0); //sm_default_msg_id
    
    МатрицаДанных.SetValue(49, ДлинаСообщения);   //sm_length
    
    Индекс = 50;          //short_message
    
    Для  НомерСтроки = 0 По ДлинаСообщения-1 Цикл
    СимВ = МассивКодовРусскихБукв[НомерСтроки];
    МатрицаДанных.SetValue(Индекс,СимВ);
    Индекс = Индекс+1;
    КонецЦикла;

    Показать

    Помогите, пожалуйста, разобраться, в чем может быть ошибка?

    Reply
  46. doctorov_s

    Добрый день! А подскажите пожалуйста в обработке отправка через мегафон там сделана сразу с отчетом о доставке??

    Reply
  47. doctorov_s

    интересует отправка через HHTP

    Reply
  48. doctorov_s

    (2)Да если можно, выложи плиз!

    Reply
  49. amatisol

    Ни у кого нет такой же обработки под УФ, интересует только как организовать отправку через smpp, вообще реально прикрутить это дело, если у кого есть буду благодарен если пришлете, спасибо

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *