Я хочу вызвать почту, когда бот говорит, что у нее нет ответа - PullRequest
0 голосов
/ 12 июня 2019

Я хочу вызвать почту, когда бот говорит, что у него нет ответа.

Я использую MS Bot Framework SDK4 и также использую LUIS и QnA maker, когда бот достиг точки, где он говорит, что у него нет ответа, мы хотим, чтобы почта была запущена или добавили новый элемент в доля

Ответы [ 2 ]

1 голос
/ 15 июня 2019

Если вы хотите добавить ответ без ответа в список SharePoint, мне удалось заставить его работать, используя пакет csom-node и Bot Framework v4 / NodeJS.Конечно, это не самое элегантное решение, но оно работает.

Bot.JS

const csomapi = require('../node_modules/csom-node');
settings = require('../settings').settings;

// Set CSOM settings
csomapi.setLoaderOptions({url: settings.siteurl});

Чуть дальше вниз по странице ...

// If no answers were returned from QnA Maker, reply with help.
            } else {
                await context.sendActivity("Er sorry, I don't seem to have an answer.");
                console.log(context.activity.text);
                var response = context.activity.text;
                var authCtx = new AuthenticationContext(settings.siteurl);
                authCtx.acquireTokenForApp(settings.clientId, settings.clientSecret, function (err, data) {

                    var ctx = new SP.ClientContext("/sites/yoursite");  //set root web
                    authCtx.setAuthenticationCookie(ctx);  //authenticate
                        var web = ctx.get_web();
                        var list = web.get_lists().getByTitle('YourList');
                        var creationInfo = new SP.ListItemCreationInformation();
                        var listItem = list.addItem(creationInfo);
                        listItem.set_item('Title', response);
                        listItem.update();
                        ctx.load(listItem);
                        ctx.executeQueryAsync();
                });
            }
0 голосов
/ 13 июня 2019

Упреждающий обмен сообщениями не действительно работает для электронной почты (для предотвращения спама), поэтому лучше не использовать 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);
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...