2017-08-22 2 views
1

würde Ich mag Kind Dialog von JSON Schema Dialog aufzurufen:Anruf Kind Dialog von Json

Dialog 1

{ 

    "References": [ "my .dll", "Newtonsoft.Json.dll" ], 
    "Imports": [ "my class", "Newtonsoft.Json.Linq" ], 
    "type": "object", 
    "required": [ 
    "Question 1" 

    ], 
"Templates": { 
"NotUnderstood": { 
    "Patterns": [ "I do not understand \"{0}\".", "Try again, I don't get \"{0}\"." ] 
}, 
"EnumSelectOne": { 
    "Patterns": [ "Please let me know the {&}: {||}" ], 
    "ChoiceStyle": "PerLine" 
} 
}, 
"properties": { 
"Question 1": { 
    "Prompt": { 
    "Patterns": [ "my Question 1 ? {||}" ] 
    }, 
    "type": [ 
    "string", 
    "null" 
    ], 
    "enum": [ 
    "Info", 
    "Submit an Issue", 
    "Track Cases", 
    "Finish" 
    ] 

}, 
"OnCompletion": "context.Call(FormDialog.FromForm<JObject>(()=>BuildJsonForm(\"another.json\"),FormOptions.PromptInStart), (con, res) =>CompletedQ1AndQ2(con, res));" 

} 

Dialog 2

{ 

    "References": [ "my .dll", "Newtonsoft.Json.dll" ], 
    "Imports": [ "my class2", "Newtonsoft.Json.Linq" ], 
    "type": "object", 
    "required": [ 
    "Question 1" 

    ], 
"Templates": { 
"NotUnderstood": { 
    "Patterns": [ "I do not understand \"{0}\".", "Try again, I don't get \"{0}\"." ] 
}, 
"EnumSelectOne": { 
    "Patterns": [ "Please let me know the {&}: {||}" ], 
    "ChoiceStyle": "PerLine" 
} 
}, 
"properties": { 
"Question 2": { 
    "Prompt": { 
    "Patterns": [ "my Question 2 ? {||}" ] 
    }, 
    "type": [ 
    "string", 
    "null" 
    ], 
    "enum": [ 
    "support ", 
    "sales ", 
    "marketing" 
    ] 

}, 
"OnCompletion": "context.Done<bool>(true);" 

} 

C# -Code:

public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument) 
{ 
     context.Call(
      FormDialog.FromForm<JObject>(() => BuildJsonForm("Q1.json"), 
       FormOptions.PromptInStart), (con, res) => CompletedCaseSubmission(con, res)); 
} 

Das Problem, dass CompletedCaseSub Die Mission wurde nach dem Füllen von Q1 aufgerufen, aber der Q2-Dialog wurde überhaupt nicht ausgeführt. Ich kann Dialog 2 von CompletedCaseSubmission aufrufen, aber ich möchte es von JSON aus tun. Zweite Frage ist, wie zu Details von beiden Dialogen Q1 und Q2 in C# erhalten?

Antwort

1

Es gibt derzeit keine Möglichkeit, einen Formulardialog zu unterbrechen, um einen anderen Dialog aufzurufen. Sie können jedoch Ihr Formular in kleinere Teile aufteilen und andere Dialoge zwischen den Teilen aufrufen. beachten Sie bitte die folgenden Links für weitere Informationen:

https://github.com/Microsoft/BotBuilder/issues/3293
How to hook Luis into a Bot Framework FormDialog

+0

Eigentlich wie gesagt, bevor ich dialog 2 von dialog 1 aufrufen können: in CompletedCaseSubmission ich anrufen kann mit dem zweiten Dialog context.call. Meine Frage ist, wie man es aus JSON-Schema-Dialog macht? –

+0

@VladimirB FormFlow bietet nicht die Möglichkeit, andere Dialoge aufzurufen, während der Ablauf fortgesetzt wird. Es spielt keine Rolle, ob Sie FormFlow im Code oder FormFlow von json verwenden. Momentan gibt es keinen Mechanismus, um dem Stapel einen Dialog innerhalb des Flusses hinzuzufügen. –