Облачный Битрикс24 и посттрекинг — SOAP-интеграция через AWS Lambda
Мне нравится использовать бессерверные технологии AWS: Lambda и API Gateway для настройки облачного Битрикс24.
Это удобно, просто, элегантно и очень дешево.
Например, AWS Lambda дает нам возможность бесплатно проверять номера отслеживания почтовых отправлений в течение первого года через службу Post SOAP. Через год, если мои измерения и расчеты верны, проверка 100 000 номеров отслеживания почтовых отправлений будет стоить около 12 долларов.
Что нам для этого понадобится:
Получите логин и пароль для интеграции на сайте Почты России:
Подготовьте Lambda Layer с библиотекой для работы с SOAP. Я выбрал библиотеку Zeep с открытым исходным кодом. Как упаковать библиотеку Python3 Zeep в Lambda Layer, я писал ранее в своем блоге:
На стороне Битрикс24 нам нужно создать входящий вебхук с правом отправки сообщений и с доступом к универсальным спискам (в моем случае) или, возможно, к CRM — смотря куда нужно сохранить результат проверки.
Написать в Битрикс24 бизнес-процесс, который будет вызывать исходящий вебхук, передавая ему номер отслеживания поста, а также идентификатор элемента и информационный блок, в котором необходимо сохранить результат проверки.
Напишите функцию AWS Lambda, которая получает данные из Битрикс24, запрашивает статус номера отслеживания из службы Post SOAP и возвращает результат в Битрикс24 через входящий вебхук.
Настройте шлюз API для нашей функции Lambda. Я подробно описал этот процесс ранее:
Хочу рассказать о сценариях интеграции посттрекинга, которые я реализовал в облачном Битрикс24 для своей компании.
Обычно я сканирую всю входящую и исходящую корреспонденцию и помещаю их в список, который создал специально для этого в Битрикс24 — Список корреспонденции. Среди прочих данных я также храню там номер отслеживания почты:
Для этого списка я реализовал 2 бизнес-процесса: Первый — простой, который позволяет мне быстро проверить номер для отслеживания вручную и получать данные в личных сообщениях на портале:
Единственное действие, которое выполняет этот бизнес-процесс, — это вызов веб-перехватчика.
Обработчик этого вебхука на стороне 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,
}
Я запускаю этот бизнес-процесс вручную:
После этого мне приходит личное сообщение со всей историей перемещения письма и его текущим статусом:
Второй — большой бизнес-процесс запускается автоматически при изменении записи в списке:
Проверки бизнес-процессов в этом письме, входящие или исходящие. Для входящих ничего не делает. Трек-номер для исходящего письма появляется не сразу, потому что я ввожу запись в список, когда упаковываю документы в конверт, а трек-номер заполняю позже, когда получаю почтовые квитанции, поэтому бизнес-процесс проверяет, есть ли трекинг-номер уже есть, а если еще нет — ждет 3 дня. Если номер отслеживания уже существует, бизнес-процесс вызывает веб-перехватчик.
Его обработчик аналогичен тому, что я уже показывал, но также статус записывается в поле «Статус» списка. Как обновить список из функции AWS Lambda, я тоже писал ранее в блоге:
После вызова вебхука я вставил в бизнес-процесс паузу в 5 минут, чтобы дать время обработчику на стороне AWS Lambda для обработки. После этого бизнес-процесс проверяет, не перешел ли трек-номер в конечный статус «Доставлено» — если да, то цикл перестает крутиться. Если статус не достигнут, то через 3 дня процесс повторяется. Этот процесс работает сам по себе и освобождает меня от рутинной работы.
Все, что мне нужно для того, чтобы увидеть статус моих отправленных писем, это зайти в свой список и установить необходимые фильтры. Аналогично возможна интеграция облачного Битрикс24 с любой внешней системой, которая может отдавать данные по SOAP или предоставляет API в любой форме.