사용자 지정 구현을 위한 이벤트 구성 events
이 구성의 일부는 사용자 정의 개발이며 다음을 필요로 합니다.
- Adobe Campaign의 JSON, XML 및 Javascript 구문 분석에 대한 작업 지식입니다.
- QueryDef 및 Writer API에 대한 작업 지식입니다.
- 개인 키를 사용한 암호화 및 인증 작업 개념입니다.
Javascript 코드를 편집하려면 기술 기술이 필요하므로 적절한 이해 없이 시도하지 마십시오.
JavaScript에서 이벤트 처리 events-javascript
JavaScript 파일 file-js
파이프라인은 JavaScript 함수를 사용하여 각 메시지를 처리합니다. 이 함수는 사용자 정의입니다.
다음에서 구성됩니다. NmsPipeline_Config 옵션은 "JSConnector" 속성 아래에 있습니다. 이 JavaScript는 이벤트가 수신될 때마다 호출됩니다. 다음에 의해 실행됩니다. pipelined 프로세스.
샘플 Javascript 파일은 cus:triggers.js입니다.
JavaScript 기능 function-js
다음 pipelined Javascript는 특정 함수로 시작해야 합니다.
이 함수는 모든 이벤트에 대해 한 번 호출됩니다.
function processPipelineMessage(xmlTrigger) {}
다음으로 반환되어야 합니다.
<undefined/>
다시 시작해야 합니다. pipelined javascript 편집 후
데이터 형식 트리거 trigger-format
다음 trigger 데이터는 XML 형식으로 JS 함수에 전달됩니다.
- 다음 @triggerId 속성에는 trigger.
- 다음 강화 json 형식의 요소에는 Adobe Analytics에서 생성한 데이터가 포함되어 있으며 트리거에 첨부됩니다.
- @offset 은 메시지에 대한 "포인터"입니다. 대기열 내의 메시지 순서를 나타냅니다.
- @partition 는 대기열 내의 메시지 컨테이너입니다. 오프셋은 분할 영역에 상대적입니다.
대기열에는 약 15개의 파티션이 있습니다.
예제:
<trigger offset="1500435" partition="4" triggerId="LogoUpload_1_Visits_from_specific_Channel_or_ppp">
<enrichments>{"analyticsHitSummary":{"dimensions":{" eVar01":{"type":"string","data":["PI4INE1ETDF6UK35GO13X7HO2ITLJHVH"],"name":" eVar01","source":"session summary"}, "timeGMT":{"type":"int","data":[1469164186,1469164195],"name":"timeGMT","source":"session summary"}},"products":{}}}</enrichments>
<aliases/>
</trigger>
데이터 형식 보강 enrichment-format
콘텐츠는 각 트리거에 대해 Adobe Analytics에서 JSON 형식으로 정의됩니다.
예를 들어, 트리거인 LogoUpload_upload_Visits에서 다음을 수행합니다.
-
eVar01 은 Adobe Campaign 수신자와 조정하는 데 사용되는 구매자 ID를 문자열 형식으로 포함할 수 있습니다.
기본 키인 구매자 ID를 찾으려면 조정이 필요합니다. -
timeGMT 은 Adobe Analytics 측의 트리거 시간을 UTC Epoch 형식(01/01/1970 UTC 이후 초)으로 포함할 수 있습니다.
예제:
{
"analyticsHitSummary": {
"dimensions": {
"eVar01": {
"type": "string",
"data": ["PI4INE1ETDF6UK35GO13X7HO2ITLJHVH"],
"name": " eVar01",
"source": "session summary"
},
"timeGMT": {
"type": "int",
"data": [1469164186, 1469164195],
"name": "timeGMT",
"source": "session summary"
}
},
"products": {}
}
}
이벤트 처리 순서 order-events
이벤트는 오프셋 순서로 한 번에 하나씩 처리됩니다. 의 각 스레드 pipelined 다른 파티션을 처리합니다.
검색된 마지막 이벤트의 'offset'이 데이터베이스에 저장됩니다. 따라서 프로세스가 중지되면 마지막 메시지에서 다시 시작됩니다. 이 데이터는 내장 스키마 xtk:pipelineOffset에 저장됩니다.
이 포인터는 각 인스턴스와 각 소비자에 따라 다릅니다. 따라서 많은 인스턴스가 서로 다른 소비자를 사용하여 동일한 파이프라인에 액세스할 때 각 인스턴스는 동일한 순서로 모든 메시지를 수신합니다.
다음 소비자 파이프라인 옵션의 매개 변수는 호출 인스턴스를 식별합니다.
현재는 '스테이징' 또는 '개발'과 같은 별도의 환경에 대해 서로 다른 큐를 가질 방법이 없습니다.
로깅 및 오류 처리 logging-error-handling
logInfo()와 같은 로그는 pipelined 로그합니다. logError()와 같은 오류는 pipelined 이벤트를 로그하여 다시 시도 큐에 넣습니다. 이 경우 파이프된 로그를 확인해야 합니다.
오류 메시지는 다음에 설정된 기간 동안 여러 번 다시 시도됩니다. pipelined 옵션.
디버깅 및 모니터링을 위해 전체 트리거 데이터는 XML 형식의 "data" 필드에 있는 트리거 테이블에 작성됩니다. 또는 트리거 데이터가 포함된 logInfo()도 동일한 용도로 사용됩니다.
데이터 구문 분석 data-parsing
이 샘플 Javascript 코드는 보강에서 eVar01을 구문 분석합니다.
function processPipelineMessage(xmlTrigger)
{
(…)
var shopper_id = ""
if (xmlTrigger.enrichments.length() > 0)
{
if (xmlTrigger.enrichments.toString().match(/eVar01/) != undefined)
{
var enrichments = JSON.parse(xmlTrigger.enrichments.toString())
shopper_id = enrichments.analyticsHitSummary.dimensions. eVar01.data[0]
}
}
(…)
}
오류를 방지하려면 구문 분석 시 주의하십시오.
이 코드는 모든 트리거에 사용되므로 대부분의 데이터가 필요하지 않습니다. 따라서 존재하지 않을 때는 비워 둘 수 있습니다.
트리거 저장 storing-triggers-js
이 샘플 JS 코드는 트리거를 데이터베이스에 저장합니다.
function processPipelineMessage(xmlTrigger)
{
(…)
var event =
<pipelineEvent
xtkschema = "cus:pipelineEvent"
_operation = "insert"
created = {timeNow}
lastModified = {timeNow}
triggerType = {triggerType}
timeGMT = {timeGMT}
shopper_id = {shopper_id}
data = {xmlTrigger.toXMLString()}
/>
xtk.session.Write(event)
return <undef/>;
}
제한 constraints
이 코드의 성능은 높은 빈도로 실행되므로 최적이어야 하며 다른 마케팅 활동에 부정적인 영향을 미칠 수 있습니다. 특히 마케팅 서버에서 시간당 100만 개 이상의 트리거 이벤트를 처리하거나 제대로 튜닝되지 않은 경우.
이 Javascript의 컨텍스트는 제한됩니다. API의 일부 기능은 사용할 수 없습니다. 예를 들어 getOption() 또는 getCurrentdate()는 작동하지 않습니다.
더 빠른 처리를 위해 이 스크립트의 여러 스레드가 동시에 실행됩니다. 코드는 스레드로부터 안전해야 합니다.
이벤트 저장 store-events
파이프라인 이벤트 스키마 pipeline-event-schema
이벤트는 데이터베이스 테이블에 저장됩니다. 마케팅 캠페인에서 고객을 타겟팅하고 트리거를 사용하여 이메일을 보강하는 데 사용됩니다.
각 트리거는 서로 다른 데이터 구조를 가질 수 있지만 모든 트리거를 단일 테이블에 유지할 수 있습니다.
triggerType 필드는 데이터가 시작되는 트리거를 식별합니다.
다음은 이 테이블의 샘플 스키마 코드입니다.
이벤트 표시 display-events
이벤트 스키마를 기반으로 하는 간단한 양식으로 이벤트를 표시할 수 있습니다.
이벤트 처리 processing-the-events
조정 워크플로우 reconciliation-workflow
조정은 Adobe Analytics의 고객을 Adobe Campaign 데이터베이스로 연결하는 프로세스입니다. 예를 들어 일치 기준은 shopper_id일 수 있습니다.
성능상의 이유로 워크플로에서 배치 모드로 일치시켜야 합니다.
작업 로드를 최적화하려면 빈도를 15분으로 설정해야 합니다. 그 결과, Adobe Campaign의 이벤트 수신과 마케팅 워크플로우에서 이벤트 처리 간 지연은 최대 15분입니다.
JavaScript의 단위 조정 옵션 options-unit-reconciliation
JavaScript의 각 트리거에 대해 조정 쿼리를 실행할 수 있습니다. 성능에 더 높은 영향을 미치며 더 빠른 결과를 제공합니다. 반응성이 필요할 때 특정 사용 사례에 필요할 수 있습니다.
shopper_id에 설정된 색인이 없으면 구현하기 어려울 수 있습니다. 기준이 마케팅 서버가 아닌 별도의 데이터베이스 서버에 있는 경우 데이터베이스 링크를 사용하므로 성능이 저하됩니다.
워크플로 제거 purge-workflow
트리거는 시간 내에 처리됩니다. 그 양은 시간당 약 100만 개의 트리거가 될 수 있다. 따라서 제거 워크플로우를 배치해야 하는 이유를 설명합니다. 제거는 하루에 한 번 실행되며 3일 이상 오래된 모든 트리거를 삭제합니다.
캠페인 워크플로우 campaign-workflow
트리거 캠페인 워크플로우는 사용된 다른 반복 캠페인과 유사한 경우가 많습니다.
예를 들어 마지막 날 동안 특정 이벤트를 찾는 트리거에 대한 쿼리로 시작할 수 있습니다. 해당 타겟은 이메일을 전송하는 데 사용됩니다. 강화 또는 데이터는 트리거에서 가져올 수 있습니다. 구성이 필요하지 않으므로 Marketing에서 안전하게 사용할 수 있습니다.