2

我是 Unomi 的新手,

  • 我已经安装了 unomi-1.2.0-incubating 并启动了成功运行的 karaf 服务器。

  • 我有弹性搜索安装并在集群名称 contextElasticSearch 下工作。

  • 我已经在我的前端网站中集成了 context.js 以从 unomi 加载它,并且还通过成功调用 unomi context.json 触发了页面访问事件作为主页,contectParams 如下所示:

代码:

function contextRequest(successCallback, errorCallback, payload) {
    var data = JSON.stringify(payload);
    // if we don't already have a session id, generate one
    var sessionId = cxs.sessionId || generateUUID();
    var url = 'http://localhost:8181/context.json?sessionId=' + sessionId;
    var xhr = new XMLHttpRequest();
    var isGet = data.length < 100;
    if (isGet) {
        xhr.withCredentials = true;
        xhr.open("GET", url + "&payload=" + encodeURIComponent(data), true);
    } else if ("withCredentials" in xhr) {
        xhr.open("POST", url, true);
        xhr.withCredentials = true;
    } else if (typeof XDomainRequest != "undefined") {
        xhr = new XDomainRequest();
        xhr.open("POST", url);
    }
    xhr.onreadystatechange = function () {
        if (xhr.readyState != 4) {
            return;
        }
        if (xhr.status == 200) {
            var response = xhr.responseText ? JSON.parse(xhr.responseText) : undefined;
            if (response) {
                cxs.sessionId = response.sessionId;
                successCallback(response);
            }
        } else {
            console.log("contextserver: " + xhr.status + " ERROR: " + xhr.statusText);
            if (errorCallback) {
                errorCallback(xhr);
            }
        }
    };
}
var scope = 'unomipages';
var itemId = btoa(window.location.href);
var source = {
  itemType: 'page',
  scope: scope,
  itemId: itemId,
  properties: {
      url: window.location.href
  }
};
var contextPayload: any = {
  source: source,
  events: [
    {
      eventType: 'pageVisitEvent',
      scope: scope,
      source: source
    }
  ],
  requiredProfileProperties: [            
  ]
};

contextRequest(function (response: any) {         
console.log(JSON.stringify(response));
}, function(){}, contextPayload);

我的问题是:

  • 如何跟踪 unomi 服务器中的事件,并访问它的 rest api?

让我知道您是否想从我这里获得更多信息,或者我是否缺少任何东西。

4

1 回答 1

3

我们刚刚在 Unomi 网站上发布了一个可能对您有所帮助的教程,请在此处查看而且,我实际上向您可以在此处查看的邮件列表提出了类似的问题。我将尝试在网站上添加一个事件示例。

要访问您的 REST API,您需要使用http://localhost:8181/cxs您可以在此处阅读 REST API 文档,使用上面的 URL 作为这些端点的基础。您还需要进行基本身份验证(默认用户名和密码为 karaf 和 karaf)。

对于跟踪事件,您需要创建配置文件和会话。这里有一些 Python 证明了这一点:

from requests import post
from datetime import datetime
"""
Make a request to Unomi to create a profile with ID = 10
"""
profile = {
    "itemId":"10",
    "itemType":"profile",
    "version":None,
    "properties": {
        "firstName": "John",
        "lastName": "Smith"
    },
    "systemProperties":{},
    "segments":[],
    "scores":{},
    "mergedWith":None,
    "consents":{}
}

session = {
    "itemId": "10",
    "itemType":"session",
    "scope":None,
    "version":1,
    "profileId":profile_id,
    "profile": profile,
    "properties":{},
    "systemProperties":{},
    "timeStamp": datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ")
}

# Create or update profile
r = post('http://localhost:8181/cxs/profiles/',
auth=('karaf','karaf'),
json =profile)
print(r)
print(r.content)


# Create session
r = post('http://localhost:8181/cxs/profiles/sessions/10',
    auth=('karaf', 'karaf'),
    json=session)

print(r)
print(r.content)

至于跟踪事件本身,请考虑使用 REST API 的 Python 示例(在 Unomi 中实际上有一个“事件收集器”):

j

son = {
    "eventType": "view",
    "scope": "ACMESPACE",
    "source": {
        "itemType": "site",
        "scope": "ACMESPACE",
        "itemId": "c4761bbf-d85d-432b-8a94-37e866410375"
    },
    "target": {
        "itemType": "page",
        "scope": "ACMESPACE",
        "itemId": "b6acc7b3-6b9d-4a9f-af98-54800ec13a71",
        "properties": {
            "pageInfo": {
            "pageID": "b6acc7b3-6b9d-4a9f-af98-54800ec13a71",
            "pageName": "Home",
            "pagePath": "/sites/ACMESPACE/home",
            "destinationURL": "http://localhost:8080/sites/ACMESPACE/home.html",
            "referringURL": "http://localhost:8080/",
            "language": "en"
        },
        "category": {},
        "attributes": {}
      }
    }
}

session_id = "aSessionId"
session_id = "aProfileId"

r = requests.post('{endpoint}/eventcollector?sessionId={session_id}'\
            .format(endpoint=ENDPOINT, profile_id=profile_id),
        auth=('karaf', 'karaf'),
        json=json)

需要一点时间来理解配置文件、会话和事件之间的关系。事件确实与会话相关,而会话与配置文件相关。因此,要使用 REST API 跟踪事件,您还必须弄清楚如何跟踪会话。有点混乱,但一旦你明白了,它就会有意义。

于 2018-11-17T23:22:26.230 回答