我一直在使用Direct Line在Bot Framework V3上构建解决方案。 该漫游器工作正常,但是当用户首次提出问题时,它会在聊天窗口中引发“无法发送重试”消息,然后回复该用户。 我的应用程序使用LUIS和QnA Maker。 当请求QnA Maker答案时,总是会发生此问题。 我最好的猜测是QnaMakers会触发超时,直到答案已缓存在内存中。 根对话框代码段:
[LuisIntent("QnAMaker")]
public async Task QnAMaker(IDialogContext context, LuisResult result)
{
await context.Forward(new QnaMakerDialog(), AfterQnADialog, context.Activity, CancellationToken.None);
}
QnaMaker代码段:
[Serializable]
public class QnaMakerDialog : QnAMakerDialog
{
public QnaMakerDialog() : base(new QnAMakerService(new QnAMakerAttribute(BellaMain.GlobalVariable.QnAAuthKey, BellaMain.GlobalVariable.QnAKnowledgebaseId, "Couldn't find your answer. Can you re-phrase it please?", 0.5, 1, BellaMain.GlobalVariable.QnAEndpointHostName)))
{
}
protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
{
var messageString = result.Answers.First().Answer;
await context.PostAsync(messageString);
context.Wait(MessageReceivedAsync);
}
}
消息控制器代码:
public class MessagesController : ApiController
{
/// <summary>
/// POST: api/Messages
/// Receive a message from a user and reply to it
/// </summary>
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
//Global Variables Load
BellaMain BellaMain = new BellaMain();
try
{
BellaMain.AppStartup();
}
catch
{
activity.Text = "DB access error";
}
BellaMain.GlobalVariable.SetGlobalCustomerID(BellaMain.GlobalVariable.CustomerID);
// LUIS Credentials Set
var luisAttributes = new LuisModelAttribute(BellaMain.GlobalVariable.LuisModelID, BellaMain.GlobalVariable.LuisSubscriptionKey, LuisApiVersion.V2, BellaMain.GlobalVariable.LuisDomainName);
var luisService = new LuisService(luisAttributes);
var connector = new ConnectorClient(new Uri(activity.ServiceUrl));
var activityFromID = "";
switch (activity.Type)
{
case ActivityTypes.Message:
//** Display a "is typing kind" animation before the bot reply
var isTypingReply = activity.CreateReply(String.Empty);
isTypingReply.Type = ActivityTypes.Typing;
ConnectorClient isTypingConnector = new ConnectorClient(new Uri(activity.ServiceUrl));
await isTypingConnector.Conversations.ReplyToActivityAsync(isTypingReply);
await Conversation.SendAsync(activity, () => new Dialogs.RootDialog(luisService).DefaultIfException());
break;
case ActivityTypes.Event:
var eventActivity = activity.AsEventActivity();
if (eventActivity.Name == "requestWelcomeDialog")
{
var reply = activity.CreateReply();
if (BellaMain.GlobalVariable.BellaWelcomeGreetings != "")
{
reply.Text = BellaMain.GlobalVariable.BellaWelcomeGreetings;
await connector.Conversations.ReplyToActivityAsync(reply);
BellaMain.BotWait("while");
}
// Launches the User Data Collection Form If the Case
if (BellaMain.GlobalVariable.FlagCollectUserDataOnConversationStart)
{
await Conversation.SendAsync(activity, () => new Dialogs.CustomUserDataCollectFormDialogDispacher().DefaultIfException());
}
//Launches Bella Help If the Case
if (BellaMain.GlobalVariable.FlagBellaHelpOnConversationStart)
{
await Conversation.SendAsync(activity, () => new Dialogs.CustomBellaHelpDispacher().DefaultIfException());
}
}
break;
}
return Request.CreateResponse(HttpStatusCode.OK);
}
}
如何避免出现此消息?提前谢谢
答案 0 :(得分:0)
添加呼叫
MicrosoftAppCredentials.TrustServiceUrl(activity.ServiceUrl);
在使用ConnectorClient
之前。这样可以确保传出邮件的网址被认为是受信任的。