private async Task <UserPhone> GetUserContactMethods(string subdomain, string apiToken, string userId) { PagerDutyClient client = new PagerDutyClient(subdomain, apiToken); string data = await client.GetUserContactMethods(userId); LambdaLogger.Log($"GetUserContactMethods: {data}"); if (data == null) { return(null); } dynamic response = WebHelpers.ParseJSON(data); var contacts = ((IEnumerable <dynamic>)response.contact_methods).Where(method => method.type == "phone"); List <UserPhone> phones = contacts.Select(method => new UserPhone() { CountryCode = method.country_code, PhoneNumber = method.phone_number }).ToList(); if (phones.Count != 0) { return(phones.First()); } return(null); }
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)); } } }
private async Task <User> GetCurrentOnCallOperator(string subdomain, string apiToken, string scheduleId) { PagerDutyClient client = new PagerDutyClient(subdomain, apiToken); string data = await client.GetCurrentOnCallOperator(scheduleId); LambdaLogger.Log($"GetCurrentOnCallOperator: {data}"); if (data == null) { return(null); } dynamic response = WebHelpers.ParseJSON(data); dynamic user = response.schedule.final_schedule.rendered_schedule_entries[0].user; return(new User() { Id = user.id, Name = user.name, TimeZone = response.schedule.time_zone }); }