private async Task <Tuple <bool, List <MeetingRoom> > > BookRoom(MeetingRoomSuggestionConstrain room)
        {
            var rmService = MeetingRoomApiFactory.GetService();
            var rooms     = await rmService.FindAvailableMeetingRooms(room);

            try
            {
                MetricTelemetry msgMt = new MetricTelemetry("Booked", 1);
                var             tc    = new TelemetryClient();
                msgMt.Name = "Booked";
                if (rooms.Item1)
                {
                    msgMt.Properties.Add("UPN", room.MeetingOrganizer);
                    msgMt.Properties.Add("Room", room.MeetingRoomIds?.ToArray().FirstOrDefault());
                    tc.TrackMetric(msgMt);
                }

                EventTelemetry et = new EventTelemetry();
                et.Name = "Booked";
                et.Properties.Add("UPN", room.MeetingOrganizer);
                et.Properties.Add("Room", room.MeetingRoomIds?.ToArray().FirstOrDefault());
                tc.TrackEvent(et);
            }
            catch (Exception exp)
            {
                Trace.TraceError($"[Exception]{exp}");
                Trace.TraceError($"{exp.StackTrace}");
            }
            return(rooms);
        }
        private async Task AfterConfirmReceivedAsync(IDialogContext context, IAwaitable <string> result)
        {
            var id       = (await result);
            var bookRoom = new MeetingRoomSuggestionConstrain
            {
                Attendees            = detail.Attendees,
                End                  = detail.End,
                Location             = detail.Location,
                LocationDisplayNames = detail.LocationDisplayNames,
                MeetingOrganizer     = detail.MeetingOrganizer,
                MeetingRoomIds       = new string[] { id },
                Size                 = detail.Size,
                Start                = detail.Start,
                TimezoneOffset       = detail.TimezoneOffset
            };
            var rooms = await BookRoom(bookRoom);

            if (rooms.Item1)
            {
                Trace.TraceInformation($"[AfterConfirmReceivedAsync][Booked]room.Result={rooms.Item1} for {id}");
                detail = bookRoom;
                var reply = ReplySuccessful(context);
                await context.PostAsync(reply);

                context.Done <object>(bookRoom);
            }
            else
            {
                Trace.TraceInformation($"[AfterConfirmReceivedAsync]room.Result={rooms.Item1} for {id}");
                EnsureSuggestions(context, rooms.Item2);
            }
        }
 public BookingConfirmDialog(MeetingRoomSuggestionConstrain room)
 {
     detail = room;
 }