Ejemplo n.º 1
0
        public async Task <string> HandleIncomingCall(TwilioIncomingCall twilioCallDetails, ILambdaContext context)
        {
            AWSSDKHandler.RegisterXRayForAllServices();

            string stage  = System.Environment.GetEnvironmentVariable("STAGE");
            string region = System.Environment.GetEnvironmentVariable("AWS_REGION");

            string functionName = $"telephonist-csharp-{stage}-GetDetailsForCurrentOnCallOperator";

            LambdaLogger.Log($"REQUEST: {twilioCallDetails}");

            LambdaLogger.Log($"PARAM: stage={stage}");
            LambdaLogger.Log($"PARAM: region={region}");

            LambdaLogger.Log($"functionName: {functionName}");

            using (AmazonLambdaClient client = new AmazonLambdaClient(RegionEndpoint.GetBySystemName(region)))
            {
                InvokeRequest request = new InvokeRequest()
                {
                    FunctionName = functionName
                };
                InvokeResponse response = await client.InvokeAsync(request);

                using (StreamReader reader = new StreamReader(response.Payload))
                {
                    string result = reader.ReadToEnd();

                    LambdaLogger.Log($"Lambda result: {result}");

                    OnCallOperatorDetails engineer = WebHelpers.ParseJSON <OnCallOperatorDetails>(result);

                    string justName = engineer.Name.Split(' ')[0];

                    TimeZoneInfo localTimeZone   = WebHelpers.OlsonTimeZoneToTimeZoneInfo(engineer.TimeZone);
                    DateTime     localTime       = TimeZoneInfo.ConvertTime(DateTime.Now, localTimeZone);
                    string       localTimeString = localTime.ToString("hh:mm tt", CultureInfo.InvariantCulture);

                    return(String.Format(CultureInfo.InvariantCulture, ResponseTwiML, justName, localTimeString, engineer.PhoneNumber));
                }
            }
        }
Ejemplo n.º 2
0
        public async Task <OnCallOperatorDetails> GetDetailsForCurrentOnCallOperator(EmptyRequest request, ILambdaContext context)
        {
            string subdomain = Environment.GetEnvironmentVariable("PAGER_DUTY_DOMAIN");
            string apiToken  = Environment.GetEnvironmentVariable("PAGER_DUTY_API_KEY");

            string scheduleId = Environment.GetEnvironmentVariable("PAGER_DUTY_SCHEDULE_ID");

            LambdaLogger.Log($"REQUEST: {request}");

            LambdaLogger.Log($"PARAM: subdomain={subdomain}");
            LambdaLogger.Log($"PARAM: apiToken={apiToken}");
            LambdaLogger.Log($"PARAM: scheduleId={scheduleId}");

            PagerDutyClient service = new PagerDutyClient(subdomain, apiToken);

            User user = await GetCurrentOnCallOperator(subdomain, apiToken, scheduleId);

            if (user != null)
            {
                UserPhone phone = await GetUserContactMethods(subdomain, apiToken, user.Id);

                OnCallOperatorDetails result = new OnCallOperatorDetails()
                {
                    Name        = user.Name,
                    TimeZone    = WebHelpers.MapToOlsonTimeZone(user.TimeZone),
                    PhoneNumber = $"+{phone.CountryCode}{phone.PhoneNumber}"
                };

                LambdaLogger.Log($"RESPONSE: {result}");

                return(result);
            }
            else
            {
                return(null);
            }
        }