&НаСервере
Процедура
ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
МассивПартнеров.ЗагрузитьЗначения(ЭтаФорма.Параметры.МассивСсылок);
КонецПроцедуры
Функция ПолучитьТокенTWIN()
Адрес = "iam.twin24.ai";
Соединение = Новый HTTPСоединение(Адрес,443,,, ,30, Новый ЗащищенноеСоединениеOpenSSL);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type",
"application/json");
Запрос = Новый HTTPЗапрос("/api/v1/auth/login",
Заголовки);
ТелоЗапроса
= "{
|
""email"": ""pochta@mail.ru"",
|
""password"": ""parol"",
| ""ttl"": ""3600""
| }";
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8);
Результат = Соединение.ВызватьHTTPМетод("POST",
Запрос);
Сообщить("Токен: " + Результат.КодСостояния);
Если Результат.КодСостояния
= 200 Тогда
ЧтениеJSON
= Новый ЧтениеJSON();
ЧтениеJSON.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));
РезСтруктура
= ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Возврат
РезСтруктура.token;
Иначе
Возврат "";
КонецЕсли;
КонецФункции
Функция СоздатьЗаданиеНаОбзвонВTWIN(Знач
UuidСценария, Знач Токен)
Адрес =
"cis.twin24.ai";
Соединение = Новый HTTPСоединение(Адрес,443,,,,30, Новый ЗащищенноеСоединениеOpenSSL);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type",
"application/json");
Заголовки.Вставить("Authorization", "Bearer " + Токен);
Запрос = Новый HTTPЗапрос("/api/v1/telephony/autoCall",
Заголовки);
ТелоЗапроса = "{
|
""name"": ""Автотестовое
задание"",
|
""defaultExec"":
""robot"",
|
""defaultExecData"":
""" + UuidСценария + """,
|
""secondExec"":
""end"",
|
""secondExecData"": null,
|
""cidType"": ""gornum"",
|
""cidData"": ""efc1dea2-3ce4-5678-b098-18aff013ff20"",
|
""startType"":
""manual"",
|
""startMoment"":
"""",
|
""cps"": ""1.01"",
|
""taskComment"": ""ТестовоеЗадание1"",
|
""webhookUrls"":[],
|
""additionalOptions"":
| {""fullListMethod"":""external"",
| ""fullListTime"":""0"",
| ""useTr"":null,
|
""allowCallTimeFrom"":""32400"",
|
""allowCallTimeTo"":""82800"",
| ""recordCall"":""true"",
|
""recTrimLeft"":""1"",
| ""detectRobot"":""true"",
| ""detectRobotMode"":""block"",
| ""detectRobotGreeting"":null,
| ""providerId"":null
| },
|
""redialStrategyOptions"":
| {""redialStrategyEn"":false,
| ""busy"":null,
| ""noAnswer"":null,
| ""answerMash"":null,
| ""congestion"":null,
| ""answerNoList"":null
| }
| }";
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8);
Результат = Соединение.ВызватьHTTPМетод("POST",
Запрос);
Результат2 = Результат.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
ЧтениеJSON
= Новый ЧтениеJSON();
ЧтениеJSON.УстановитьСтроку(Результат2);
РезСтруктура
= ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Сообщить("Создание задания:
" + Результат.КодСостояния);
Если Результат.КодСостояния
= 200 Тогда
Возврат РезСтруктура.id.identity;
Иначе
Возврат "";
КонецЕсли;
КонецФункции
Процедура
Пауза(Секунды) Экспорт
ВремяОкончания
= ТекущаяДата() + Секунды;
Пока ТекущаяДата()
<= ВремяОкончания Цикл
КонецЦикла;
КонецПроцедуры
Функция Заменить8на7вТелефонах(Знач М)//Заменяем первую [8] на [7] в номере телефона
Индекс = 0;
Для Каждого Эл из М Цикл
Если Сред(Эл, 1, 1) =
"8" Тогда
М[Индекс] =
"7" + Сред(Эл, 2, 10);
КонецЕсли;
Индекс = Индекс + 1;
КонецЦикла;
Возврат М;
КонецФункции
&НаСервере
Процедура
ДобавитьКандидатаВРегистр(Знач ИдЗадания, Знач МассивТелефонов, Знач СсылкаНаЛС)
Для Каждого Эл Из МассивТелефонов Цикл
МЗ = РегистрыСведений.TWIN_ГолосовойБот.СоздатьМенеджерЗаписи();
МЗ.Период
= ТекущаяДата();
МЗ.ИдентификаторЗадания
= ИдЗадания;
МЗ.ТелефонИзЛС = Эл;
МЗ.ЛС = СсылкаНаЛС;
Если ЗначениеЗаполнено(МЗ.ИдентификаторЗадания)
И
ЗначениеЗаполнено(МЗ.ТелефонИзЛС)
Тогда
МЗ.Записать(Истина);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ДатаБлижайшейОплатыИзСоглашения(Знач СсылкаНаСоглашение)
Запрос = Новый Запрос;
Запрос.Текст
=
"ВЫБРАТЬ ПЕРВЫЕ 1
| F1_СоглашениеОРассрочкеПлатежаГрафикПлатежей.Дата
КАК Дата,
| F1_СоглашениеОРассрочкеПлатежаГрафикПлатежей.Сумма
КАК Сумма
|ИЗ
| Документ.F1_СоглашениеОРассрочкеПлатежа.ГрафикПлатежей
КАК F1_СоглашениеОРассрочкеПлатежаГрафикПлатежей
|ГДЕ
| F1_СоглашениеОРассрочкеПлатежаГрафикПлатежей.Дата
>= &Дата
| И
F1_СоглашениеОРассрочкеПлатежаГрафикПлатежей.Ссылка = &СсылкаНаСоглашение";
Запрос.УстановитьПараметр("Дата",
ТекущаяДата());
Запрос.УстановитьПараметр("СсылкаНаСоглашение", СсылкаНаСоглашение);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий()
Тогда
Возврат Выборка.Дата;
КонецЕсли;
КонецФункции
&НаСервере
Функция СписокКандидатовВJSON(autoCallId)
Запрос = Новый Запрос;
Запрос.Текст
=
"ВЫБРАТЬ
| ВЫБОР
| КОГДА
Партнеры.F1_Город.Наименование = ""Реутов""
| ТОГДА 1
| КОГДА
Партнеры.F1_Город.Наименование = ""Балашиха""
| ТОГДА 2
| КОГДА
Партнеры.F1_Город.Наименование = ""Королев""
| ТОГДА 3
| ИНАЧЕ 0
| КОНЕЦ КАК НомерОфиса,
| Партнеры.УК_ФизЛицо.Имя
КАК Имя,
| Партнеры.F1_ТелефонСтрока КАК
Телефоны,
| Партнеры.УК_ЛицевойСчетЕИРЦ
КАК ЛсЕирц,
| Партнеры.F1_ДолгСПени КАК ДолгСПени,
| Партнеры.F1_ДолгПени КАК ДолгПени,
| Партнеры.Ссылка
КАК СсылкаНаЛС,
| Партнеры.F1_Город КАК Город,
| F1_СоглашениеОРассрочкеПлатежа.Ссылка
КАК СсылкаНаСоглашение
|ИЗ
| Справочник.Партнеры
КАК Партнеры
| ЛЕВОЕ СОЕДИНЕНИЕ
Документ.F1_СоглашениеОРассрочкеПлатежа КАК F1_СоглашениеОРассрочкеПлатежа
| ПО
F1_СоглашениеОРассрочкеПлатежа.Должник = Партнеры.Ссылка
|ГДЕ
| Партнеры.Ссылка
В(&МассивПартнеров)";
Запрос.УстановитьПараметр("МассивПартнеров", ЭтаФорма.МассивПартнеров);
Результат = Запрос.Выполнить();
Выгрузка = Результат.Выгрузить();
batch =
Новый Массив();
Для Каждого Эл из Выгрузка Цикл
//Переменные
variables
= Новый Структура();
variables.Вставить("name", Эл.Имя);
АдресАбонента
= "Московская область, г. " + Эл.СсылкаНаЛС.F1_Город + ", ул.
" + Эл.СсылкаНаЛС.F1_Улица + ", д. " +
Эл.СсылкаНаЛС.F1_Дом.НомерДома + ", кв. " + Эл.СсылкаНаЛС.УК_Помещение.НомерПомещенияРЦ;
variables.Вставить("address", АдресАбонента);//Адрес
абонента
variables.Вставить("summa", Строка(Формат(Эл.ДолгСПени,
"ЧДЦ=0; ЧГ=")));
variables.Вставить("peni", Строка(Эл.ДолгПени));
Если ЗначениеЗаполнено(СценарийОбзвона) Тогда
НомерСценария
= Число(СценарийОбзвона.Код);
Иначе
НомерСценария
= 0;
КонецЕсли;
variables.Вставить("scenario", Строка(НомерСценария));//Номер
сценария обзвона
variables.Вставить("LS",
Эл.ЛсЕирц);//Лицевой счет
Если ЗначениеЗаполнено(Эл.СсылкаНаСоглашение) Тогда
date_payS
= Формат(ДатаБлижайшейОплатыИзСоглашения(Эл.СсылкаНаСоглашение), "ДФ=гггг-ММ-ддTЧЧ:мм:сс+ЧЧ:мм");
variables.Вставить("date_payS", date_payS);//Дата
оплаты по [Соглашению]
КонецЕсли;
variables.Вставить("num_office", Строка(Эл.НомерОфиса));//Номер
офиса КРКЦ (Реутов - 1, Балашиха - 2, Королев - 3)
//Телефоны
Если СтрНайти(Эл.Телефоны, ";") <> 0 Тогда
phone
= СтрРазделить(Эл.Телефоны,
";");
Иначе
phone
= Новый Массив();
phone.Добавить(Эл.Телефоны);
КонецЕсли;
phone =
Заменить8на7вТелефонах(phone);
с1 = Новый Структура();
с1.Вставить("id_debt", "");
с1.Вставить("id_num", "");
callbackData
= Новый Массив();
callbackData.Добавить(с1);
Кандидат = Новый Структура();
Кандидат.Вставить("phone", phone);
Кандидат.Вставить("variables", variables);
Кандидат.Вставить("callbackData", callbackData);
Кандидат.Вставить("autoCallId", autoCallId);
batch.Добавить(Кандидат);
ДобавитьКандидатаВРегистр(autoCallId, phone, Эл.СсылкаНаЛС);
КонецЦикла;
Данные = Новый Структура();
Данные.Вставить("batch", batch);
ЗаписьJSON
= Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Данные);
Возврат ЗаписьJSON.Закрыть();
КонецФункции
&НаСервере
Функция ДобавитьКандитатовНаОбзвонВTWIN(Знач Токен, Знач autoCallId)
Адрес =
"cis.twin24.ai";
Соединение = Новый HTTPСоединение(Адрес,443,,,,30, Новый ЗащищенноеСоединениеOpenSSL);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type",
"application/json");
Заголовки.Вставить("Authorization", "Bearer " + Токен);
Запрос = Новый HTTPЗапрос("/api/v1/telephony/autoCallCandidate/batch",
Заголовки);
ТелоЗапроса = СписокКандидатовВJSON(autoCallId);
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8);
Результат = Соединение.ВызватьHTTPМетод("POST",
Запрос);
Результат2 = Результат.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
Сообщить("Добавление
кандидатов на обзвон: " + Результат.КодСостояния);
Если Результат.КодСостояния
= 200 Тогда
//При успешном выполнении
метода придет ответ с кодом 200 без тела
Возврат Результат.КодСостояния;
Иначе
Возврат "";
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура
СоздатьЗадание(Команда)
Если НЕ ЗначениеЗаполнено(ЭтотОбъект.СценарийОбзвона) Тогда
Сообщить("Выберете
сценарий обзвона");
Возврат;
КонецЕсли;
UuidСценария = "1f23456d-78c6-987a-a654-d4737800f856";
Токен = ПолучитьТокенTWIN();
autoCallId = СоздатьЗаданиеНаОбзвонВTWIN(UuidСценария,
Токен);
Пауза(5);//Требование
на сайте TWIN
ДобавитьКандитатовНаОбзвонВTWIN(Токен,
autoCallId);
КонецПроцедуры
|