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();
})
);
}