in lca-ai-stack/source/lambda_functions/transcribing_fargate_trigger/lambda_transcribing_fargate_trigger.py [0:0]
def lambda_handler(event, context): # pylint: disable=unused-argument
"""Lambda Handler"""
# pylint: disable=too-many-locals
try:
# Log the received event
logger.info("Received event: %s", json.dumps(event))
# Capture data from event
# Use if SQS is the trigger: vc_event = json.loads(event.get('Records')[0].get('body'))
vc_event = event
call_id = vc_event["detail"]["callId"]
transaction_id = vc_event["detail"]["transactionId"]
stream_arn = vc_event["detail"]["streamArn"]
stream_status = vc_event["detail"]["streamingStatus"]
start_time = vc_event["detail"]["startTime"]
fragment_start = vc_event["detail"]["startFragmentNumber"]
# assumes incoming call from customer
customer_phone_number = vc_event["detail"]["fromNumber"]
system_phone_number = vc_event["detail"]["toNumber"]
channel = "AGENT" if vc_event["detail"]["isCaller"] else "CALLER"
# Store call details in the call events table
event_type = STREAM_STATUS_TO_EVENT_SOURCING.get(stream_status, "UNKNOWN")
start_time_datetime = parser.isoparse(start_time)
expires_at = start_time_datetime + timedelta(days=EXPIRATION_IN_DAYS)
event_sourcing_table = dynamodb_client.Table(EVENT_SOURCING_TABLE_NAME)
item = {
"PK": f"ce#{call_id}",
"SK": f"ts#{start_time}#et#{event_type}#c#{channel}",
"CallId": call_id,
"ExpiresAfter": Decimal(expires_at.timestamp()),
"CreatedAt": start_time,
"CustomerPhoneNumber": customer_phone_number,
"SystemPhoneNumber": system_phone_number,
"Channel": channel,
"EventType": event_type,
}
logger.info("call envent item: %s", item)
table_response = event_sourcing_table.put_item(Item=item)
logger.info("Updated event sourcing table: %s", json.dumps(table_response))
if stream_status == "STARTED":
# Send message to SQS for Fargate trigger
payload = {
"streamARN": stream_arn,
"startFragmentNum": fragment_start,
"channel": channel,
"callId": call_id,
"startTime": start_time,
"transactionId": transaction_id,
"transcriptionEnabled": ENABLE_TRANSCRIPTION,
"saveCallRecording": ENABLE_SAVE_RECORDING,
"languageCode": LANGUAGE_CODE,
}
logger.info("Sending Fargate trigger payload to SQS: %s", json.dumps(payload))
sqs_response = sqs.send_message(MessageBody=json.dumps(payload))
logger.info("Response from SQS: %s", json.dumps(sqs_response))
except ClientError as error:
logging.error(error)
return {"lambdaResult": "Failed"}
else:
return {"lambdaResult": "Success"}