in templates/csharp/Skill/Skill/Dialogs/MainDialog.cs [199:273]
private async Task<DialogTurnResult> RouteStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
var activity = stepContext.Context.Activity;
if (activity.Type == ActivityTypes.Message && !string.IsNullOrEmpty(activity.Text))
{
// Get current cognitive models for the current locale.
var localizedServices = _services.GetCognitiveModels();
// Get skill LUIS model from configuration.
localizedServices.LuisServices.TryGetValue("$safeprojectname$", out var luisService);
if (luisService != null)
{
var result = stepContext.Context.TurnState.Get<$safeprojectname$Luis>(StateProperties.SkillLuisResult);
var intent = result?.TopIntent().intent;
switch (intent)
{
case $safeprojectname$Luis.Intent.Sample:
{
return await stepContext.BeginDialogAsync(_sampleDialog.Id, cancellationToken: cancellationToken);
}
case $safeprojectname$Luis.Intent.None:
default:
{
// intent was identified but not yet implemented
await stepContext.Context.SendActivityAsync(_templateEngine.GenerateActivityForLocale("UnsupportedMessage"), cancellationToken);
return await stepContext.NextAsync(cancellationToken: cancellationToken);
}
}
}
else
{
throw new Exception("The specified LUIS Model could not be found in your Bot Services configuration.");
}
}
else if (activity.Type == ActivityTypes.Event)
{
var ev = activity.AsEventActivity();
if (!string.IsNullOrEmpty(ev.Name))
{
switch (ev.Name)
{
case "SampleAction":
{
SampleActionInput actionData = null;
if (ev.Value is JObject eventValue)
{
actionData = eventValue.ToObject<SampleActionInput>();
}
// Invoke the SampleAction dialog passing input data if available
return await stepContext.BeginDialogAsync(nameof(SampleAction), actionData, cancellationToken);
}
default:
{
await stepContext.Context.SendActivityAsync(new Activity(type: ActivityTypes.Trace, text: $"Unknown Event '{ev.Name ?? "undefined"}' was received but not processed."), cancellationToken);
break;
}
}
}
else
{
await stepContext.Context.SendActivityAsync(new Activity(type: ActivityTypes.Trace, text: "An event with no name was received but not processed."), cancellationToken);
}
}
// If activity was unhandled, flow should continue to next step
return await stepContext.NextAsync(cancellationToken: cancellationToken);
}