У меня есть намерение 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);
}
}
}
}
@JasonSowers отлично, спасибо Джейсон - собираюсь попробовать вытащить действие Name, а затем создать класс, чтобы разрешить это против нашей БД или GAL
У вас должно быть намерение извлечь электронную почту. Например, у вас может быть намерение под названием 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
}
Привет, Джон, я предполагаю, что единственная проблема, связанная с адресом электронной почты на основе пользовательского ввода, заключается в том, что пользователь может просто ввести адрес электронной почты кого-либо еще в организации, и он будет отправлять его от имени этого другого человека.
Но это было бы только частью кода LUIS Intent Recognition, не так ли? В этом примере пользователи намерены не сообщать боту свой адрес электронной почты, а запрашивать создание тикета (отправляя электронное письмо в службу поддержки). Затем действие этого намерения CreateTicket состоит в том, чтобы отправить электронное письмо в службу поддержки, но КАК пользователь, поэтому мне нужна некоторая форма ввода в сообщение. From = new MailAddress ("[email protected]"); раздел кода
Чтобы получить ввод от LUISResult
, вы можете связать несколько намерений (CreateTicket и EmailRetriver) и просмотреть результат для доступа к электронной почте от пользователя.
Но если бы пользователь сказал: «Моя электронная почта - [email protected]», а на самом деле это «[email protected]», то result.entity просто протянет сущность [email protected] и будет использовать ее в качестве сообщения. From = new MailAddress - для этого кода нет авторизации. И я хотел избежать массы кода, участвующего в аутентификации пользователя, и вместо этого просто читать его электронную почту из своего профиля Teams - так как это будет канал, по которому они общаются с ботом.
Извините, я отвечаю на изначально заданный вопрос. Это политика StackOverflow. Вы можете подтвердить электронную почту с помощью ASP.NET Identity
, ознакомьтесь с ней.
Команды Microsoft не предоставляют адрес электронной почты пользователя платформе ботов. Невозможно напрямую извлечь его из контекста или объектов деятельности. Вам нужно будет использовать что-то вроде графического API, чтобы получить адрес электронной почты.