Упреждающий обмен сообщениями не действительно работает для электронной почты (для предотвращения спама), поэтому лучше не использовать Bot Framework SDK для части электронной почты.@ Ссылка Баруха, Как отправлять электронную почту в ASP.NET C # хорошо, если вы используете C # SDK.Вот один для отправки электронных писем в Узле .
Все, что вам нужно сделать, это отправить электронное письмо, когда QnA Maker не возвращает никаких результатов.В этом примере вы бы сделали это здесь :
if (response != null && response.Length > 0)
{
await turnContext.SendActivityAsync(MessageFactory.Text(response[0].Answer), cancellationToken);
}
else
{
await turnContext.SendActivityAsync(MessageFactory.Text("No QnA Maker answers were found."), cancellationToken);
// Add code that sends Notification Email
}
При этом, если вы хотите попробовать полуактивный маршрутВы можете включить канал электронной почты в своем боте, а затем использовать это:
if (response != null && response.Length > 0)
{
await turnContext.SendActivityAsync(MessageFactory.Text(response[0].Answer), cancellationToken);
}
else
{
await turnContext.SendActivityAsync(MessageFactory.Text("No QnA Maker answers were found."), cancellationToken);
MicrosoftAppCredentials.TrustServiceUrl(@"https://email.botframework.com/", DateTime.MaxValue);
var user = new ChannelAccount(name: "MyUser", id: "<notified Email Address>");
var parameters = new ConversationParameters()
{
Members = new ChannelAccount[] { user },
Bot = turnContext.Activity.Recipient
};
var connector = new ConnectorClient(new Uri("https://email.botframework.com"), "<appId>", "<appPassword>");
var conversation = await connector.Conversations.CreateConversationAsync(parameters);
var activity = MessageFactory.Text("This is a notification email");
activity.From = parameters.Bot;
activity.Recipient = user;
await connector.Conversations.SendToConversationAsync(conversation.Id, activity);
}
Уловка в том, что <notified Email Address>
должен отправить сообщение боту, прежде чем будут работать любые уведомления.Если этого не произойдет, он вернет ошибку 401: Unauthorized
.Опять же, я не рекомендую этот маршрут.
Примечание. Если вы используете образец Dispatch, вы поместите код здесь :
private async Task ProcessSampleQnAAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
_logger.LogInformation("ProcessSampleQnAAsync");
var results = await _botServices.SampleQnA.GetAnswersAsync(turnContext);
if (results.Any())
{
await turnContext.SendActivityAsync(MessageFactory.Text(results.First().Answer), cancellationToken);
}
else
{
// PLACE IT HERE
await turnContext.SendActivityAsync(MessageFactory.Text("Sorry, could not find an answer in the Q and A system."), cancellationToken);
}
}