Мой пример интеграции с Viber

02.10.20

Интеграция - Мессенджеры и боты

Пример интеграции бота Viber и 1С.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Мой пример интеграции с Viber:
.cf 17,60Kb
13
13
1 SM
Скачать Купить за 1 850 руб.

Руководством была поставлена задача взаимодействия с клиентами через Viber.

Была старта работ была использована публикация: //infostart.ru/public/1061585/

 

Вот моё решение.

  1. Необходимо зарегистрировать Viber бота, как это делать описывать не буду, есть куча статей

  2. Получаем токен бота на из вашего кабинета https://partners.viber.com/account/----------------/info

  3. Для получения данных от бота надо подключить вэб-хук. Возможности завести свой HTTPS пока нет. По этому я использовал https://webhook.site/ 

Нормально переадресацию смог настроить только с премиум доступом к сервису за 3.6$ в месяц, на мой взгляд не дорого.

Может можно и на бесплатном функционале сервиса, но смог только так разобраться.

 

На нём была настроена переадресация на мой HTTP сервис опубликованный из 1С

 
Настройка вэб-хука

а. Настройка редикректа

 Настройка редиректа

2. Структура вэб-сервиса

 

4. После публикации вэб-сервиса, подключаем вэб-хук к боту:

Процедура УстановитьВебхук(Токен, Вебхук)
	
	//Токен = "##################################################";
	//Вебхук ="https://webhook.site/########-####-####-####-############";	
	
	Если ПустаяСтрока(Токен) Тогда
		Сообщить("Укажите токен");
		Возврат;
	КонецЕсли; 

	
	Если ПустаяСтрока(Вебхук) Тогда
		Сообщить("Заполните вебхук");
		Возврат;
	КонецЕсли; 
	
	Сервер = "chatapi.viber.com";
	
	Статусы = Новый Массив; //ограничиваем события которые будут к нам прилетать по вэб-хуку.
	Статусы.Добавить("subscribed");
	Статусы.Добавить("unsubscribed");
	Статусы.Добавить("conversation_started");
	
	ТелоЗапроса = ПолучитьСтруктуруСообщения(Новый Структура("url, event_types", Вебхук, Статусы));
	
	Адрес 		= ПолучитьТекстЗапросаВайбер("set_webhook");
	Соединение 	= Новый HTTPСоединение(Сервер,,,,,,Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows,Новый СертификатыУдостоверяющихЦентровWindows()));
	Запрос 		= Новый HTTPЗапрос(Адрес);
	Если ТелоЗапроса <> Неопределено Тогда
		Запрос.Заголовки.Вставить("X-Viber-Auth-Token",Токен);
		Запрос.Заголовки.Вставить("Content-Type","application/json");
		Запрос.УстановитьТелоИзСтроки(ТелоЗапроса,"UTF-8", ИспользованиеByteOrderMark.НеИспользовать);
		Ответ = Соединение.ОтправитьДляОбработки(Запрос);
	Иначе
		Ответ = Соединение.Получить(Запрос);
	КонецЕсли;
	
	Чтение = Новый ЧтениеJSON;
	ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку(); 
	Чтение.УстановитьСтроку(ОтветСтрокой);
	Результат = ПрочитатьJSON(Чтение);
	
	Если Результат.status = 1 Тогда
		Сообщить("При установке вебхука произошла ошибка " +  ОтветСтрокой);
	ИначеЕсли Результат.status = 0 Тогда 
		Сообщить("Вебхук успешно установлен");	
	КонецЕсли; 
	
	Если Ответ.КодСостояния <> 200 Тогда
		Сообщить("При установке вебхука произошла ошибка " +  ОтветСтрокой);
	КонецЕсли; 
	

КонецПроцедуры

Функция ПолучитьСтруктуруСообщения(СтруктураПараметров = Неопределено)
	
	СтруктураНастроек = Новый Структура();
	
	Если СтруктураПараметров <> Неопределено Тогда
		Для Каждого стрПараметр Из СтруктураПараметров Цикл
			СтруктураНастроек.Вставить(стрПараметр.Ключ, стрПараметр.Значение);
		КонецЦикла;
	КонецЕсли; 
		
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	ЗаписатьJSON(ЗаписьJSON, СтруктураНастроек);
	Возврат ЗаписьJSON.Закрыть();
	
КонецФункции

Функция ПолучитьТекстЗапросаВайбер(ИмяКоманды) 
	
	Адрес = "/pa/";
	Адрес = Адрес + ИмяКоманды;
	Возврат Адрес;

КонецФункции

5. После подключения к вэб-хука в боте включится возможность отправки сообщений пользователем боту.

6. В процедуре вэб-сервиса создадим обработчик:


Функция Hookviber(Запрос)
	
	Ответ = Новый HTTPСервисОтвет(200);
	
	ПроцедурыViber.ОбработатьЗапрос(Запрос);
	
	Возврат Ответ;
	
КонецФункции

 

Пример: Получим список админов и отправим им сообщение:


Процедура ОтправитьСообщениеВПубличныйЧатАдминистраторам(Текст = Неопределено) Экспорт 
	Админы = ПолучитьСписокАДминистраторов();
	
	Для Каждого Получатель из Админы Цикл
		Структура = Новый Структура();
		Структура.Вставить("receiver", Получатель);
		sender = Новый Соответствие();
		sender.Вставить("name", "Чат-бот");
				
		Структура.Вставить("sender", sender);	
		Структура.Вставить("type", "text");
		Структура.Вставить("text", ?(Текст = Неопределено, "Добрый день!", Текст));
				
		ОтправитьЗапросНаСерверВайбера("send_message", Структура);
	КонецЦикла;
	
КонецПроцедуры 

Функция ПолучитьСписокАДминистраторов()

	Ответ = ОтправитьЗапросНаСерверВайбера("get_account_info");

	Админы = Новый Массив;

	Если ТипЗнч(Ответ) = Тип("Структура") Тогда
		Если Ответ.Свойство("members") Тогда
			Подписчики = Ответ.members;
			Для Каждого Подписчик Из Подписчики Цикл
				Если Подписчик.role = "admin" Тогда
					Админы.Добавить(Подписчик.id);
				Иначе 
					Продолжить;
				КонецЕсли; 
			КонецЦикла;
		КонецЕсли; 
	КонецЕсли;

	Возврат Админы;

КонецФункции

Функция ОтправитьЗапросНаСерверВайбера(ИмяКоманды, СтруктураПараметров = Неопределено)
	
	Сервер = "chatapi.viber.com";
	ТелоЗапроса = ПолучитьСтруктуруСообщения(СтруктураПараметров);	
	Адрес 		= ПолучитьТекстЗапросаВайбер(ИмяКоманды);
	Соединение 	= Новый HTTPСоединение(Сервер,,,,,, Новый ЗащищенноеСоединениеOpenSSL);
	Запрос 		= Новый HTTPЗапрос(Адрес);

	Если ТелоЗапроса <> Неопределено Тогда
		Запрос.Заголовки.Вставить("Content-Type","application/json");
		Запрос.Заголовки.Вставить("X-Viber-Auth-Token","Токен");
		Если СтрДлина(ТелоЗапроса) > 4 тогда
		Запрос.УстановитьТелоИзСтроки(ТелоЗапроса,"UTF-8", ИспользованиеByteOrderMark.НеИспользовать);
		КонецЕсли;
		Ответ = Соединение.ОтправитьДляОбработки(Запрос);
	Иначе
		Ответ = Соединение.Получить(Запрос);
	КонецЕсли;
	
	Чтение = Новый ЧтениеJSON;
	ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку(); 
	Чтение.УстановитьСтроку(ОтветСтрокой);
	Результат = ПрочитатьJSON(Чтение);
	
	Возврат Результат;

КонецФункции


Пример: отправим администраторам запрос на согласование с кнопками в тексте


Процедура ЗапроситьСогласование() Экспорт 
	
	Админы = ПолучитьСписокАДминистраторов();
	
	Стр = ПолучитьСтруктуруЗапросаСогласование("Простое согласование");
	
	Для Каждого Админ из Админы Цикл
		Структура = Новый Структура();
		Структура.Вставить("receiver",  Админ);
		
		sender = Новый Соответствие();
		sender.Вставить("name", "Бот-Согласование");
			
		Стр.receiver = Админ;
		ОтправитьЗапросНаСерверВайбера("send_message", Стр);
	КонецЦикла;
	
	
КонецПроцедуры

Функция ПолучитьСтруктуруЗапросаСогласование(Текст)
	
	//Формируем структуру
	
	Структура = Новый Структура();
	Структура.Вставить("receiver", "");
	Структура.Вставить("min_api_version", 2);
	sender = Новый Соответствие();
	sender.Вставить("name", "Бот-Согласование");
			
	Структура.Вставить("sender", sender);	
	Структура.Вставить("type", "rich_media");
	
	rich_media = Новый Структура;
	
	rich_media.Вставить("Type", "rich_media");
	rich_media.Вставить("BgColor", "#FFFFFF");
	rich_media.Вставить("ButtonsGroupColumns", 6);
	rich_media.Вставить("ButtonsGroupRows", 7);
 	
	
	Кнопки = Новый Массив;
	
	Кнопка = Новый Структура;
	Кнопка.Вставить("Columns", 6);
	Кнопка.Вставить("Rows", 5);
	Кнопка.Вставить("ActionType", "none");
	Кнопка.Вставить("ActionBody", "text");
	Кнопка.Вставить("TextSize", "medium");
	Кнопка.Вставить("TextVAlign", "middle");
	Кнопка.Вставить("TextHAlign", "left");
	Кнопка.Вставить("Text", "[<b>" + Текст + "</b>]");
	Кнопки.Добавить(Кнопка);
	
	
	Кнопка = Новый Структура;
	Кнопка.Вставить("Columns", 6);
	Кнопка.Вставить("Rows", 1);
	Кнопка.Вставить("ActionType", "reply");
	Кнопка.Вставить("ActionBody", "Ok");
	Кнопка.Вставить("Text", "<font color=#000000>Согласовать</font>"); 
	Кнопка.Вставить("BgColor", "#00a86b");
	Кнопка.Вставить("TextSize", "large");
	Кнопка.Вставить("TextVAlign", "middle");
	Кнопка.Вставить("TextHAlign", "middle");
	Кнопки.Добавить(Кнопка);
	
	Кнопка = Новый Структура;
	Кнопка.Вставить("Columns", 6);
	Кнопка.Вставить("Rows", 1);
	Кнопка.Вставить("ActionType", "reply");
	Кнопка.Вставить("ActionBody", "No");
	Кнопка.Вставить("BgColor", "#ff4f00");
	Кнопка.Вставить("Text", "<font color=#000000>Отказать</font>");
	Кнопка.Вставить("TextSize", "large");
	Кнопка.Вставить("TextVAlign", "middle");
	Кнопка.Вставить("TextHAlign", "middle");
	Кнопки.Добавить(Кнопка);
	
	
	rich_media.Вставить("Buttons", Кнопки);
	
	Структура.Вставить("rich_media", rich_media);
	
	Возврат Структура;
	
КонецФункции

Пример: обработаем ответ на согласование.

Процедура ОбработатьЗапрос(Запрос) Экспорт 
	
	Попытка
		
		СтруктураДанных = ПрочитатьJSON(Запрос.ПолучитьТелоКакСтроку());
		
		Отправитель = СтруктураДанных.Получить("sender");
		Сообщение = СтруктураДанных.Получить("message");
			
		Если Сообщение<>Неопределено и Отправитель<>Неопределено Тогда

			ТипСообщения = Сообщение["type"];
			ТекстСообщения = "" + Сообщение["text"];

			Если ТекстСообщения = "Ok" или ТекстСообщения = "No" Тогда
				ОтправитьСообщениеВПубличныйЧатАдминистраторам("" + Отправитель["name"] + " выполнил согласование: " + ТекстСообщения);
			КонецЕсли;

		КонецЕсли;
		
	Исключение  
		ЗаписьЖурналаРегистрации("Ошибка обработки запроса из Viber", УровеньЖурналаРегистрации.Ошибка,,,"" + ОписаниеОшибки());
	КонецПопытки;
	
КонецПроцедуры

 

Как итог через 1с менеджеры отправляют на согласования различные запросы и получают ответы от руководителей, так же реализовал получение и отправку картинок. В примере оно есть. Для отправки картинки она должна быть видна из интернета. 

Работает сей функционал уже полгода, полет нормальный.

Тестировалось на платформе 8.3.16.1224.

Интеграция Viber Вибер Вайбер

См. также

Мессенджеры и боты Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Интеграция мессенджера WhatsApp и 1С: УНФ, УТ, КА, ERP - отправка и получение сообщений, картинок, файлов и видео прямо в 1С. Расширение работает с сервисом GreenApi.

15600 руб.

23.06.2023    8025    49    11    

27

SALE! 25%

Мобильная разработка Мессенджеры и боты Платформа 1С v8.3 1С:Конвертация данных Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13200 9900 руб.

27.12.2021    36796    98    161    

192

Мессенджеры и боты Программист Пользователь Платформа 1С v8.3 Платные (руб)

Мощный модуль для интеграции 1С с чат-ботами: Telegram, Viber, WhatsApp, WhatsApp Business, Instagram, ICQ, Facebook, Vkontakte, Skype, Одноклассники, Яндекс.Алиса, Avito а так же виджеты чата для сайтов: Verbox, Jivochat. Это универсальное и эффективное решение с большими возможностями, простым интерфейсом, наличием визуального конструктора, базовыми сценариями поведения из коробки, позволяющий запустить чат-ботов в течении 1-го дня.

65000 руб.

