【问题标题】:AWS Personalize sending eventsAWS Personalize 发送事件
【发布时间】:2021-07-15 18:15:21
【问题描述】:

我在 AWS 个性化文档中,它说在此处访问 node.js 代码。

More code examples (in Node.js, Python, and Go) and AWS Lambda usage guidelines are found here.

这是哪里???我正在尝试在不使用 lambda 的情况下使用 nodejs。如何在没有 lambda 的情况下从我的节点服务器发送等价物,甚至可能吗?

这是 Java 代码。

package example;

  public class ProcessKinesisRecords implements RequestHandler<KinesisEvent, Void>{
  
      private static final String TRACKING_ID = be5aa88c-05dd-4c5e-9372-15ffa6a846b9;
      private EndpointConfiguration endpointConfiguration = new EndpointConfiguration("http://concierge-gamma-events.us-west-2.amazonaws.com", "us-west-2");
      private AWSConciergeEventTracking client = AWSConciergeEventTrackingClientBuilder.standard()
                  .withEndpointConfiguration(endpointConfiguration).build();
      private final CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder();
  
      @Override
      public Void recordHandler(KinesisEvent event, Context context)
      {
          for(KinesisEventRecord rec : event.getRecords()) {
              try {
                  // Kinesis data is Base64 encoded and needs to be decoded before being used.
                  String data = decoder.decode(record.getKinesis().getData()).toString();
  
                  JSONParser parser = new JSONParser();
                  JSONObject jsonObject = (JSONObject) parser.parse(data);
                  String userId = (String) jsonObject.get(USER_ID);
                  String sessionId = (String) jsonObject.get(SESSION_ID);
                  String eventType = (String) jsonObject.get(EVENT_TYPE);
                  long timestamp= new Date().getTime();
                  ByteBuffer properties = jsonObject.get(EVENT_TYPE).getBytes("UTF-8");
  
                  List<Event> eventList = new ArrayList<>();
                  eventList.add(new Event().withProperties(properties).withType(eventType));
                  TrackRequest request = new TrackRequest()
                          .withTrackingId(EVENT_TRACKER_ARN)
                          .withChannel("server")
                          .withUserId(userId)
                          .withSessionId(sessionId)
                          .withEventList(eventList);
                  client.track(request);
              } catch (CharacterCodingException e) {
                  log.error("Error decoding data in the kinesis stream. ", e);
                  throw new IllegalArgumentException(e.getMessage());
              } catch (ParseException e) {
                  log.error("Error parsing JSON input from the kinesis stream. ", e);
                  throw new IllegalArgumentException(e.getMessage());
              } catch (Exception e) {
                  log.error("Error processing record. ", e);
                  throw new IllegalArgumentException(e.getMessage());
              }
          return null;
      }
  }

【问题讨论】:

  • 你让它运行了吗?
  • @Marcel 仍然没有常规文档,他们希望您使用 kinesis。我最终没有使用个性化。
  • 我正在实施 Kinesis 事件 > Lambda > Personalize 实施。会及时通知您。
  • 我正要问同样的问题。

标签: node.js amazon-web-services amazon-personalize


【解决方案1】:

实际上,AWS SDK for Node 环境中提供了所有内容。经过一番研究,我想出了以下代码。

这只是一个草稿,表明它有效。

let AWS = require ('aws-sdk');

AWS.config.update({
    'region': 'eu-central-1', // process.env.REGION,
    'accessKeyId': 'XXXX', // process.env.AWS_ACCESS_KEY_ID,
    'secretAccessKey': 'XXXXXXX' // process.env.AWS_SECRET_ACCESS_KEY
});

let personalizeEvents = new AWS.PersonalizeEvents();

var params = {
    eventList: [ /* required */
        {
            eventType: 'click', /* required */
            sentAt: new Date || 'Wed Dec 31 1969 16:00:00 GMT-0800 (PST)' || 123456789, /* required */
            eventId: 'STRING_VALUE',
            eventValue: 11,
            impression: [
                'STRING_VALUE',
                /* more items */
            ],
            itemId: '1',
            //properties: any /* This value will be JSON encoded on your behalf with JSON.stringify() */,
            recommendationId: 'STRING_VALUE'
        },
    ],
    sessionId: 'STRING_VALUE', /* required */
    trackingId: 'trackerid', /* required */
    userId: '666'
};

personalizeEvents.putEvents(params, function (err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else     console.log(data);           // successful response
});

请先阅读本文,AWS Official documentation 了解。

然后检查API documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2014-05-08
    • 2023-02-15
    相关资源
    最近更新 更多