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)); } } }
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); } }