Updating Context Service example

This commit is contained in:
Peter Morton 2025-06-06 12:55:10 -05:00
parent 0650f12bd5
commit 440b84edfc
3 changed files with 107 additions and 0 deletions

View File

@ -0,0 +1,15 @@
# Interaction Notification API
Interaction Notification API is used to push Call Pops into Channel Automation.
## Prerequisits
1. Install and configure the _Channel Automation Interface_ Package from Resource Center -> Hub.
## Studio Dependencies
[CA_ContextService](./_studio_dependencies/Global%20Variable/CA_ContextService.js) Global Variable Function
## Example Usage
Conversation Flow Code Block [postContextHistory](./snippets/postContactHistory.js)

View File

@ -0,0 +1,60 @@
function toCustomISOString(date) {
// Ensure input is a Date object
if (!(date instanceof Date)) throw new Error("Input must be a Date object");
// Get ISO string, then trim to 3 ms digits and add 'Z'
return date.toISOString().replace(/\d{3}Z$/, match => match.slice(0, 3) + 'Z');
}
return {
/**
*
* @param {String} customerId Customer identifier (i.e. 10000050)
* @param {[String]} notes Array on notes
* @param {Date} startTime Start time of the interaction
* @param {Date} endTime End time of the interaction
* @param {String} external URL
*/
post(customerId, notes, startTime, endTime, url) {
return new Promise(async (resolve, reject) => {
try {
const OIDC = await CAInterface().getOIDC();
let config = CAInterface().settings().url.CA;
const contextServiceURL = `https://${config.base}/context-service/${config.tenant}/contexts`;
const { data } = await CAInterface().axios("contextService", {
method: "post",
url: contextServiceURL,
headers: {
"Content-Type": "application/ld+json",
Authorization: `OIDC_id_token ${OIDC.access_token}`,
},
data: {
"@type": "vctx:Context",
"vctx:contacts": [
{
"@type": "vctc:ExternalContact",
"vctc:subtype": "iva",
"vctc:direction": "vctc:inbound",
"vctc:startTime": toCustomISOString(startTime),
"vctc:endTime": toCustomISOString(endTime),
"vctc:externalUrl": url,
"vctc:notes": notes,
},
],
"vctx:customer": {
"@type": "vcust:Customer",
"vcust:identifier": `${customerId}`,
},
},
});
console.log({
contextServiceData: data,
});
resolve();
} catch (error) {
reject(error);
}
});
},
};

View File

@ -0,0 +1,32 @@
(async () => {
const customerId = conversationData.customer?.customerId ?? "CC1000778";
const history = await CAInterface().getConversationHistory(
conversationData.id,
50
);
let notes = ["No History Found"];
let startTime = new Date();
if (history.messages.length > 0) {
notes = history.messages
.map((message) => `[${message.dateSent}] ${message.direction} : ${message.text}`)
.filter((text) => text.trim() !== "");
startTime = new Date(history.messages[0]?.dateSent || startTime);
}
const endTime = new Date();
const url = `https://ivastudio.verint.live/organizations/${recognizedObject.classificationResults.organizationId}/workspaces/${conversationData.workspaceId}/conversation/${conversationData.id}`;
CA_ContextService().post(customerId, notes, startTime, endTime, url);
})()
.catch((error) => {
console.log(error.message);
recognizedObject.answers.push("");
recognizedObject.errorInfo = {
...recognizedObject.errorInfo,
label: {
data: error.toJSON ? error.toJSON() : {},
message: error.message,
},
};
})
.finally(() => {
next();
});