Отправка сообщений в Telegram из VBA
Использование мессенджеров (Viber, Telegram, WhatsApp) заметно упростило и разнообразило общение людей, позволив все время находится “на связи”, и не быть привязанными к компьютеру. В то же время пользователи мессенджеров получили куда больший функционал чем обычные SMS-сообщения, использование которых у операторов мобильной связи стала куда большей роскошью, нежели интернет трафик.
А что, если приспособить отправку сообщений в мессенджер из VBA кода, привязав к окончанию работы макроса, получению Email или настроить на периодическую отправку сообщений со статусом каких-либо показателей (% выполнения плана продаж, список незакрытых сделок и т.д.)? Не найдя подходящего решения в интернет для VBA, я решил написать свое собственное с использованием Telegram бота, о чем и хочу поделиться в данном посте. Обмолвлюсь сразу же – описанный ниже функционал НЕ ПОЗВОЛЯЕТ вести интерактивный диалог с ботом, а лишь отправлять сообщения пользователю в одностороннем порядке.
И так, приступим. Что первое необходимо сделать чтобы начать тестировать функционал отправки сообщений в Telegram через VBA? Предполагаю, что сам мессенджер у Вас уже установлен и поэтому данный этап пропустим )). Опишем следующую этапность действий:
- Создадим Telegram бота
- Напишем VBA-класс для отправки сообщений ботом
- Используем класс в нашем коде
- Создание Telegram бота
Сначала, необходимо настроить бота, через которого Вы будете отправлять сообщения. Для этого a) Найти в Telegram пользователя @BotFather и начните диалог с помощью кнопки Start
b) Отправьте боту команду /newbot, которая отвечает за создание новых ботов

c) Задайте имя своего нового бота согласно инструкциям и подсказкам



d) Получите токен для вашего бота в ответном письме @BotFather (см. рис. выше) e) Найдите своего бота в мессенджере и начните переписку


f) Получите ID чата (вашей переписки с ботом). Для этого в окне браузера введите следующую команду:
где – это токен, полученный от @BotFather.
В нашем тестовом примере токен был 781500114:AAECOTrby1zuQ0afGozyRlvua5CMGezT9IA Таким образом, получим следующую строку:
При переходе по указанному адресу, браузер выдаст ответ в котором содержится необходимая информация – id чата
g) Сохраните данные о токене и chat ID для дальнейшего использования в скрипте
- Написание класса для отправки сообщений ботом
Задумка написания класса для отправки ботом сообщений была следующая: указываем имя бота, указываем имя получателя, текст сообщения и отправляем месседж. Для этого имя бота и получателя зададим как свойства класса, для того, чтобы можно было обращаться к ним не по токену и id, а по именам.
Private ms_current_chatbot As String Private ms_current_user As String Public Property Let ChatBot(ByVal Value As String): ms_current_chatbot = Value: End Property Public Property Get ChatBot() As String: ChatBot = ms_current_chatbot: End Property Public Property Let UserName(ByVal Value As String): ms_current_user = Value: End Property Public Property Get UserName() As String: ChatBot = ms_current_user: End Property
Таким образом мы определили два свойства: ChatBot, UserName с помощью которых мы будем задавать нашему классу два входящих параметра: имя нашего бота и имя получателя. Сами значения токена и id будем получать на основе заданных имен отдельными функциями внутри класса (они не будут видны извне):
Private Function getChatToken() As String '******************************** 'Purpose: Function retrieves token for bot 'Result: getChatToken gets value of token '******************************** If Len(ms_current_chatbot) > 0 Then Select Case ms_current_chatbot '---- other cases can be added below here ---- Case "OfficeScripts_test": getChatToken = "781500114:AAECOTrby1zuQ0afGozyRlvua5CMGezT9IA" Case Else: getChatToken = vbNullString End Select Else: getChatToken = vbNullString End If End Function
Private Function getChatID() As String '******************************** 'Purpose: Function retrieves user chat id 'Result: getChatID gets value of chat id '******************************** If Len(ms_current_user) > 0 Then Select Case ms_current_user '---- other cases can be added below here ---- Case "Aleksandr": getChatID = "xxxxxxxxx" 'Substitute xxxxxxxxx with your real ID Case Else: getChatID = vbNullString End Select Else: getChatID = vbNullString End If End Function
Осталось описать главную часть нашего класса – функцию отправки сообщения. Для того чтобы отправить сообщение, необходимо сформировать строку определенного формата и отправить ее на сервер Telegram. Часть строки будет всегда неизменной, и поэтому ее логично задать константой, а другие части зададим переменными, из которых и будем формировать строку.
Постоянную часть определим константой TELEGRAM_URL:
Private Const TELEGRAM_URL As String = “https://api.telegram.org/bot»
А прочие части будем строки (URL) формировать на лету следующим образом:
'//Getting URL string URL = TELEGRAM_URL & getChatToken & "/sendMessage?" & _ "chat_id=" & getChatID & "&" & _ "text=" & BodyText
Для отправки сообщения будем использовать библиотеку MSXML2, которая должна будет инициализироваться при определении класса. Сохраним ее в переменную mobj_httpRequest , которой и будем передавать нашу строку URL.
Есть, однако, один нюанс, который нельзя не озвучить: Строка URL должна быть совместима с WEB стандартами (не содержать пробелов, спец.символов и т.д.) и для этого ее необходимо конвертировать в нужный нам стандарт. Для этого я воспользовался функцией URLEncode пользователя parkone на GitHub и конвертировал сообщение перед отправкой с помощью этой функции.
Public Function sendMessage(ByVal BodyText As String) As Boolean '******************************** 'Purpose: Function sends telegram message to user 'Arguments: BodyText - message text 'Result: True - message was sent successfully ' False - message wasn't sent '******************************** Dim URL As String Dim iCount As Integer If Not mobj_httpRequest Is Nothing Then If Len(ms_current_chatbot) > 0 And Len(ms_current_user) > 0 Then '//Converting chars to url format BodyText = URLEncode(BodyText) '//Getting URL string URL = TELEGRAM_URL & getChatToken & "/sendMessage?" & _ "chat_id=" & getChatID & "&" & _ "text=" & BodyText mobj_httpRequest.Open "POST", URL, True mobj_httpRequest.Send On Error Resume Next iCount = 0 Do Until mobj_httpRequest.Status = 200 And mobj_httpRequest.ReadyState = 4 iCount = iCount + 1 If iCount = MAX_TRY_COUNT Then Exit Do End If Loop On Error GoTo 0 If iCount < MAX_TRY_COUNT Then sendMessage = True Else: sendMessage = False End If Else '//Chat not specified If Not SILENT_MODE Then MsgBox "Chat or User haven't been set. Please specify chat & user firstly", vbExclamation + vbOKOnly End If sendMessage = False End If Else '//MSXML object is not initialized If Not SILENT_MODE Then MsgBox "Http connection was lost", vbExclamation + vbOKOnly End If sendMessage = False End If End Function
В случае, если при отправке сообщения произошел сбой в интернет соединении, недоступность сервера и т.д. и наш запрос не был доставлен, в функции sendMessage имеется цикл, который будет повторяться несколько раз (до установленного Вами значения количества попыток), пока не отправит сообщение. Данные строки выделены подсветкой выше.
- Использование класса
В самом начале, когда нами создавался класс для отправки сообщений Telegram, ему было присвоено имя по умолчанию, которое лучше изменить на что-то более значащее и понятное. Я присвоил классу имя clTelegramNotifier. Использовать его в коде довольно просто, если изначально был четко определен желаемый алгоритм работы, о чем было написано в начале второго раздела. Мы хотели задать имя получателя, имя бота, указать какой текст мы хотим отправить и получить наше сообщение на телефоне, что мы в итоге и сделали.
Sub test_telegram() Dim Telegram As clTelegramNotifier Dim text As String Set Telegram = New clTelegramNotifier If Telegram.Initialized Then Telegram.ChatBot = "OfficeScripts_test" Telegram.UserName = "Aleksandr" text = [b2].Value2 If Telegram.sendMessage(text) Then Debug.Print "OK" End If End If Set Telegram = Nothing End Sub
Данную процедуру в рамках тестирования я поместил на кнопку на листе и передавал ей как параметр текст из ячейки [B2]. Результат видно на рисунке ниже. А сам класс можно скачать в конце данного поста.
Как создать viber бота с помощью vba
Уважаемые специалисты, добрый день.
Убил 2 дня на поиск макроса для отправки сообщений (оповещений) через VBA Excel в Вайбер , но так пока и не нашел как это сделать.
Через телеграм макрос составить получилось (post запрос), через Outlook оповещение использую в своих файлах.
Рассылка оповещений через Вайбер была бы следующей ступенькой в изучении VBA.
Есть developers.viber.com/docs/api/, но там php, Python, непонятно как составить post запрос.
Как создать бота в Вайбер (получить токен) понятно, т.к. есть много видео по этому вопросу, а вот как отправить текст из VBA пока не понятно.
Очень рассчитываю, что кто-нибудь из наисветлейших увидит эту тему и поделится важной информацией.
Изменено: avk_37 K — 18.07.2021 23:15:00
Пользователь
Сообщений: 4 Регистрация: 31.05.2022
08.06.2022 22:12:56
Трудно. Я был обращается служба подержки Вайбер. Они ответ мне ,,Бот-аккануты не могут отправлять сообщения в каналы или сообщества.
При подключении бот-аккаунта к сообществу или каналу, в чате появляется кнопка быстрого перехода из бота в канал и обратно.
Подключить бот таким образом, чтобы он самостоятельно отправлял сообщения в чат канала/сообщества, к сожалению, невозможно.
Best regards,
Owen V.
Content Team Lead,,
Я думать есть вариант.
Пользователь
Сообщений: 4 Регистрация: 31.05.2022
21.06.2022 23:56:24
Я сам сделать нашел работает отправка Viber
Sub Viber() Dim objpostHTTP As Object Dim JsonBody As String JsonBody = "<""auth_token"":""(API Ключ)"",""receiver"":""(Уникальний ID Чат)"",""type"":""text"",""text"":""Написати Привет"">" 'here I am pulling creating json body Dim apiresult As String Set objpostHTTP = CreateObject("MSXML2.ServerXMLHTTP") Url = "https://chatapi.viber.com/pa/send_message" objpostHTTP.Open "POST", Url, False objpostHTTP.setRequestHeader "Content-type", "application/json" objpostHTTP.Send (JsonBody) apiresult = objpostHTTP.responseText If objHTTP.Status = "200" Then MsgBox (objHTTP.responseText) End If End Sub
Чат-бот в Viber: автоматизация обслуживания клиентов и увеличение продаж

Viber регулярно используют более 1 миллиарда человек по всему миру. Мессенджер распространен больше чем в 190 странах мира, включая Украину, Японию, Индию, Испанию и другие. Только в США Viber используют около 30 миллионов человек. Такая популярность трансформировала мессенджер в эффективный бизнес-инструмент для коммуникации с целевой аудиторией. Поэтому, если ваши потенциальные клиенты и покупатели также используют Viber, самое время подключить чат-бота и автоматизировать свою работу.
Чат-бот — это программа, которая может коммуницировать с клиентами на основании заранее продуманного сценария или на базе искусственного интеллекта. Наверняка вы уже встречались с такими виртуальными помощниками на сайтах и в мессенджерах интернет-магазинов. Ниже вы видите наиболее распространенный список задач, которые может решать чат-бот в Viber:
- отвечать на часто задаваемые вопросы;
- рассказывать о компании;
- отправлять прайс;
- принимать заявки для менеджеров;
- оформлять бронь или заказ;
- принимать оплату;
- отправлять акционные предложения;
- рассказывать об ассортименте.
Задачи чат-бота отличаются в зависимости от целей компании, сферы бизнеса, целевой аудитории.
Почему чат-бот сегодня так важен для бизнеса
Виртуальный помощник может существенно разгрузить службу поддержки, повысить скорость обслуживания клиентов, увеличить уровень лояльности к бренду и, тем самым повысить его конкурентоспособность на рынке. Важно отметить, что чат-бот работает в любое время дня и ночи без перерыва на обед и выходных. Он может одновременно взаимодействовать с десятками потенциальных клиентов, отвечая на разные вопросы, что для обычного человека просто невозможно.
Благодаря автоматизации рассылки маркетинговых сообщений через мессенджер и приему оплат, увеличивается количество продаж и сокращается время закрытия сделки. Если товар дорогостоящий или сложный, то с помощью чат-бота можно продвинуть потенциального клиента вниз по воронке продаж, прогреть его, подвести к покупке и затем передать менеджеру для закрытия сделки. Такой подход повышает эффективность работы и помогает повысить прибыль компании.
Однако, работа с клиентами это далеко не единственное направление использования чат-бота в Viber. Виртуальный помощник может еще оптимизировать взаимодействие между сотрудниками или помочь новичкам влиться в коллектив. Например, с помощью чат-бота работники могут бронировать переговорную комнату, запрашивать необходимую информацию, узнавать о важных изменениях в графиках или процессах работы и многое другое.
Преимущества использования чат-ботов в Viber для бизнеса
Ознакомьтесь с основными преимуществами подключения чат-бота в Viber:
- помогает улучшить пользовательский опыт;
- в разы сокращает время ожидания ответа;
- повышает уровень конверсии;
- улучшает пользовательский опыт;
- увеличивает количество продаж;
- повышает уровень удержания клиентов;
- помогает снизить затраты на персонал;
- позволяет круглосуточно коммуницировать с потенциальными клиентами и покупателями;
- помогает собрать больше информации о пользователях, сегментировать их и проанализировать поведение;
- позволяет улучшить маркетинговую и коммуникационную стратегию на основании собранных о клиентах данных.
Читайте дальше, чтобы больше узнать о чат-ботах в Viber, и увидеть, какими они бывают.
Примеры чат-ботов в Viber
Украинская сеть магазинов для семейного шопинга YUKI использует чат-бот в Viber, чтобы клиенты могли отслеживать бонусы на карте лояльности, узнавать новости и адреса торговых точек в разных городах.

Группа компаний АЛЛО, которая занимается дистрибьюцией электронной техники, также успешно использует мессенджер для взаимодействия с клиентами. С помощью чат-бота покупатель может узнать информацию о своем заказе, ознакомиться с действующими акциями, узнать адреса магазинов, оставить жалобу или предложение, а также обратиться в службу поддержки, чтобы получить ответ специалиста.

Обратите внимание, что в сценарие чат-бота предусмотрена возможность вернуться на шаг назад и изменить свой выбор. Это важно, поскольку человек может ошибиться или случайно кликнуть не на ту кнопку.
Европейская сеть медицинских лабораторий Synevo использует чат-бота в Viber, чтобы клиенты могли узнать адреса, получить свои результаты, ознакомиться со скидками и заказать услугу онлайн.

Пользователь может выбирать разные пакеты анализов, которые оформлены в виде карточек товаров, и откладывать их в корзину, после чего перейти в нее одним кликом и приступить к их оформлению. Это делает процесс взаимодействия клиента с лабораторией простым и удобным.
В следующем разделе вы узнаете, как разработать чат-бота для своего бизнеса, с чего начать и сколько это будет стоить.
Как создать чат-бота в Viber для своего бизнеса
Существует два способа разработки чат-бота для Viber. Первый подразумевает использование кода и привлечение профессионального разработчика или даже целой команды, которая сможет не только создать виртуального помощника, но и поддерживать его функционирование. Этот способ достаточно затратный, поэтому часто оказывается слишком дорогим не только для малого, но и для среднего бизнеса.
Второй вариант разработки чат-бота подходит абсолютно всем и заключается в использовании визуальных конструкторов. На рынке сегодня представлено огромное количество платформ, которые предоставляют возможность создать виртуального помощника с нуля без знания кода и других специальных навыков. Более того, некоторые из них имеют бесплатный тариф, что идеально подходит для малого бизнеса. Вот лишь небольшой список визуальных конструкторов, которые вы можете использовать для разработки чат-бота в Viber: SendPulse, ManyChat, Chatfuel, Joonbot, Snatchbot.me и другие.
Платформы отличаются тарифными планами, интерфейсом и функционалом, несмотря на то, что все они очень похожи. Поэтому, прежде чем приступить к процессу разработки своего виртуального помощника, важно внимательно изучить инструменты и возможности конструкторов. Особое внимание стоит обратить на наличие службы поддержки, обучающие материалы, тарифные планы и их описание. Далеко не все платформы предоставляют возможность бесплатно создать, использовать и в дальнейшем редактировать чат-бота.
Зачастую в конструкторах есть пробный период, который длится 7-14 дней и позволяет ознакомиться с функционалом. В дальнейшем, чтобы использовать виртуального помощника, необходимо приобрести платный пакет. Однако, даже на платном тарифе не всегда есть возможность редактировать сценарий чат-бота после его создания, а именно добавлять нужные цепочки сообщений. Поэтому, чтобы не выйти за рамки своего бюджета при выборе визуального конструктора, следуйте следующим рекомендациям.
- Продумайте сценарий чат-бота. Прежде, чем приступить к выбору платформы, проведите небольшое исследование и ознакомьтесь с ботами разных компаний. Особое внимание обратите на виртуальных помощников своих конкурентов. Установите цели и задачи, которые вы хотели бы делегировать своему чат-боту. Подумайте, на какое вопросы он будет отвечать, что должен будет уметь. Это позволит понять требования к функционалу конструктора, например, наличие возможности подключения платежной системы для приема оплат.
- Выберите несколько платформ для сравнения. Составьте список из тех конструкторов, которые на первый взгляд привлекут ваше внимание. Дополнительно вы можете проанализировать их сайты и страницы в социальных сетях, изучить отзывы о них, время работы на рынке и ознакомиться с другими продуктами, которые компании предлагают. Например, если помимо Viber вы используете еще Telegram или WhatsApp, то посмотрите, есть ли возможность создания чат-бота и для этих каналов.
- Изучите функционал выбранных платформ. Ознакомьтесь со всеми маркетинговыми инструментами и возможностями, которые предоставляет компания. Особенно это важно если вы используете для работы с аудиторией разные каналы коммуникации.
- Ознакомьтесь с инструментами автоматизации. Посмотрите, есть ли возможность объединять в одну маркетинговую стратегию несколько каналов коммуникации. Например, объединять чат-бота в Viber с email рассылками, SMS и выстраивать автоматические воронки продаж в CRM.
- Изучите тарифы. Тщательно изучите возможности бесплатного и платных пакетов. Обратите внимание, есть ли возможность обратиться за помощью к менеджерам. Узнайте, от чего зависит стоимость тарифов, на каких языках работает интерфейс и служба поддержки.
- Используйте пробный период. Не торопитесь сразу приступать к покупке пакета и разработке чат-бота. Выделите время, чтобы ближе ознакомиться с интерфейсом. Убедитесь, что вам легко с ним работать и что сервис работает без перебоев. Визуальные конструкторы представляют собой SaaS-платформы, которые работают онлайн без необходимости скачивания и установки какого-либо программного обеспечения. Поэтому, важно заранее убедиться в стабильности работы выбранного сервиса.
Такой подход к выбору конструктора требует времени и определенных усилий, однако позволит избежать перерасхода бюджета из-за непредвиденной смены тарифного плана, а также негативных отзывов клиентов из-за сбоев в функционировании чат-бота.
Теперь, когда вы знаете, как подготовиться к созданию виртуального помощника, давайте посмотрим, как выглядит процесс его разработки. Ниже вы видите интерфейс визуального конструктора чат-ботов SendPulse. Кабинет разработки доступен сразу после регистрации и подключения Viber. Слева на рабочем столе расположены функциональные блоки, из которых собирается чат-бот, а справа — панель их настройки.

Для построения сценария необходимо брать блоки из меню слева, перетаскивать их на рабочее поле, соединять с предыдущими блоками и выполнять их настройку в панели справа.

Так шаг за шагом, вы выстраиваете цепочку сообщений на основании которой в дальнейшем чат-бот будет коммуницировать с потенциальными клиентами и покупателями. Как видите, для работы с визуальным конструктором не нужны никакие знания кода или другие специальные навыки. Вы просто собираете сценарий, как пазл. Это удобно, быстро и практично.
Чат-бот в Viber уже давно перестал быть трендом или интересной игрушкой. Сегодня это эффективный инструмент автоматизации продаж и коммуникации с аудиторией, который помогает повысить результативность работы уже с первых дней использования.
Как написать Viber чат-бота, работающего с АСУ ТП на базе ПЛК Siemens
В данном руководстве рассмотрено создание чат-бот помощника в Viber на языке программирования Python. Чат-бот имеет доступ к базе данных MySQL, которая в свою очередь связана с АСУ ТП (автоматизированной системой управления технологическим процессом), разработанной на базе логического контроллера Siemens серии S7-1500.
Чат-бот автоматизирует передачу информации о течение технологического процесса конечному пользователю, позволяет получать доступ к собранным данным с любого устройства (на котором, конечно, установлен Viber) и в любом месте.
Руководство рассчитано на инженеров-программистов, работающих в сфере автоматизации ( АСУ ТП или АСУП ).

Для реализации данной идеи необходимо знать:
- Основы программирования контроллеров Siemens серии S7-1200/1500
- Базовые принципы работы баз данных и языка запросов SQL
- Язык программирования Python
Итак, весь материал будет разбит на две части:
- Установка и конфигурация всех необходимых приложений
- Написание программ
Установка и конфигурация приложений
- Установить TIA Portal v16 из официального источника можно по ссылке.
В разделе TRIAL Download STEP 7 Basic/Professional, STEP 7 Safety Basic/Advanced and WinCC Basic/Comfort/Advanced and WinCC Unified скачиваем DVD 1 Setup и при установке выбираем Step 7 Professional и WinCC Advanced. А также в разделе TRIAL Download STEP 7 PLCSIM скачиваем и устанавливаем DVD 1 Setup — это симулятор, который позволяет тестировать ПО без физического контроллера.
После установки в новом проекте TIA Portal необходимо сконфигурировать ПЛК серии S7-1200/1500 (можно выбрать любой, главное не резервируемый) и панель оператора. Конфигурация, используемая мной на рисунке ниже.
Далее создаётся глобальный дата блок, например, «test» с переменной «test». Переменную добавляем в HMI Tags, так как связь с базой данных MySQL будет реализована на стороне HMI клиента, в данном примере это панель оператора TP1200 Comfort. Программное обеспечение HMI разрабатывается в WinCC Advanced, интегрированной в TIA Portal (да-да, немного запутано). Средства WinCC позволяют писать код на VBScrpt, который и будет реализовывать обмен данными между ПЛК и БД MySQL.
Для подключения БД к TIA Portal необходимо дополнительно скачать и установить 32-ух разрядный ODBC драйвер по ссылке. После установки открываем командную строку (cmd) и запускаем MySQL: mysql -u root -p После ввода пароля и успешного входа необходимо создать и настроить базу данных с таблицей: CREATE DATABASE Siemens; USE Siemens; CREATE TABLE Data (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value INT
); Для настройки драйвера ODBC запускаем приложение «Источник данных ODBC» -32-ух разрядную версию и по кнопке «Добавить» необходимо выбрать MySQL ODBS 8.0 Unicode Driver.
В настройках вводим данные пользователя, сконфигурированные при установке MySQL и выбираем созданную базу данных siemens. В качестве TCP/IP Server необходимо выбрать localhost. Кнопкой Test можно проверить корректность соединения. DSN ( Data Sourse Name) вводим также, как на скриншоте. 
ПО обмена данными между БД и Siemens
'Объявление переменных Dim TableName, Uname, DBPassword, DataBaseName, SQLServer Dim SQLConnection Dim SQLConnectionString Dim SQLFields,SQLValues Dim SQLQueryString Dim SQLCommand 'Конфигурация для подключения к базе данных, все данные - строго в соотвествии с ODBC connector DataBaseName = "siemens" Uname = "ilya" DBPassword = "qwerty123" SQLServer = "127.0.0.1" TableName = "data" 'Конфигурационная строка SQLConnectionString = "Provider=MSDASQL;Initial Catalog=siemens; DSN=siemens" 'Создание объектов (команда set создаёт объект) Set SQLConnection = CreateObject("ADODB.Connection") SQLConnection.ConnectionString = SQLConnectionString 'Открытие соединения SQLConnection.Open Set SQLCommand = CreateObject("ADODB.Command") SQLCommand.ActiveConnection = SQLConnection 'Формирование запроса SQLFields = " (Value)" SQLValues = " Values('" & SmartTags("test_test") & "') " SQLQueryString = "INSERT INTO " & TableName & SQLFields & SQLValues 'Выполнение SQL запроса SQLCommand.CommandText = SQLQueryString SQLCommand.Execute 'Закрытие соединения с базой данных Set SQLCommand = Nothing SQLConnection.Close Set SQLConnection = Nothing
Данный код открывает соединение с базой данных, созданной выше. Записывает переменную «test_test» в таблицу «data». Также стоит обратить внимание, что обращение к тэгам HMI происходит через нотацию SmartTags():
VBS скрипт создаётся в дереве HMI в разделе Scripts:

Чтобы скрипт периодически исполнялся, необходимо создать для него триггер. В качестве триггера выбираем изменение переменной test_test. Во вкладке HMI находим тэг test_test и во вкладке Properties -> Events по параметру Value change добавляем вызов VBS скрипта:

Для тестирования работоспособности кода необходимо запустить PLC-SIM, выгрузить в него проект с конфигурированным контроллером, перейти в онлайн режим, активировать симуляцию HMI. Затем изменить переменную test_test. Чтобы убедиться, что запись в базу данных работает можно отправить к ней SQL запрос вручную с помощью командной строки:
use siemens SELECT * FROM data;
ПО Viber чат-бота
Для обеспечения работоспособности кода необходимо установить следующие модули:
viberbot==1.0.11 flask mysql-connector-python
Ядро чат-бота — приложение Flask, работающее с API Viber. Для локального тестирования приложения необходимо использовать ngrok . После его запуска вводим команду:
ngrok http 8443

В окне ngrok копируем ссылку https и сохраняем её, она нам скоро пригодится. Ngrok создаёт туннель, связывающий наш порт, в данном случае 8443, с https ссылкой, доступной по всему интернету. Этот https будет служить вебхуком для нашего приложения. Также пригодится токен viber чат-бота, который был получен в результате регистрации на Viber Admin Panel.
А вот и сам код чат-бота на Python 3:
#Импорт всех необходимых библиотек from flask import Flask, request, Response, session from viberbot import Api from viberbot.api.bot_configuration import BotConfiguration from viberbot.api.messages import ( TextMessage, KeyboardMessage ) from viberbot.api.viber_requests import ViberMessageRequest, ViberConversationStartedRequest import sched import threading import time import mysql.connector token = 'ВАШ ТОКЕН' class UseDataBase: '''Менеджер контекста для подключения к базе данных''' def __init__(self, config: dict) -> None: self.configuration = config def __enter__(self): self.conn = mysql.connector.connect(**self.configuration) self.cursor = self.conn.cursor() return self.cursor def __exit__(self, exc_type, exc_val, exc_tb): self.conn.commit() self.cursor.close() self.conn.close() class ViberSay(): '''Чат-бот''' def __init__(self, token): #Инициализация чат-бота данными, полученными при регистрации на Admin Panel self.viber = Api(BotConfiguration( name='TestChatBotByIlya', avatar='http://viber.com/avatar.jpg', auth_token=token)) self.app = Flask(__name__) #Создание экземпляра приложения Flask self.scheduler = sched.scheduler(time.time, time.sleep) self.scheduler.enter(5, 1, self.set_webhook, ()) self.t = threading.Thread(target=self.scheduler.run) self.t.start() #запуск потока self.app.secret_key = 'YouWillNeverGuess' #конфигурация базы данных self.app.config['dbconfig'] = self.index = 0 self.app.add_url_rule('/', 'home', self.poll, methods=['POST', 'GET']) self.app.run(host='0.0.0.0', port=8443, debug=True) #пуск приложения def set_webhook(self): #установка вебхука self.viber.set_webhook('https://06841b02dbf3.ngrok.io') def poll(self): # приём входящих сообщений, обработка и декодирование viber_request = self.viber.parse_request(request.get_data().decode('utf8')) if isinstance(viber_request, ViberConversationStartedRequest): #Определяем начало диалога с ботом session['uid'] = viber_request.user.id self.viber.send_messages(session['uid'], [ TextMessage(text='Добро пожаловать!') ]) #отправляем кнопку с предложением получить данные self.send_buttons(uid=session['uid'], text=['Получить данные'], btns=1) elif isinstance(viber_request, ViberMessageRequest): #если не начало диалога, то ждём запроса данных session['uid'] = viber_request.sender.id if viber_request.message.text == 'Получить данные': with UseDataBase(self.app.config['dbconfig']) as cursor: #ыполнение запроса к базу данных _SQL = """select Id, Value from data""" cursor.execute(_SQL) contents = cursor.fetchall() #Выбираем последнее значение из массива чисел и отправляем пользователю if self.index != contents[-1][0]: self.index = contents[-1][0] text_mes = 'Значение = <>'.format(contents[-1][1]) self.viber.send_messages(to=session['uid'], messages=[TextMessage(text=text_mes)]) #снова отправляем кнопку с предложением получить данные self.send_buttons(uid=session['uid'], text=['Получить данные'], btns=1) return Response(status=200) def send_buttons(self, uid, text, btns): #метод формирует кнопку KEYBOARD = for i in range(btns): KEYBOARD["Buttons"].append( < "Columns": 6, "Rows": 1, "BgColor": '#4169E1', "BgMedia": None, "BgMediaType": None, "BgLoop": True, "ActionType": "reply", "ActionBody": text[i], "ReplyType": "message", "Text": text[i] >) message = KeyboardMessage(tracking_data='tracking_data', keyboard=KEYBOARD) self.viber.send_messages(session['uid'], [message]) if __name__ == "__main__": ViberSay(token)
Для лучшего понимая кода можно прочитать документацию по Flask и Viber API. Для того, чтобы веб-приложение заработало необходимо:
- Cкопировать и вставить в код ваш токен от чат-бота
- Правильно проинициализировать конфигурацию чат-бота
- Указать верные настройки для подключения к базе данных
- Установить вебхук (метод set_webhook) — та самая https ссылка из ngrok
А результат всей проделанной работы таков:

Заключение
Таким образом, данный проект реализует удалённый доступ к данным, которые контролируются АСУ ТП на базе ПЛК Siemens, через привычные интерфейс повседневного мессенджера. Доступность данных позволяет качественнее управлять технологическим процессом и анализировать его на более высоком уровне.
Буду рад увидеть комментарии читателей habr, и подчерпнуть для себя пользу в свежих взглядах со стороны.
Благодарю за то, что прочитали данную статью!
