Type Script
Type Script 1
handler.ts
import { Context, Handler, Callback } from "aws-lambda";
import { DocumentClient } from "aws-sdk/clients/dynamodb";
import { EventRecord, Response, ConnectEvent } from "./types";
const ddb = new DocumentClient({ region: process.env.REGION });
const tableName: string = process.env["LE_TABLE"] || "";
export const handler: Handler = async (
event: ConnectEvent,
ctx: Context,
cb: Callback
) => {
if (!tableName) {
console.error("MISSING TABLE ENVIRONMENT VARIABLE");
return { message: "MISSING TABLE ENVIRONMENT VARIABLE" };
}
if (!event.Details.Parameters.policyNumber) {
event.Details.Parameters.policyNumber = "not found";
}
try {
return await putItem(event.Details.Parameters);
} catch (err) {
console.log(err);
return { message: "PUT RECORD ERROR" };
}
};
const putItem = async (event: EventRecord): Promise => {
if (!event.agentId) {
return { message: "No Agent ID" }
}
const thirtyDays = 60 * 60 * 24 * 30;
event.TTL = Math.round(Date.now() / 1000) + thirtyDays
const putParams: DocumentClient.PutItemInput = {
TableName: tableName,
Item: event
}
try {
await ddb.put(putParams).promise();
return { message: "Success" }
} catch (err) {
console.error(err);
return { message: "Put failure" }
}
}
types.ts
export interface ConnectEvent {
Details: {
ContactData: {
Attributes: any,
ContactId: string,
CustomerEndpoint: {
Address: string,
Type: string
},
InitialContactId: string,
InitiationMethod: string,
InstanceARN: string
},
Parameters: EventRecord
}
}
export interface EventRecord {
phoneNumber: string,
policyNumber?: string,
agentId: string,
TTL?: number
}
export interface Response {
message: string
}
Type Script 2
handler.ts
import { Context, Handler, Callback } from "aws-lambda";
import { DocumentClient } from "aws-sdk/clients/dynamodb";
import {
EventRecord,
CheckEvent,
Response,
getParams,
ConnectEvent
} from "./types";
const ddb = new DocumentClient({ region: process.env.REGION });
const tableName: string = process.env["LE_TABLE"] || "";
export const handler: Handler = async (
event: ConnectEvent,
ctx: Context,
cb: Callback
) => {
let response: Response;
if (!tableName) {
console.error("MISSING TABLE ENVIRONMENT VARIABLE");
return {
message: "MISSING TABLE ENVIRONMENT VARIABLE",
assignedAgent: "not found"
};
}
try {
if (event.Details.Parameters.phoneNumber) {
response = await getRecord({
key: "phoneNumber",
value: event.Details.Parameters.phoneNumber
});
if (
response.assignedAgent &&
response.assignedAgent === "not found" &&
event.Details.Parameters.policyNumber
) {
response = await queryIndex({
key: "policyNumber",
value: event.Details.Parameters.policyNumber,
index: "policyNumber"
});
}
} else if (event.Details.Parameters.policyNumber) {
response = await queryIndex({
key: "policyNumber",
value: event.Details.Parameters.policyNumber,
index: "policyNumber"
});
} else {
return {
message: "Invalid input",
assignedAgent: "not found"
};
}
} catch (err) {
console.log(err);
return {
message: "Get record error",
assignedAgent: "not found"
};
}
return response;
};
const queryIndex = async (event: getParams): Promise => {
const getParams: DocumentClient.QueryInput = {
TableName: tableName,
IndexName: event.index,
KeyConditionExpression: `${event.key} = :ct`,
ExpressionAttributeValues: {
":ct": event.value
}
};
try {
let results = await ddb.query(getParams).promise();
if (results.Items && results.Items.length) {
return {
assignedAgent: results.Items[0].agentId
};
} else {
return {
assignedAgent: "not found"
};
}
} catch (err) {
console.error(err);
return {
assignedAgent: "not found"
};
}
};
const getRecord = async (event: getParams): Promise => {
const getParams: DocumentClient.GetItemInput = {
TableName: tableName,
Key: {}
};
getParams.Key[event.key] = event.value;
try {
let results = await ddb.get(getParams).promise();
if (results.Item) {
return {
assignedAgent: results.Item.agentId
};
} else {
return {
assignedAgent: "not found"
};
}
} catch (err) {
console.error(err);
return {
assignedAgent: "not found"
};
}
};
types.ts
export interface ConnectEvent {
Details: {
ContactData: {
Attributes: any,
ContactId: string,
CustomerEndpoint: {
Address: string,
Type: string
},
InitialContactId: string,
InitiationMethod: string,
InstanceARN: string
},
Parameters: CheckEvent
}
}
export interface EventRecord {
phoneNumber: string,
policyNumber?: string,
agentId: string,
TTL: number
}
export interface CheckEvent {
phoneNumber?: string,
policyNumber?: string
}
export interface Response {
assignedAgent?: string
}
export interface getParams {
key: string,
value: string,
index?: string
}