async function createRecord()

in pca-ui/src/lambda/index.js [24:140]


async function createRecord(record) {
    const key = record.s3.object.key;
    console.log("Creating:", key);

    let res;
    try {
        res = await s3
            .getObject({
                Bucket: record.s3.bucket.name,
                Key: key,
            })
            .promise();
    } catch (e) {
        throw e;
    }
    console.log("Res:", res);

    const body = res.Body.toString();

    const parsed = JSON.parse(body);
    console.log("Parsed:", parsed);

    const jobInfo =
      parsed.ConversationAnalytics.SourceInformation[0].TranscribeJobInfo;

    let timestamp = new Date(
      parsed.ConversationAnalytics.ConversationTime
    ).getTime();
    console.log("Timestamp:", timestamp);

    const defaultId = "spk_1";
    const callerId =
      parsed.ConversationAnalytics.SpeakerLabels.find(
        (labelObj) => labelObj.DisplayText === "Customer"
      ).Speaker || defaultId;

    let data = JSON.stringify({
      key: key,
      jobName: jobInfo.TranscriptionJobName,
      confidence: jobInfo.AverageWordConfidence,
      lang: parsed.ConversationAnalytics.LanguageCode,
      duration:
        parsed.SpeechSegments[parsed.SpeechSegments.length - 1].SegmentEndTime,
      timestamp: timestamp,
      location: parsed.ConversationAnalytics.ConversationLocation,
      callerSentimentScore:
        parsed.ConversationAnalytics.SentimentTrends[callerId].SentimentScore,
      callerSentimentChange:
        parsed.ConversationAnalytics.SentimentTrends[callerId].SentimentChange,
    });
    console.log("Data:", data);

    const callId = `call#${key}`;

    // Call entry
    let items = [makeItem(callId, "call", timestamp, data)];

    // Sentiment entries
    const sentiments = parsed.ConversationAnalytics.SentimentTrends;

    Object.entries(sentiments).map(([k, v]) => {
      items.push(
        makeItem(
          callId,
          `sentiment#${k === callerId ? "caller" : "agent"}#average`,
          v.SentimentScore,
          data
        ),
        makeItem(
          callId,
          `sentiment#${k === callerId ? "caller" : "agent"}#trend`,
          v.SentimentChange,
          data
        )
      );
    });


    // Entities
    parsed.ConversationAnalytics.CustomEntities.forEach((entity) => {
        entity.Values.forEach((value) => {
            const entityId = `entity#${value}`;

            // Entity record
            items.push(makeItem(entityId, "entity", 0, entity.Name));

            // Entity search record
            items.push(makeItem(callId, entityId, 0, data));
        });
    });

    // Language
    const language = parsed.ConversationAnalytics.LanguageCode;
    const languageId = `language#${language}`;

    // Language record
    items.push(makeItem(languageId, "language", 0, language));

    // Language search record
    items.push(makeItem(callId, languageId, 0, data));

    console.log("Items:");
    items.forEach((item) => {
        console.log(JSON.stringify(item));
    });

    return Promise.all(
        items.map((item) => {
            return ddb
                .putItem({
                    TableName: tableName,
                    Item: item,
                })
                .promise();
        })
    );
}