|
Смс Рассылка с 1с 8.1 | ☑ | ||
---|---|---|---|---|
0
Gadin_V
08.11.13
✎
10:44
|
делаю смс рассылку по данному методу первый раз, раньше с этим не сталкивался,делаю как внешнюю обработку постоянно выдает ошибку на
СМСХмл.НачатьПодготовку("data"); или на СМСХмл.ДобавитьНоду("login", Логин, "", ""); Перем СМСХмл; Перем КаталогБазы Экспорт; Функция КаталогБазы() Экспорт Стр=СтрокаСоединенияИнформационнойБазы(); Возврат(Сред(Стр,7,СтрДлина(Стр)-8)+"\"); КонецФункции //Блок работы с СМС Процедура ПодготовитьСМСХмл() Логин="aaa"; Пароль="sss"; СМСХмл.НачатьПодготовку("data"); СМСХмл.ДобавитьНоду("login", Логин, "", ""); СМСХмл.ДобавитьНоду("password", Пароль, "", ""); СМСХмл.ДобавитьНоду("app", "1C", "", ""); КонецПроцедуры Функция СоздатьСМСХмл() Экспорт Файл=Новый Файл(ЭтотОбъект.ИспользуемоеИмяФайла); Попытка ЗагрузитьВнешнююКомпоненту(КаталогБазы+"SMSXml.dll"); СМСХмл = Новый("Addin.SMSXml"); Исключение Сообщить("Внешняя компонента SMSXml.dll не загружена. "+ОписаниеОшибки()); СМСХмл=""; Возврат (Неопределено); КонецПопытки; ПодготовитьСМСХмл(); Возврат(СМСХмл); КонецФункции Функция ЗапросБалансаСМС() Экспорт ПодготовитьСМСХмл(); Рез=СМСХмл.Пост("https://transport.sms-pager.com:7214/balance.xml"); Если Рез<>"1" тогда //Если СМСХмл.Пост("https://transport.sms-pager.com:7214/balance.xml")<>"1" тогда Сообщить("Ошибка при передаче запроса"); Возврат(""); КонецЕсли; Если СМСХмл.ПолучитьНоду("code","")="1" тогда Возврат(СМСХмл.ПолучитьНоду("account","")); КонецЕсли; Сообщить(СМСХмл.ПолучитьНоду("descr","")); Возврат(""); КонецФункции Функция ОтчетСМС(НачПериода='00010101000000', КонПериода='00010101000000') Экспорт Если НачПериода > КонПериода тогда Сообщить("Ошибка. Начало периода больше конца периода"); Возврат(Неопределено); КонецЕсли; ПодготовитьСМСХмл(); Если ЗначениеЗаполнено(НачПериода) или ЗначениеЗаполнено(КонПериода) тогда СМСХмл.ДобавитьНоду("start",Формат(НачПериода,"ДФ='yyyy-MM-dd'"),"",""); СМСХмл.ДобавитьНоду("stop",Формат(КонПериода,"ДФ='yyyy-MM-dd'"),"",""); КонецЕсли; Если СМСХмл.Пост("https://transport.sms-pager.com:7214/report.xml")<>"1" тогда Сообщить("Ошибка при передаче"); Возврат(Неопределено); КонецЕсли; Если СМСХмл.ПолучитьНоду("code","")<>"1" тогда Сообщить(СМСХмл.ПолучитьНоду("descr","")); Возврат(Неопределено); КонецЕсли; Если СМСХмл.ЗадатьРодительскуюНоду("data")<>"1" тогда Сообщить("Пришел не тот ответ, родительская нода не найдена"); Возврат(Неопределено); КонецЕсли; //Готовим список рассылок ТЗ = новый ТаблицаЗначений; ТЗ.Колонки.Добавить("ДатаВремя",,"Дата / Время",15); ТЗ.Колонки.Добавить("Всего",,"Всего СМС",6); ТЗ.Колонки.Добавить("Доставлено",,"Доставлено",6); ТЗ.Колонки.Добавить("НЕДоставлено",,"Не Доставлено",6); ТЗ.Колонки.Добавить("ВОжидании",,"Ожидание",6); ТЗ.Колонки.Добавить("Вочереди",,"Очередь",6); ТЗ.Колонки.Добавить("Текст",,"Текст СМС",100); ТЗ.Колонки.Добавить("ИД",,,1); Для Сч=0 по СМСХмл.КоличествоДетей-1 цикл ИмяН = СМСХмл.ЗадатьДочернююНоду(Сч,""); Если ИмяН="sms" тогда СтрТЗ = тз.Добавить(); СтрТЗ.ДатаВремя = СМСХмл.ПолучитьДочернююНоду("datetime","",-1); СтрТЗ.ИД = СМСХмл.ПолучитьДочернююНоду("smsid","",-1); СтрТЗ.Текст = СМСХмл.ПолучитьДочернююНоду("text","",-1); СтрТЗ.Всего = СМСХмл.ПолучитьДочернююНоду("allCol","",-1); СтрТЗ.Доставлено = СМСХмл.ПолучитьДочернююНоду("deliveredCol","",-1); СтрТЗ.НЕДоставлено = СМСХмл.ПолучитьДочернююНоду("notDeliveredCol","",-1); СтрТЗ.ВОжидании = СМСХмл.ПолучитьДочернююНоду("waitingCol","",-1); СтрТЗ.Вочереди = СМСХмл.ПолучитьДочернююНоду("enqueuedCol","",-1); КонецЕсли; КонецЦикла; СтрТЗ=ТЗ.ВыбратьСтроку("Для получения подробной информации - выберите рассылку"); Если СтрТЗ=Неопределено Тогда Возврат(ТЗ); КонецЕсли; //Готовим детали по выбранной рассылке //тут нужна повторная инициализация ПодготовитьСМСХмл(); Рез=СМСХмл.ДобавитьНоду("smsid", СтрТЗ.ИД,"",""); Рез = СМСХмл.Пост("https://transport.sms-pager.com:7214/report.xml"); Если Рез<>"1" тогда Сообщить("Произошла ошибка при передаче"); Возврат(Неопределено); КонецЕсли; Если СМСХмл.ПолучитьНоду("code","")<>"1" тогда Сообщить("Ошибка="+СМСХмл.ПолучитьНоду("descr","")); Возврат(Неопределено); КонецЕсли; //Переводы СЗРус = Новый СписокЗначений; СЗРус.Добавить("delivered","Доставлено:"); СЗРус.Добавить("notDelivered","Не доставлено:"); СЗРус.Добавить("waiting","В ожидании:"); СЗРус.Добавить("enqueued","В очереди:"); СЗРус.Добавить("cancel","Прекращено:"); СЗРус.Добавить("onModer","На модерации:"); СЗ = Новый СписокЗначений; СМСХмл.ЗадатьРодительскуюНоду("data"); Для К=0 По СМСХмл.КоличествоДетей-1 Цикл Если СМСХмл.ЗадатьДочернююНоду(К,"")<>"detail" тогда Продолжить; КонецЕсли; Для Л=0 по СМСХмл.КоличествоДетей1-1 цикл Рез = СМСХмл.ЗадатьДочернююНоду1(Л,""); Представление=СЗРус.НайтиПоЗначению(Рез); Если Представление=Неопределено тогда Представление=Рез; КонецЕсли; СтрСЗ = СЗ.Добавить(Представление); Для М=0 По СМСХмл.КоличествоДетей2-1 Цикл СтрСЗ = СЗ.Добавить(СМСХмл.ПолучитьДочернююНоду1(М,"")); КонецЦикла; КонецЦикла; КонецЦикла; СЗ.ВыбратьЭлемент(); КонецФункции Функция ОтослатьСМС(СЗ, ДатаОтправки='00010101000000', ОплатаТолькоЗаДоставленные=Ложь, Спрашивать=Ложь) Экспорт Подпись="ddd"; ПодготовитьСМСХмл(); СМСХмл.ДобавитьНоду("source",Подпись,"",""); СМСХмл.ДобавитьНоду("onlydelivery",?(ОплатаТолькоЗаДоставленные,"1","0"),"",""); Если ЗначениеЗаполнено(ДатаОтправки) тогда СМСХмл.ДобавитьНоду("datetime",Формат(ДатаОтправки,"ДФ='yyyy-MM-dd HH:mm:ss'"),"",""); КонецЕсли; //Формируем телефоны и текст Для Каждого СтрСЗ Из СЗ Цикл Для Каждого Тел Из СтрСЗ.Значение Цикл СМСХмл.ДобавитьНоду("to",СтрСЗ.Представление,"number",Тел.Значение); КонецЦикла; КонецЦикла; //Если нужно спрашивать, то выводим инфу по количеству и цене рассылки Если Спрашивать тогда Если Не Отсылать(СМСХмл) тогда Сообщить("Оператор отказался от рассылки"); Возврат (Ложь); КонецЕсли; КонецЕсли; //Отсылаем СМСХмл.ДобавитьНоду("action","send","",""); Результат = СМСХмл.Пост("https://transport.sms-pager.com:7214/send.xml"); Если Результат<>"1" тогда Возврат(Ложь); КонецЕсли; Возврат(Истина); КонецФункции Функция Отсылать(СМСХмл) СМСХмл.ДобавитьНоду("action","check","",""); Результат = СМСХмл.Пост("https://transport.sms-pager.com:7214/send.xml"); Если Результат<>"1" тогда Сообщить("Произошла ошибка при передаче Результат="+Результат); Возврат(Результат); КонецЕсли; Если СМСХмл.ПолучитьНоду("code","")<>"1" тогда Сообщить("Ошибка в ответе="+СМСХмл.ПолучитьНоду("descr","")); Возврат(Ложь); КонецЕсли; ВсегоПолучателей=СокрЛП(СМСХмл.ПолучитьНоду("allRecivers","")); ЦенаРассылки=СокрЛП(СМСХмл.ПолучитьНоду("priceOfSending","")); ТекстОтвета = "Всего получателей=" + ВсегоПолучателей+" Цена рассылки="+ЦенаРассылки+" Вы действительно хотите отправить?"; Если Вопрос(ТекстОтвета,РежимДиалогаВопрос.ДаНет)=КодВозвратаДиалога.Нет тогда Возврат(Ложь); КонецЕсли; Возврат(Истина); КонецФункции //Блок работы с Емайл Функция ПодключитсяКПочте() Экспорт Логин="qqq"; Пар="eeee"; ИПП = Новый ИнтернетПочтовыйПрофиль; ИПП.АдресСервераSMTP = "smtp.yandex.ru"; ИПП.ВремяОжидания = 20; ИПП.Пользователь = Логин; ИПП.Пароль = Пар; ИПП.ПользовательSMTP=Логин; ИПП.ПарольSMTP = Пар; ИПП.ПортSMTP = "25"; ИПП.АутентификацияSMTP=СпособSMTPАутентификации.ПоУмолчанию; Почта = Новый ИнтернетПочта; Почта.Подключиться(ИПП); Возврат(Почта); КонецФункции Функция СоздатьСообщение(Получатели,Тема, Текст, Файлы) Экспорт ЕмайлОтправителя="[email protected]"; Сообщение = Новый ИнтернетПочтовоеСообщение; Для Каждого Получатель из Получатели Цикл Если Получатель.Значение="" тогда Продолжить;КонецЕсли; Сообщение.Получатели.Добавить(Получатель.Значение); КонецЦикла; Сообщение.Отправитель.Адрес = ЕмайлОтправителя; Сообщение.Тема = Тема; //Сообщение.Тексты.Добавить(Текст); Сообщение.Тексты.Добавить(Текст); Для Каждого Файл из Файлы Цикл //Вложение = Новый ДвоичныеДанные(Файл); //Сообщение.Вложения.Добавить(Вложение,"attach.txt"); Сообщение.Вложения.Добавить(Файл); КонецЦикла; Возврат(Сообщение); КонецФункции Вызовы в форме //Блок работы с СМС Процедура РазослатьСМС() СЗ=Новый СписокЗначений; Для Каждого СтрТЗ из ТЗДолжники Цикл СЗТел=Новый СписокЗначений; ЗаполнитьСпискиКонтактов(СтрТЗ); Для Каждого СтрСМС из СМС ЦИкл СЗТел.Добавить(СтрСМС.Значение); КонецЦикла; СЗ.Добавить(СЗТел,"Погасите задолженность.Сумма(руб)"+СтрТЗ.ТекущийДолг+".Срок долга(дни)"+ Вычислить(НачалоДня(ТекущаяДата())-НачалоДня(Мин(СтрТЗ.Долг30,СтрТЗ.Долг60, СтрТЗ.Долг90))/86400)+".Тел.:53813"); КонецЦикла; //ОтослатьСМС(СЗ, ДатаОтправки='00010101000000', ОплатаТолькоЗаДоставленные=Ложь, Спрашивать=Ложь) ОтослатьСМС(СЗ); КонецПроцедуры Процедура БалансСМС() Сообщить(ЗапросБалансаСМС()); КонецПроцедуры Процедура ПолучитьОтчетСМС() ТЗ=ОтчетСМС(); КонецПроцедуры |
|||
2
BuHu
08.11.13
✎
10:46
|
(0)что в ошибке предлагаешь угадать?
|
|||
3
Gadin_V
08.11.13
✎
10:47
|
Значение не является значением объектного типа (НачатьПодготовку)
СМСХмл.НачатьПодготовку("data"); |
|||
4
Wobland
08.11.13
✎
10:48
|
(3) так и должно быть, не пугайся
|
|||
5
Gadin_V
08.11.13
✎
10:48
|
тот же самый алгорит реализован через регламентные задание...там все ок.. а через внешнюю обработку error
|
|||
6
BuHu
08.11.13
✎
10:52
|
(5) а где Функция СоздатьСМСХмл() вызываешь?
|
|||
7
Wobland
08.11.13
✎
10:55
|
(6) до объявления переменной
|
|||
8
BuHu
08.11.13
✎
10:57
|
(7) он по моему вобще ее нигде не вызывает
|
|||
9
Wobland
08.11.13
✎
10:57
|
(8) да пофих. мож, его и так устраивает, и он просто хвастается
|
|||
10
Gadin_V
08.11.13
✎
11:00
|
вызывал при отправки смс, сначала СоздатьСМСХмл() но и тут у меня ступор возник!т.е. отдельно где то хранится этот файл на компе куда записывается номер телефона текст и т.д.?
|
|||
11
BuHu
08.11.13
✎
11:03
|
(10)Чё?
|
|||
12
Gadin_V
08.11.13
✎
11:04
|
ладно допру сам!
|
|||
13
Gadin_V
18.11.13
✎
13:05
|
кто может подсказать в чем проблема? делаю отправку смс через sms-uslugi.ru все вроде работает проверки все проходит пишет смс отправлено а до телефона не доходит и на сайте бесплатные смс не уменьшаются, хотя баланс проверяет!
Функция СоздатьСМС() Экспорт Файл=Новый Файл("SMS.dll"); Попытка ЗагрузитьВнешнююКомпоненту("SMS.dll"); Исключение Сообщить("Внешняя компонента SMS.dll не загружена. "+ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; СМС = Новый("Addin.SMSXml"); ПодготовитьСМС(); Возврат(СМС); КонецФункции Функция ОтправитьСМС(Знач НомерСМС, ТекстСМС,СлучайноеЧисло) Экспорт СоздатьСМС(); ЕстьОшибка = Ложь; Если СМС = -1 Тогда СоздатьСМС(); Если СМС = -1 Тогда Сообщить("Не получилось подключить компоненту"); ЕстьОшибка = Истина; КонецЕсли; КонецЕсли; ПолучитьСлучайноеЧисло(СлучайноеЧисло); Константы.ПарольСМС.Установить(СлучайноеЧисло); ТекстСМС = СлучайноеЧисло; НомерСМС = НомерТел1; Константы.ПользовательСМС.Установить(ПользовательСМС1); Константы.НомерТел.Установить(НомерТел1); Константы.ПарольСМС.Установить(ПарольСМС1); ЕстьОшибка = Ложь; Если СМС = -1 Тогда Сообщить("Не получилось подключить компоненту"); ЕстьОшибка = Истина; КонецЕсли; Если (СтрДлина(СокрЛП(НомерСМС)) <> 11) И СтрДлина(СокрЛП(НомерСМС)) <> 12 Тогда Сообщить("Не верный формат номера " + НомерСМС); ЕстьОшибка = Истина; КонецЕсли; Если Константы.НомерТел.Получить() = "" Тогда Сообщить("В настройках не указан пользователь для отправки СМС"); ЕстьОшибка = Истина; КонецЕсли; Если Константы.ПользовательСМС.Получить() = "" Тогда Сообщить("В настройках не указан пользователь для отправки СМС"); ЕстьОшибка = Истина; КонецЕсли; Если ЕстьОшибка Тогда Возврат Ложь; КонецЕсли; ПодготовитьСМС(); //СМС.НачатьПодготовку("data"); //СМС.ДобавитьНоду("login", Логин,"",""); //СМС.ДобавитьНоду("password", Пароль,"",""); //СМС.ДобавитьНоду("app", "1C","",""); // рез = СМС.Пост("https://transport.sms-pager.com:7214/balance.xml"); // рез = СМС.Пост("https://transport.sms-pager.com:7214/report.xml"); // рез = СМС.Пост("https://transport.sms-pager.com:7214/payment.xml"); // рез = СМС.Пост("https://transport.sms-pager.com:7214/source.xml"); рез = СМС.Пост("https://transport.sms-pager.com:7214/send.xml"); Если рез = "1" Тогда Сообщить("СМС с кодом отправленно на номер " + НомерСМС); Иначе Сообщить("Смс на номер "+ НомерСМС +" Не отправленно"); КонецЕсли; Возврат Истина; КонецФункции Процедура ПодготовитьСМС() Логин="testerzoloto"; Пароль="tester"; СМС.НачатьПодготовку("data"); СМС.ДобавитьНоду("login", Логин, "", ""); СМС.ДобавитьНоду("password", Пароль, "", ""); СМС.ДобавитьНоду("app", "1C", "", ""); конецпроцедуры Процедура Баланс(Кнопка) // Вставить содержимое обработчика. Если СМС=-1 тогда цв = новый Цвет(255,0,0); ЭлементыФормы.СтатусСтрока.ЦветТекста = цв; СтатусСтрока = "Компонента не подключена, работа не возможна"; возврат; конецесли; СоздатьСМС(); рез = СМС.Пост("https://transport.sms-pager.com:7214/balance.xml"); Если рез="1" тогда ТекстОтвета = СМС.ПолучитьНоду("code",""); Если ТекстОтвета="1" тогда Сообщить("Ваш баланс = " + СМС.ПолучитьНоду("account","")); иначе Предупреждение(СМС.ПолучитьНоду("descr","")); КонецЕсли; иначе Сообщить("Произошла ошибка при передаче, проверьте наличие интернета либо настройки прокси-сервера"); КонецЕсли; КонецПроцедуры |
|||
14
Wobland
18.11.13
✎
13:08
|
(13) пароль сменить или сам?
|
|||
15
Wobland
18.11.13
✎
13:10
|
Режим премодерации
Это означает что Ваши СМС будут отправляться немного медленнее, чем обычно - сначала они будут проверяться нашими менеджерами. |
|||
16
Gadin_V
18.11.13
✎
13:12
|
на счет пароля не понял, а на счет проверки так они вообще не доходят сколько бы я не ждал...
|
|||
17
Bumer
18.11.13
✎
13:13
|
(16) Логин="testerzoloto";
Пароль="tester"; |
|||
18
Wobland
18.11.13
✎
13:13
|
(16) сижу и думаю, какой бы новый пароль тебе изобрести ;)
|
|||
19
Wobland
18.11.13
✎
13:14
|
||||
20
Gadin_V
18.11.13
✎
13:15
|
))) новый пароль уже изобрел))
но проблема не исчезла)) |
|||
21
Gadin_V
18.11.13
✎
13:15
|
спасибо щас посмотрю)
|
|||
22
Gadin_V
18.11.13
✎
15:05
|
нашлась проблема, косяк оказывается в мегафоне, после его ново введений по поводу коротких номеров!
|
|||
23
Bumer
18.11.13
✎
15:10
|
(22) Мегафон блокирует "буквенных" отправителей... теперь только цифры...
|
|||
24
Bumer
18.11.13
✎
15:11
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |