Облачный Битрикс24 и посттрекинг — SOAP-интеграция через AWS Lambda

Мне нравится использовать бессерверные технологии AWS: Lambda и API Gateway для настройки облачного Битрикс24.
Это удобно, просто, элегантно и очень дешево.

Например, AWS Lambda дает нам возможность бесплатно проверять номера отслеживания почтовых отправлений в течение первого года через службу Post SOAP. Через год, если мои измерения и расчеты верны, проверка 100 000 номеров отслеживания почтовых отправлений будет стоить около 12 долларов.

Что нам для этого понадобится:

  1. Получите логин и пароль для интеграции на сайте Почты России:

  2. Подготовьте Lambda Layer с библиотекой для работы с SOAP. Я выбрал библиотеку Zeep с открытым исходным кодом. Как упаковать библиотеку Python3 Zeep в Lambda Layer, я писал ранее в своем блоге:

  3. На стороне Битрикс24 нам нужно создать входящий вебхук с правом отправки сообщений и с доступом к универсальным спискам (в моем случае) или, возможно, к CRM — смотря куда нужно сохранить результат проверки.

  4. Написать в Битрикс24 бизнес-процесс, который будет вызывать исходящий вебхук, передавая ему номер отслеживания поста, а также идентификатор элемента и информационный блок, в котором необходимо сохранить результат проверки.

  5. Напишите функцию AWS Lambda, которая получает данные из Битрикс24, запрашивает статус номера отслеживания из службы Post SOAP и возвращает результат в Битрикс24 через входящий вебхук.

  6. Настройте шлюз API для нашей функции Lambda. Я подробно описал этот процесс ранее:

Хочу рассказать о сценариях интеграции посттрекинга, которые я реализовал в облачном Битрикс24 для своей компании.

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

1.png

Для этого списка я реализовал 2 бизнес-процесса: Первый — простой, который позволяет мне быстро проверить номер для отслеживания вручную и получать данные в личных сообщениях на портале:

2.png

Единственное действие, которое выполняет этот бизнес-процесс, — это вызов веб-перехватчика.

3.png

Обработчик этого вебхука на стороне AWS Lambda выглядит так:

import json
from zeep import Client
from botocore.vendored import requests
from urllib.parse import parse_qs

def lambda_handler(event, context):
    
    url="
    barcode = event['barcode']
    my_login = '************'
    my_password = '**********'
    
    client = Client(url)
    
    OperationHistoryRequest= {
        "Barcode":barcode,
        "MessageType":0,
        "Language":"RUS"
        }
                
    AuthorizationHeader= {
        "login":my_login,
        "password":my_password
        }
        
    with client.settings(strict=False):       
        result = client.service.getOperationHistory(OperationHistoryRequest,AuthorizationHeader)
    
    info='\n'
    FinalStatus=""
    
    for item in result:
        try:
            info=info+' '+str(item['OperationParameters']['OperDate'])[:10]+' '
        except:
            pass
        
        try:
            info=info+' '+str(item['AddressParameters']['OperationAddress']['Index'])+' '
        except:
            pass
        
        try:
            info=info+' '+str(item['OperationParameters']['OperAttr']['Name'])+' '
        except:
            pass
        
        try:
            FinalStatus=str(item['OperationParameters']['OperAttr']['Name'])
        except:
            pass
        
        info=info+'\n'
        
    data = {
            "user_id": 1,
            "message": barcode+' '+info+'\n '+FinalStatus
        }

    response = requests.get('
    
    return {
        'statusCode': 200,
    }

Я запускаю этот бизнес-процесс вручную:

4.png

После этого мне приходит личное сообщение со всей историей перемещения письма и его текущим статусом:

5.png

Второй — большой бизнес-процесс запускается автоматически при изменении записи в списке:

6.png

Проверки бизнес-процессов в этом письме, входящие или исходящие. Для входящих ничего не делает. Трек-номер для исходящего письма появляется не сразу, потому что я ввожу запись в список, когда упаковываю документы в конверт, а трек-номер заполняю позже, когда получаю почтовые квитанции, поэтому бизнес-процесс проверяет, есть ли трекинг-номер уже есть, а если еще нет — ждет 3 дня. Если номер отслеживания уже существует, бизнес-процесс вызывает веб-перехватчик.

7.png

Его обработчик аналогичен тому, что я уже показывал, но также статус записывается в поле «Статус» списка. Как обновить список из функции AWS Lambda, я тоже писал ранее в блоге:

После вызова вебхука я вставил в бизнес-процесс паузу в 5 минут, чтобы дать время обработчику на стороне AWS Lambda для обработки. После этого бизнес-процесс проверяет, не перешел ли трек-номер в конечный статус «Доставлено» — если да, то цикл перестает крутиться. Если статус не достигнут, то через 3 дня процесс повторяется. Этот процесс работает сам по себе и освобождает меня от рутинной работы.

8.png

Все, что мне нужно для того, чтобы увидеть статус моих отправленных писем, это зайти в свой список и установить необходимые фильтры. Аналогично возможна интеграция облачного Битрикс24 с любой внешней системой, которая может отдавать данные по SOAP или предоставляет API в любой форме.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *