1С 8.3 Боты системы взаимодействия
Данные > Примеры кода 1С > 1С 8.3 Боты системы взаимодействия
Бот системы взаимодействия в 1С 8.3 - это объект конфигурации, который используется для реакции на сообщения в режиме реального времени. Обычно используются для реализации различных сценариев при интеграции с мессенджерами (Telegram), социальными сетями (ВКонтакте), интернет-телефонией. Например: ответы на входящие сообщения во время отсутствия сотрудника на рабочем месте (чат-боты) или различные оповещения: о поступление заказа, о новом этапе бизнес процесса в 1С, при проходе сотрудника через турникет предприятия на проходной, о входящем звонке и т.п..
У бота системы взаимодействия есть серверный модуль с обработчиком события получения сообщения. Функциональность доступна с версии 8.3.18. Для внедрения необходим сервер (клиент-серверный вариант) или компьютер с запущенным сеансом (файловый вариант). Реализация возможна также и на разных конфигурациях (например, если в организации используют несколько конфигураций: ERP, БП, Документооборот, ЗУП и т.д.) для этого необходим общий локальный сервер системы взаимодействия или облачный ресурс WSS.
Код для Бота пишется в обработчике ОбработкаСообщенияСистемыВзаимодействия() модуля объекта бота.
Параметры объекта конфигурации бота:
- Предопределенный ‑ указывает, что бот предопределенный. Отличается от обычного бота, только тем, что его нельзя явно создать или удалить. Если бот предопределенный, то при обновлении конфигурации в базе автоматически будет создано бот и пользователь системы взаимодействия. Иначе если бот обычный, то информация о нём удаляется и пользователь системы взаимодействия перестает быть ботом. Далее работа с ботом осуществляется через объект БотСистемыВзаимодействия. Изменение свойств метаданных (Имя, Синоним и Картинка) применяются при вызове метода менеджера системы взаимодействия: СистемаВзаимодействия.ВыполнитьОбработкуБотов().
- Картинка ‑ устанавливается пользователю системы взаимодействия, ассоциированному с данным ботом.
Свойства объекта встроенного языка бота:
- Предопределенный ‑ свойство является отражением свойства объекта конфигурации в объектную модель.
- Пользователь ‑ содержит ссылку на пользователя системы взаимодействия, который олицетворяет данного бота. Пользователя можно менять во время работы системы, изменение допустимо как из встроенного языка, так и с помощью соответствующей стандартной функции.
- ИмяПользователяИнформационнойБазыВыполненияОбработки ‑ данное свойство содержит ссылку на пользователя информационной базы. Указанный в данном свойстве пользователь определяет, какие права доступа к объектам базы данных будут предоставлены боту.
- Метаданные ‑ ссылается на объект конфигурации, описывающий бота. Изменение данного свойства приводит к изменению логики работы существующего бота. Не поддерживается изменение данного свойства для предопределенных ботов.
- ДополнительныеПараметры ‑ через это свойство можно передавать боту какие-то дополнительные данные, которые не могут быть переданы через информационную базу. Эти параметры можно применять тогда, когда один объект БотСистемыВзаимодействия используется для разных ботов.
Методы создания бота:
- Вызов метода ВыполнитьОбработкуБотов() менеджера системы взаимодействия (для предопределенных ботов).
- Методом БотСистемыВзаимодействия.Записать(). Объект БотСистемыВзаимодействия можно получить с помощью методов менеджера системы взаимодействия: СоздатьБота(), ПолучитьБота() или ПолучитьБотов().
Оглавление:
Обработчик события получения сообщения через Систему взаимодействия в 1С 8.3:
&НаСервере
Процедура ОбработкаСообщенияСистемыВзаимодействия(Сообщение, ДополнительныеПараметры)
ТелоВалюты = Нрег(Сообщение.Текст);// Получаем весь текст сообщения
Если СтрНайти(ТелоВалюты, "USD") <> 0 ИЛИ СтрНайти(ТелоВалюты, "Доллар") <> 0 Тогда
КодВалюты = "840";
ИначеЕсли СтрНайти(ТелоВалюты, "EUR") <> 0 ИЛИ СтрНайти(ТелоВалюты, "Евро") <> 0 Тогда
КодВалюты = "978";
ИначеЕсли СтрНайти(ТелоВалюты, "BYN") <> 0 ИЛИ СтрНайти(ТелоВалюты, "Белорусский рубль") <> 0 Тогда
КодВалюты = "933";
Иначе
КодВалюты = "0";
КонецЕсли;
// Выводим наш ответ на экран пользователю (в зависимости от кода валюты - покажем её курс)
НашОтвет = СистемаВзаимодействия.СоздатьСообщение(Сообщение.Обсуждение);
Если КодВалюты <> "0" Тогда
// Параметры: адрес, порт (http:80, https:443), пользователь, пароль, прокси, таймаут в секундах, защищ.соединение (для https)
Соединение = Новый HTTPСоединение("cbrates.rbc.ru");
// Получение текста страницы через запрос.
HTTPЗапрос = Новый HTTPЗапрос("tsv/" + КодВалюты + Формат(ТекущаяДата(), "ДФ=/YYYY/MM/DD") + ".tsv");
Ответ = Соединение.Получить(HTTPЗапрос);// Get запрос
Если Ответ.КодСостояния <> 200 Тогда
НашОтвет.Текст = "Код ошибки №" + Ответ.КодСостояния;
Иначе
Содержимое = Ответ.ПолучитьТЕлоКакСтроку();
СтрОтвета = "Курс валюты";
Если КодВалюты = "840" Тогда
СтрОтвета = СтрОтвета + " доллара: ";
ИначеЕсли КодВалюты = "978" Тогда
СтрОтвета = СтрОтвета + " евро: ";
ИначеЕсли КодВалюты = "933" Тогда
СтрОтвета = СтрОтвета + " белорусского рубля: ";
КонецЕсли;
МН = СтрРазделитель(Содержимое, Символы.Таб);
КурсВалюты = Число(МН[1]) / Число(МН[0]);
СтрОтвета = СтрОтвета + КурсВалюты;
НашОтвет.Текст = СтрОтвета;
КонецЕсли;
Иначе
НашОтвет.Текст = "Не найдена валюта";
КонецЕсли;
НашОтвет.Записать();// Сохранение в системе взаимодействия
КонецПроцедуры
Процедура ОбработкаСообщенияСистемыВзаимодействия(Сообщение, ДополнительныеПараметры)
ТелоВалюты = Нрег(Сообщение.Текст);// Получаем весь текст сообщения
Если СтрНайти(ТелоВалюты, "USD") <> 0 ИЛИ СтрНайти(ТелоВалюты, "Доллар") <> 0 Тогда
КодВалюты = "840";
ИначеЕсли СтрНайти(ТелоВалюты, "EUR") <> 0 ИЛИ СтрНайти(ТелоВалюты, "Евро") <> 0 Тогда
КодВалюты = "978";
ИначеЕсли СтрНайти(ТелоВалюты, "BYN") <> 0 ИЛИ СтрНайти(ТелоВалюты, "Белорусский рубль") <> 0 Тогда
КодВалюты = "933";
Иначе
КодВалюты = "0";
КонецЕсли;
// Выводим наш ответ на экран пользователю (в зависимости от кода валюты - покажем её курс)
НашОтвет = СистемаВзаимодействия.СоздатьСообщение(Сообщение.Обсуждение);
Если КодВалюты <> "0" Тогда
// Параметры: адрес, порт (http:80, https:443), пользователь, пароль, прокси, таймаут в секундах, защищ.соединение (для https)
Соединение = Новый HTTPСоединение("cbrates.rbc.ru");
// Получение текста страницы через запрос.
HTTPЗапрос = Новый HTTPЗапрос("tsv/" + КодВалюты + Формат(ТекущаяДата(), "ДФ=/YYYY/MM/DD") + ".tsv");
Ответ = Соединение.Получить(HTTPЗапрос);// Get запрос
Если Ответ.КодСостояния <> 200 Тогда
НашОтвет.Текст = "Код ошибки №" + Ответ.КодСостояния;
Иначе
Содержимое = Ответ.ПолучитьТЕлоКакСтроку();
СтрОтвета = "Курс валюты";
Если КодВалюты = "840" Тогда
СтрОтвета = СтрОтвета + " доллара: ";
ИначеЕсли КодВалюты = "978" Тогда
СтрОтвета = СтрОтвета + " евро: ";
ИначеЕсли КодВалюты = "933" Тогда
СтрОтвета = СтрОтвета + " белорусского рубля: ";
КонецЕсли;
МН = СтрРазделитель(Содержимое, Символы.Таб);
КурсВалюты = Число(МН[1]) / Число(МН[0]);
СтрОтвета = СтрОтвета + КурсВалюты;
НашОтвет.Текст = СтрОтвета;
КонецЕсли;
Иначе
НашОтвет.Текст = "Не найдена валюта";
КонецЕсли;
НашОтвет.Записать();// Сохранение в системе взаимодействия
КонецПроцедуры
Пример предопределенного бота (эхо бот) в 1С 8.3:
Процедура ОбработкаСообщенияСистемыВзаимодействия(Сообщение, ДополнительныеПараметры) // В модуль объекта для созданного бота
// проверен на клиент-серверном варианте работы 1С 8.3
ОтветСообщения = СистемаВзаимодействия.СоздатьСообщение(Сообщение.Обсуждение);
ОтветСообщения.Текст = "echo" + Символы.ПС + ">"+ СтрСоединить(СтрРазделить(Сообщение.Текст, Символы.ПС), Символы.ПС + ">";
ОтветСообщения.Записать();
//...эхо-бот...
КонецПроцедуры
Программное формирование обсуждения через систему взаимодействия в 1С 8.3:
Процедура ОбсуждениеВСистемеВзаимодействия(СсылкаНаДокументОбсуждения)
Ссылка = ПолучитьНавигационнуюСсылку(СсылкаНаДокументОбсуждения);
КонтекстОбсуждения = Новый КонтекстОбсужденияСистемыВзаимодействия(Ссылка);
МенеджерВзаимодействия = Новый МенеджерСистемыВзаимодействия;
Отбор = Новый ОтборОбсужденийСистемыВзаимодействия;
Отбор.КонтекстноеОбсуждение = Истина;
Отбор.ТекущийПользовательЯвляетсяУчастником = Ложь;
Отбор.КонтекстОбсуждения = КонтекстОбсуждения;
ОбсуждениеСВ = МенеджерВзаимодействия.ПолучитьОбсуждения(Отбор);
Если ОбсуждениеСВ.Количество() = 0 Тогда
ОбсуждениеСВ = МенеджерВзаимодействия.СоздатьОбсуждение();
ОбсуждениеСВ.КонтекстОбсуждения = КонтекстОбсуждения;
ОбсуждениеСВ.Ключ = Строка(СсылкаНаДокументОбсуждения.УникальныйИдентификатор());
ОбсуждениеСВ.Записать();
Иначе
ОбсуждениеСВ = ОбсуждениеСВ[0];
КонецЕсли;
АвторСообщения = ПараметрыСеанса.ТекущийПользователь;
Сообщение = МенеджерВзаимодействия.СоздатьСообщение(ОбсуждениеСВ.Идентификатор);
Сообщение.Дата = ТекущаяДата();
Сообщение.Автор = ПолучитьГУИД(АвторСообщения);
Сообщение.Получатели.Добавить(ПолучитьГУИД(ПолучательОповещенияВСистемеВзаимодействия));
Сообщение.Текст = Новый ФорматированнаяСтрока("текст обсуждения");
Сообщение.Записать();
КонецПроцедуры
Ссылка = ПолучитьНавигационнуюСсылку(СсылкаНаДокументОбсуждения);
КонтекстОбсуждения = Новый КонтекстОбсужденияСистемыВзаимодействия(Ссылка);
МенеджерВзаимодействия = Новый МенеджерСистемыВзаимодействия;
Отбор = Новый ОтборОбсужденийСистемыВзаимодействия;
Отбор.КонтекстноеОбсуждение = Истина;
Отбор.ТекущийПользовательЯвляетсяУчастником = Ложь;
Отбор.КонтекстОбсуждения = КонтекстОбсуждения;
ОбсуждениеСВ = МенеджерВзаимодействия.ПолучитьОбсуждения(Отбор);
Если ОбсуждениеСВ.Количество() = 0 Тогда
ОбсуждениеСВ = МенеджерВзаимодействия.СоздатьОбсуждение();
ОбсуждениеСВ.КонтекстОбсуждения = КонтекстОбсуждения;
ОбсуждениеСВ.Ключ = Строка(СсылкаНаДокументОбсуждения.УникальныйИдентификатор());
ОбсуждениеСВ.Записать();
Иначе
ОбсуждениеСВ = ОбсуждениеСВ[0];
КонецЕсли;
АвторСообщения = ПараметрыСеанса.ТекущийПользователь;
Сообщение = МенеджерВзаимодействия.СоздатьСообщение(ОбсуждениеСВ.Идентификатор);
Сообщение.Дата = ТекущаяДата();
Сообщение.Автор = ПолучитьГУИД(АвторСообщения);
Сообщение.Получатели.Добавить(ПолучитьГУИД(ПолучательОповещенияВСистемеВзаимодействия));
Сообщение.Текст = Новый ФорматированнаяСтрока("текст обсуждения");
Сообщение.Записать();
КонецПроцедуры
📰 Актуальные новости с тегом #БотыСистемыВзаимодействия:
- В версии 8.3.28 в системе взаимодействия появилось размытие фона в видеозвонке, подключение камеры и микрофона во время звонка, улучшено шумоподавления в веб-клиенте.
- В версии 8.3.27 в системе взаимодействия появилась поддержка видеозвонков в тонком клиенте в Linux
- Во встроенном языке в версии 8.3.26 в объект СообщениеСистемыВзаимодействия добавлено новое свойство ФорматДанныхСтроки (тип: Строка, Неопределено). Если свойство Данные полученного от внешней системы сообщения содержит данные типа Строка, то содержит mime-type данных, иначе – Неопределено.
- В версии 8.3.26 появилась возможность отправки уведомлений клиентам со стороны сервера без использования Системы взаимодействия. Объект МенеджерУведомленийКлиента, который предоставляет возможность отправки уведомлений с сервера в клиентские сеансы. Его методы: ПодключитьОбработчик(Ключ, Обработчик), ОтключитьОбработчик(Ключ), ОтправитьУведомление(Ключ, Данные, Адресаты). В глобальный контекст добавлено свойство УведомленияКлиента типа МенеджерУведомленийКлиента. У объекта ФоновоеЗадание добавлено свойство НомерРодительскогоСеанса.
- В версии 8.3.23 реализована поддержка работы с файлами в интеграциях системы взаимодействия
- В версии 8.3.22 улучшено юзабилити видеозвонков в системе взаимодействия
5
комментарии
Май юзернэйм
22 сен 2021
На клиенте почему то не срабатывает без ПодключитьОбработчикНовыхСообщенийАсинх
Илья Артемов
22 май 2020
А мне нравиться, что теперь можно ботов писать без костылей. Спасибо 1С!
Александр
22 май 2020
Скорее начало 22
Гарри
20 май 2020
Погодьте, это 18-ый релиз. Когда массово начнем на нем писать, будет конец 21-ого? :)
Евгений
19 май 2020
Опять что то сделали для разработчиков, а нет нам предлагают программировать ботов с помощью СтрНайти
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник