Получение, обработка и отправка сообщений из очереди RabbitMQ в канал Teams

17.02.22

Интеграция - Внешние источники данных

Статья о том, как можно получать сообщения из очередей RabbitMQ, обрабатывать эти сообщения и отправлять их в каналы Teams

Файлы

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

Наименование Скачано Купить файл
Получение, обработка и отправка сообщений из очереди RabbitMQ в канал Teams:
.zip 1,02Kb
4 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Работая в большом проекте, с огромным числом пользователей, для поддержки критически важно получать оповещения о проблемах как можно быстрее. Не все системы мониторинга могут предоставить инструменты для мониторинга сложных бизнес процессов из коробки. Многое специфическое приходится писать самостоятельно. Для того, что бы быть уверенным, что в случае проблемы заинтересованные сотрудники получат сообщения, приняли решение использовать RabbitMQ. В очереди помещаем сообщения, которые являются результатом работы самописных скриптов, которые по сложной логике генерят сообщения в случае отклонения каких-либо показателей бизнес процессов от нормы. 

Для того, что бы как можно быстрее поддержка была оповещена о проблемах, был написан скрипт на Python, который запускается как служба Windows. Скрипт выполняет следующие задачи:

  1. Получает сообщения из очереди RMQ.
  2. Обрабатывает полученное сообщение и отправляет сообщения в канал в Teams.

 

Получение сообщений из очереди:

Для начала требуется настроить входящий веб перехватчик в канале Teams:

1. Зайдем в настройки канала Teams

 

 

2. Добавим "Входящий веб-перехватчик"

 

 

Добавляем имя соединителя, получаем ссылку и сохраняем ее. Ссылку на соединитель нужно будет указать в файле config.py

Если Входящий веб-перехватчик  уже добавлялся, то ссылку на него можно найти в "УПРАВЛЕНИЕ" - "Настроено"

 

Заполним значения переменных в конфигурационном файлике.

Файл config.py выглядит так:

# rmq
rmq_server = 'имя сервера rabbitmq'
rmq_port = порт
rmq_queue_name = 'имя очереди'
rmq_user_name = 'имя пользователя'
rmq_user_password = 'пароль пользователя'
# teams
teams_channel = 'url адрес настроенного соединителя в канале Teams'
# service
service_name = 'Имя службы'
service_display_name = 'Видимое имя службы'

 

Для получения сообщения из нужной очереди требуется выполнить следующий код

# Импортируем нужные модули
import pika
import pymsteams
import time
# Импортируем файл конфигурации
import config
 
 
# Задаем имя пользователя и пароль для Connection
credentials = pika.PlainCredentials(config.rmq_user_name, config.rmq_user_password)
# Создаем Connection с RMQ
connection = pika.BlockingConnection(pika.ConnectionParameters(host=config.rmq_server, port=config.rmq_port, credentials=credentials))
# Создаем оболочку channel для взаимодействия с RabbitMQ, реализующую методы и поведение для канала AMQP
channel = connection.channel()
# Получаем method_frame, header_frame и body, нас будут интересовать наличие method_frame и содержимое body
method_frame, header_frame, body = channel.basic_get(config.rmq_queue_name)

 

Обработка и отправка сообщений:

Для отправки сообщения в Teams требуется выполнить следующий код

# Начинаем бесконечный цикл
while 1:
# Проверяем наличие method_frame
    if method_frame:
        # Разбираем бинарную строку в body и делаем из нее словарь. Здесь может быть все, что угодно, мое сообщение удобнее сделать словарем
        body = dict((a.strip(), b.strip()) for a, b in (element.split('":') for element in body.decode("utf-8").split(',"')))
        # Задаем адрес соединителя с каналом в Teams
        teams_channel = config.teams_channel
        # Подключаемся к каналу
        myTeamsMessage = pymsteams.connectorcard(hookurl=teams_channel, verify=False)
        # Редактируем текст: убираем лишние слэши и меняем символы юникода, у которых удвоились слэши. Здесь тоже может быть все, что угодно
        myTeamsMessage.text(str(body["message"]).replace('\\r', '\r').replace('\\n', '\n').replace('\\u0027', "'").replace('\\u003e', '>'))
        # Задаем цвет текста
        myTeamsMessage.color("#003333")
        # Задаем заголовок сообщения
        myTeamsMessage.title("¡alarm!")
        # Отправляем сообщение
        myTeamsMessage.send()
        # Сообщаем RMQ, что мы забрали сообщение, после этого сообщение из очереди удаляется
        channel.basic_ack(method_frame.delivery_tag)
        # Спим 10 секунд
        time.sleep(10)
    else:
        # Если method_frame нет спим 10 секунд
        time.sleep(10)

 

Создание службы Windows

Для того, что бы данный код выполнялся как служба Windows, требуется использовать библиотеки pywin32 и добавить код для объявления, запуска и остановки службы. Окончательно код должен выглядеть так

import pika
import pymsteams
import time
import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
import config
 
 
class AppServerSvc (win32serviceutil.ServiceFramework):
    _svc_name_ = config.service_name
    _svc_display_name_ = config.service_display_name
 
    def __init__(self,args):
        win32serviceutil.ServiceFramework.__init__(self,args)
        self.hWaitStop = win32event.CreateEvent(None,0,0,None)
        socket.setdefaulttimeout(60)
 
    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)
 
    def SvcDoRun(self):
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                              servicemanager.PYS_SERVICE_STARTED,
                              (self._svc_name_,''))
        self.main()
 
    def main(self):
        # Здесь находится код из п.1 и п. 2 инструкции
        while 1:
            credentials = pika.PlainCredentials(config.rmq_user_name, config.rmq_user_password)
            connection = pika.BlockingConnection(pika.ConnectionParameters(
                host=config.rmq_server, port=config.rmq_port, credentials=credentials))
            channel = connection.channel()
            method_frame, header_frame, body = channel.basic_get(config.rmq_queue_name)
            if method_frame:
                body = dict((a.strip(), b.strip()) for a, b in (element.split('":') for element in body.decode("utf-8").split(',"')))
                teams_channel = config.teams_channel
                myTeamsMessage = pymsteams.connectorcard(hookurl=teams_channel, verify=False)
                myTeamsMessage.text(str(body["message"]).replace('\\r', '\r').replace('\\n', '\n').replace('\\u0027', "'").replace('\\u003e', '>'))
                myTeamsMessage.color("#003333")
                myTeamsMessage.title("¡alarm!")
                myTeamsMessage.send()
                channel.basic_ack(method_frame.delivery_tag)
                channel.basic_ack(method_frame.delivery_tag)
                connection.close()
                time.sleep(10)
            else:
                connection.close()
                time.sleep(10)
 
 
if __name__ == '__main__':
    win32serviceutil.HandleCommandLine(AppServerSvc)

 

Для того, что бы создать службу Windows, требуется запустить в cmd, открытой под администратором следующую команду

<"путь к python.exe"> <"путь к python файлу со скриптом"> install

При запуске возможны проблемы, т.к. в папке, где находится "pythonservice.exe", по умолчанию это "C:\Program Files\Python<XX>\Lib\site-packages\win32" может не быть библиотек python<XX>.dll, pythoncom<XX>.dll и pywintypes<XX>.dll.

XX - версия Python(например python39.dll, pythoncom39.dll, pywintypes39.dll)

Эти файлы можно найти в папках:
python<XX>.dll  - C:\Program Files\Python<XX>

pythoncom<XX>.dll и pywintypes<XX>.dll - C:\Program Files\Python<XX>\Lib\site-packages\pywin32_system32

Достаточно просто скопировать эти файлы  в папку "C:\Program Files\Python<XX>\Lib\site-packages\win32"

Вступайте в нашу телеграмм-группу Инфостарт

Teams rmq rabbit python pywin32 pika pymsteams

См. также

Внешние источники данных Разработчик Аналитик Пользователь 1С:Предприятие 8 1C:Бухгалтерия Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

35000 руб.

15.11.2022    33094    50    49    

50

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

Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!

31720 руб.

27.03.2025    90713    67    44    

77

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Системный администратор Разработчик 1С:Предприятие 8 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (Базовая, ПРОФ, КОРП, ФРЕШ (тонкий клиент)).

17080 руб.

19.12.2016    55145    128    107    

86

Производство готовой продукции (работ, услуг) Внешние источники данных 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

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

10370 руб.

24.06.2021    26533    65    55    

48

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

Решение позволяет по ИНН производить проверку контрагентов, получая сведения: видов деятельности, данных ЕГРЮЛ, связанных организаций, отчетности, налогов, финансовый анализ, а также в один клик заполнить карточки справочников контрагентов/партнеров по ИНН в программе 1С по данным ФНС. Попробуйте ДЕМО версию перед покупкой.

5000 руб.

12.08.2025    4214    12    20    

12

Инструменты администратора БД Корректировка данных Мониторинг Учет документов 1С 8.3 1С:Управление торговлей 10 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Розница 3.0 Платные (руб)

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

6100 руб.

11.06.2026    823    2    0    

4
Для отправки сообщения требуется регистрация/авторизация