08.10.2019    60082    35    0    

157

SALE! 25%

Мессенджеры и боты Системный администратор Программист Бизнес-аналитик Пользователь Руководитель проекта Платформа 1С v8.3 Платные (руб)

Развитие популярного решения для интеграции мессенджера Telegram с нашей любимой 1С - конструктор чат-ботов в Телеграм.

15000 11250 руб.

18.06.2021    63935    307    272    

360

Документооборот и делопроизводство (СЭД) Мессенджеры и боты Учет документов Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 Платные (руб)

Расширение для согласования справочников и документов в основных типовых конфигурациях. Ролевая адресация, условная маршрутизация, чат-бот telegram, интеграция с n8n, последовательное и параллельное согласование, уведомление о новых задачах на почту, блокировка объектов в зависимости от статуса, запрет проведения в зависимости от статуса, автозапуск процессов согласования, отчеты по исполнительской дисциплине. Не требуется снятие конфигурации с поддержки. Настройка без программирования. Версия для 1cfresh.com. Сертификат 1С-Совместимо.

14900 руб.

15.11.2018    29410    33    49    

67

Мессенджеры и боты SMS рассылки Платформа 1С v8.3 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Решение реализовано в виде расширения. Заменяет отправку смс на отправку в WhatsApp через Green-api. Отправка чека картинкой.

7800 руб.

15.05.2024    1219    3    6    

5

Мессенджеры и боты Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Управленческий учет Платные (руб)

Универсальная система сообщений для конфигураций 1С: Предприятие 8.3. Позволяет пользователям обмениваться текстовой информацией и ссылками на объекты (документы, справочники и др.). Система универсальна, подойдет для любой организации. Реализовано на управляемых формах (тонкий клиент) по технологии расширений 1С. Конфигурация останется на поддержке (для автоматического обновления).

4800 руб.

29.03.2021    16571    3    10    

8
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Dnki 4 03.10.20 11:25 Сейчас в теме
Из фразы "менеджеры отправляют ... и получают ответы от руководителей" я понял, что механизм используется для сообщений внутри компании. А не с клиентами.
Вот несколько картинок, как это выглядит, не помешали бы. Интереснее было бы читать.
2. FirePyres 71 05.10.20 11:23 Сейчас в теме
В основном я хотел поделиться как я реализовал обратную связь от вайбера без прямого https.
3. pawellkrv 25 25.02.21 18:15 Сейчас в теме
Задолбался искать необходимый "учебник". Можешь дать ссылку как и где все это накопал? Скачал твою *.cf, с пол пинка заработало на отправку сообщений. WebHook у меня на PHP готовый взят и размещен Интернет сервере где крутиться сайт конторы. Вот как получать сообщения??? буду разбираться, нужен источник информации с хорошей теоретической составляющей. Ибо нет ничего лучше понимания!! :)
Хочу доделать GET метод. Низамов просит нереальные деньги :)
4. pawellkrv 25 03.03.21 15:38 Сейчас в теме
В этом посте много чего упущено но основа есть и это хорошо,
ссылка по теме Реализация для Telegram
поэтапная реализация с диагностикой
5. assa 61 03.04.23 00:42 Сейчас в теме
Приветствую. Что я не доделал? Все кнопки формы на отправление работают. После ответа администратора на согласование ничего не происходит и в отладчике событие не ловится.
6. assa 61 03.04.23 01:31 Сейчас в теме
С отловом события в отладики разобрался.
При такой конструкции валится в ошибку
Процедура ОбработатьЗапрос(Запрос) Экспорт 
	
	Попытка
		
		СтруктураДанных = ПрочитатьJSON(Запрос.ПолучитьТелоКакСтроку()); //здесь валится в ошибку
		
		Отправитель = СтруктураДанных.Получить("sender");
	        Сообщение = СтруктураДанных.Получить("message");
Показать

Пришлось немного переделать
Функция ОбъектJSON(СтрокаJSON) Экспорт
	
	Чтение = Новый ЧтениеJSON;
	Чтение.УстановитьСтроку(СтрокаJSON);
	ОбъектJSON = ПрочитатьJSON(Чтение);
	Чтение.Закрыть();
	
	Возврат ОбъектJSON;	
	
КонецФункции

Процедура ОбработатьЗапрос(Запрос) Экспорт 
	
	Попытка
		
		СтруктураДанных = ОбъектJSON(Запрос.ПолучитьТелоКакСтроку());
		
		Отправитель = СтруктураДанных.sender;
		Сообщение = СтруктураДанных.message;
Показать

и все заработало. Но почему отправляет 8 раз???
Прикрепленные файлы:
Оставьте свое сообщение