2016-12-11 1 views
3

FormFlow를 사용하는 Microsoft Bot Bot Framework 버전 3을 사용하여 간단한 BOT를 작성하려고합니다. 사용자가 입력 한 자유 텍스트는 LUIS로 전송되어 일부 인 텐트/엔티티를 반환합니다. LUIS에 의해 반환 된 엔터티를 사용하여 데이터베이스에서 데이터를 가져오고 BuildForm 메서드에서 데이터를 사용해야합니다.MessageController의 BuildForm 메서드에서 LUIS 엔티티에 액세스

아래와 같이 코드를 사용하면 LUIS에서 엔티티를 가져올 수 있으며 데이터베이스에서 데이터를 가져올 수 있습니다.

그러나 BuildForm 메서드에서 DB에서 가져온 데이터를 사용할 수있는 방법을 찾지 못했습니다.

요약 할 내용 : MessageController의 BuildForm 메소드에서 LuisDialog의 메소드에서 가져온 데이터에 액세스하려고합니다.

도움이 될 것입니다.

**MessageController** 
public virtual async Task<HttpResponseMessage> Post([FromBody] Activity activity) 
{ 
    ...... 
    await Conversation.SendAsync(activity, MakeRoot); 
} 
internal static IDialog<TestRequest> MakeRoot() 
{ 
    return Chain.From(() => new TestDialog(BuildForm)); 
} 

private static IForm<TestRequest> BuildForm() 
{ 
    return builder.Message("") 
      .Field(nameof(TestRequest.searchResult)) 
      .Build 
} 

**LUISDialog:** 
class TestDialog : LuisDialog<TestRequest> 
{ 
    [LuisIntent("testIntent")] 
    public async Task GetTestIntentForm(IDialogContext context, LuisResult result) 
    { 
     // Pass the intent & entity to DBAccess class which returns list of string 
     List<string> lstResult = DBAccess.getInfoFromDB("testIntent", entities); 

     IDialog<TestRequest> testForm = new FormDialog<TestRequest>(new TestRequest(), this.MakeTestForm, FormOptions.PromptInStart, entities); 

     context.Call<TestRequest>(testForm, TestFormComplete); 
    } 
} 
**TestRequest** 
[Serializable] 
class TestRequest 
{ 
    [Prompt("This is the search result")] 
    public string searchResult; 
.... 
} 

답변

2

당신은 당신의 경우 TestRequest에, 당신의 폼 모델의 값을 설정해야합니다. 그래서 대신이 일을 :

IDialog<TestRequest> testForm = new FormDialog<TestRequest>(new TestRequest(), this.MakeTestForm, FormOptions.PromptInStart, entities); 

당신은 응답을

IDialog<TestRequest> testForm = new FormDialog<TestRequest>(new TestRequest { searchResult = lstResult }, this.MakeTestForm, FormOptions.PromptInStart, entities); 
+0

감사 할 수 있습니다. 그것은 나를 도왔다. – rku0526

+0

나는 이미 Upvote를 시도했다. 평판이 15 점 미만이므로 공식적으로 표시되는 점수는 변경되지 않습니다. – rku0526

+0

그런 다음 질문에 대답했다고 생각하면 대답을 수락하십시오. –