我已通过在Azure门户中创建直接渠道将我的机器人部署到网站上。在我的机器人程序中,我有几个选择提示,可在整个对话框中进行确认,这在大多数情况下都可以顺利进行。问题在于,特别是对于一个选择提示,有时不呈现按钮。在Azure门户应用程序见解中,我看到有一个GET请求失败,响应代码为404,并且我认为它与此问题有关。为什么会发生这种情况,我该如何解决这个问题?
相对于随机出现,这应该是连续出现的方式:
来自应用程序见解:
编辑:
聊天机器人是使用Azure中的直接渠道和直接API 3嵌入到我的网站中的。该网站是在Drupal中开发的,可能与此问题相关... 有时,“是/否”按钮会闪烁显示。
此选择提示的代码:
private async Task<DialogTurnResult>ConfirmationStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
var response = (string)stepContext.Result;
stepContext.Values["phone"] = response;
var opts = new PromptOptions
{
Prompt = MessageFactory.Text($"Du har gitt
oss følgende opplysninger:\n\nTelefon: {response}\n\nEr dette korrekt?"),
RetryPrompt = MessageFactory.Text("Vennligst velg ett av alternativene."),
Choices = new List<Choice>(),
};
opts.Choices.Add(new Choice() { Value = "? Ja", Synonyms = new List<string> { "Ja", "ja" } });
opts.Choices.Add(new Choice() { Value = "? Nei", Synonyms = new List<string> { "Nei", "nei" } });
return await stepContext.PromptAsync(nameof(ChoicePrompt), opts, cancellationToken);
}
private async Task<DialogTurnResult> ConfirmationValidationStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
var response = ((FoundChoice)stepContext.Result).Value.ToLowerInvariant();
if (response == "? ja")
{
var opts = new PromptOptions()
{
Prompt = MessageFactory.Text("Dine opplysninger vil lagres og brukes i henhold til lover og forskrifter om personvern (GDPR). Samtykker du til at vi lagrer dine opplysninger?"),
RetryPrompt = MessageFactory.Text("Vennligst velg ett av alternativene."),
Choices = new List<Choice>(),
};
opts.Choices.Add(new Choice() { Value = "? Ja", Synonyms = new List<string> { "Ja", "ja" } });
opts.Choices.Add(new Choice() { Value = "? Nei", Synonyms = new List<string> { "Nei", "nei" } });
return await stepContext.PromptAsync(nameof(ChoicePrompt), opts, cancellationToken);
}
else
{
await stepContext.Context.SendActivityAsync(MessageFactory.Text("La oss begynne forfra så du kan fylle ut opplysningene på nytt."), cancellationToken);
return await stepContext.ReplaceDialogAsync(nameof(PhoneDialog), null, cancellationToken);
}
}