Microsoft Bot Framework - Как получить данные о пользователях из группового канала

У меня есть намерение LUIS в моем чат-боте, чтобы отправить электронное письмо как пользователь (код ниже). На данный момент он отправляет электронное письмо как я, мне (но отправляет из почтового ящика автоматизации с разрешениями на отправку со всех почтовых ящиков). Я хочу, чтобы он прочитал свойства пользователя, который взаимодействует с ботом в MS Teams, и использовал вместо этого адрес электронной почты этого пользователя?

 [LuisIntent("Endpoint_CreateTicket")]
    public async Task EndpointCreateTicketIntent(IDialogContext context, LuisResult result)
    {
        using (SmtpClient client = new SmtpClient())
        {
            using (MailMessage message = new MailMessage())
            {
                client.Host = "smtp.office365.com";
                client.Port = 587;
                client.UseDefaultCredentials = false;
                client.Credentials = new NetworkCredential("<confidential>", "<confidential>");
                client.EnableSsl = true;
                message.From = new MailAddress("[email protected]");
                message.Subject = "THIS IS THE SUBJECT";
                message.Body = "THIS IS THE BODY";
                message.To.Add("[email protected]");
                try
                {
                    client.Send(message);
                }
                catch(Exception e)
                {
                    await context.PostAsync(e.Message);
                }
            }
        }
    }

Команды Microsoft не предоставляют адрес электронной почты пользователя платформе ботов. Невозможно напрямую извлечь его из контекста или объектов деятельности. Вам нужно будет использовать что-то вроде графического API, чтобы получить адрес электронной почты.

D4RKCIDE 22.10.2018 18:48

@JasonSowers отлично, спасибо Джейсон - собираюсь попробовать вытащить действие Name, а затем создать класс, чтобы разрешить это против нашей БД или GAL

Mark Hawkins-Wood 22.10.2018 19:09
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
588
1

Ответы 1

У вас должно быть намерение извлечь электронную почту. Например, у вас может быть намерение под названием ExtractEmail типа Email

пользователь может ввести что-то вроде my email is [email protected],

следовательно, ваш ответ LUIS JSON возвращает что-то вроде

"entities": [
{
  "entity": "[email protected]",
  "type": "Email",
  "startIndex": 18,
  "endIndex": 22,
  "score": 0.9866132
}]

Из вашей функции попробуйте это

 using System.Net.Mail;

 try{
  MailAddress mail = new MailAddress(result.entity);
  message.From  = mail;
 }
 catch(Exception){
      //Reply with an error
  }

Подробнее о намерениях

Привет, Джон, я предполагаю, что единственная проблема, связанная с адресом электронной почты на основе пользовательского ввода, заключается в том, что пользователь может просто ввести адрес электронной почты кого-либо еще в организации, и он будет отправлять его от имени этого другого человека.

Mark Hawkins-Wood 22.10.2018 14:39

Но это было бы только частью кода LUIS Intent Recognition, не так ли? В этом примере пользователи намерены не сообщать боту свой адрес электронной почты, а запрашивать создание тикета (отправляя электронное письмо в службу поддержки). Затем действие этого намерения CreateTicket состоит в том, чтобы отправить электронное письмо в службу поддержки, но КАК пользователь, поэтому мне нужна некоторая форма ввода в сообщение. From = new MailAddress ("[email protected]"); раздел кода

Mark Hawkins-Wood 22.10.2018 15:19

Чтобы получить ввод от LUISResult, вы можете связать несколько намерений (CreateTicket и EmailRetriver) и просмотреть результат для доступа к электронной почте от пользователя.

John Nyingi 22.10.2018 15:26

Но если бы пользователь сказал: «Моя электронная почта - [email protected]», а на самом деле это «[email protected]», то result.entity просто протянет сущность [email protected] и будет использовать ее в качестве сообщения. From = new MailAddress - для этого кода нет авторизации. И я хотел избежать массы кода, участвующего в аутентификации пользователя, и вместо этого просто читать его электронную почту из своего профиля Teams - так как это будет канал, по которому они общаются с ботом.

Mark Hawkins-Wood 22.10.2018 15:54

Извините, я отвечаю на изначально заданный вопрос. Это политика StackOverflow. Вы можете подтвердить электронную почту с помощью ASP.NET Identity, ознакомьтесь с ней.

John Nyingi 22.10.2018 16:18

Другие вопросы по теме