def lambda_handler()

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"}