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

02.10.20

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

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

Скачать файлы

Наименование Файл Версия Размер
Мой пример интеграции с Viber:
.cf 17,60Kb
13
.cf 17,60Kb 13 Скачать

Руководством была поставлена задача взаимодействия с клиентами через 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 Вибер Вайбер

См. также

SALE! 25%

Конструктор ботов Телеграм, редакция 2

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

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

15000 11250 руб.

18.06.2021    58661    291    255    

345

SALE! 25%

Что нам стоит бота построить? Нарисуем - будет жить! Графический конструктор телеграм-ботов/Telegram

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

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

13200 9900 руб.

27.12.2021    33273    80    157    

174

Легкий документооборот (+чат-бот для Telegram)

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

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

14900 руб.

15.11.2018    27783    25    48    

57

Email, SMS, Telegram рассылки из 1С - Директ Маркетинг

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

Полный набор инструментов для качественных транзакционных и маркетинговых Email, SMS, Telegram рассылок из 1С. Даже простые уведомления об оплате счетов способны существенно упростить сбор дебиторской задолженности. Применение всех возможностей прямого маркетинга выводит коммуникацию с клиентами, уровень сервиса и лояльность на новый уровень.

7788 руб.

07.04.2014    83610    40    191    

127

Интеграция 1С с телефонией и чатами WhatsApp и Telegram

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

Интеграция 1С с телефонией и чатами WhatsApp и Telegram автоматизирует работу оператора со звонками и чатами и добавит вашей 1С элементы CRM системы. Храните всю историю взаимоотношений в 1С, не теряйте звонки, скачивайте, прослушивайте в любое время из карточки клиента или журнала звонков, держите руку на пульсе, используя блок отчетов по звонкам. Интегрируйте вашу 1С и чатами WhatsApp и Telegram, общайтесь с клиентами с единого номера и в одном окне. Теперь чаты с клиентами хранятся в карточке партнера в 1С, а не в личных мобильных ваших менеджеров.

4100 руб.

28.04.2022    13851    11    6    

36

Отправка в Telegram отчетов, печатных форм, присоединённых файлов и произвольных вложений. Загрузка получателей. Хранение истории отправок.

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

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

4800 руб.

26.12.2023    2199    1    0    

5
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Dnki 4 03.10.20 11:25 Сейчас в теме
Из фразы "менеджеры отправляют ... и получают ответы от руководителей" я понял, что механизм используется для сообщений внутри компании. А не с клиентами.
Вот несколько картинок, как это выглядит, не помешали бы. Интереснее было бы читать.
2. FirePyres 70 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 раз???
Прикрепленные файлы:
Оставьте свое сообщение