public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> item) { var message = await item; var paramValue = message.Text; var result = await service.QueryAsync(paramValue.ToString(), context.CancellationToken); var queryIntent = result.Intents.FirstOrDefault(); if (!"None".Equals(queryIntent.Intent, StringComparison.InvariantCultureIgnoreCase) && !"MS.MeetingRoom.Book".Equals(queryIntent.Intent, StringComparison.InvariantCultureIgnoreCase)) { /* * Intent가 None값이라면.. 질의에 대한 대답으로 판단. * 새로운 Intent라면 시나리오 변경. */ QueryResult queryResult = new QueryResult(false) { NewIntent = queryIntent.Intent }; await context.PostAsync("진행중인 회의실 예약을 취소합니다."); context.Done <object>(message); } else { //회의실정보 있나 확인 if (meetingRoom.Hour == null) { // Entity에서 Hour값 가져온다. 있다면.. if (!AskHour(context, result)) { //시간정보가 없다 받아야 한다. await context.PostAsync("몇시부터 사용하실 건가요?"); context.Wait(this.MessageReceivedAsync); } } if (meetingRoom.Hour != null) { //먼저 가능한 회의실을 찾아서 알려준다. ReservationManagement management = new ReservationManagement(); List <string> roomNameList = management.GetAvailableReservation(meetingRoom.Hour); if (roomNameList.Count > 0) { string meetingRoomName; //사용자의 입력에 meetingRooom entity가 존재하는지만 체크 if (!GetUserInputMeetingRoomEntity(context, result, out meetingRoomName)) { //회의실정보를 입력하지 않았다...받아야 한다. var availableMeetingRoom = string.Join(", ", roomNameList.ToArray()); await context.PostAsync($"사용가능한 회의실은 {availableMeetingRoom} 입니다. 어떤 회의실을 예약할까요?"); context.Wait(this.MessageReceivedAsync); } else if (roomNameList.Contains(meetingRoomName)) { meetingRoom.MeetingRoomName = meetingRoomName; } } else { meetingRoom.Hour = null; await context.PostAsync("사용가능한 회의실이 없습니다. 다른 시간을 입력해주세요."); context.Wait(this.MessageReceivedAsync); } } //회의실정보 있나 확인 if (meetingRoom.Hour != null && meetingRoom.MeetingRoomName != null) { //회의실 예약 ReservationManagement management = new ReservationManagement(); management.SaveMeetingRoom(meetingRoom.Hour, meetingRoom.MeetingRoomName); await context.PostAsync($"{meetingRoom.MeetingRoomName} 회의실 {meetingRoom.Hour}에 예약 되었습니다."); context.Done <object>(meetingRoom); } } }