Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

340
Visualizações
Iniciar un mensaje del bot al usuario en BotFramework

Tengo un bot creado en BotFramework 3.5 y alojado en Azure como una aplicación web. No tuve ningún problema con la implementación de escenarios en los que el bot necesita responder a la entrada del usuario. Sin embargo, es necesario enseñarle a iniciar conversaciones según algún horario. Para alcanzar el objetivo, creé un WebJob que es básicamente una aplicación de consola simple. Aquí hay un código que se usa para iniciar un mensaje del bot al usuario:

 var botAccount = new ChannelAccount(id: from); var userAccount = new ChannelAccount(id: to); var conversation = new ConversationAccount(false, conversationId); var connector = new ConnectorClient(serviceUrl); IMessageActivity message = Activity.CreateMessageActivity(); message.From = botAccount; message.Recipient = userAccount; message.Conversation = conversation; message.Text = text; message.Locale = locale; await connector.Conversations.SendToConversationAsync((Activity)message);

from, to, serviceUrl, conversationId : se toman de la conversación anterior, por lo que espero que sean válidos. Sin embargo, en SendToConversationAsync se lanza una excepción:

 System.UnauthorizedAccessException: Authorization for Microsoft App ID 3a26a4d4-f75a-4feb-b3e0-37a7fa24e5fc failed with status code Unauthorized and reason phrase 'Unauthorized' ---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (Unauthorized)

El archivo app.config contiene los mismos valores que la API del bot original, incluidos AppId y AppSecret. Vi algunas preguntas planteadas sobre el mismo tema, pero no logré encontrar una respuesta.

¿Me estoy perdiendo de algo? ¿Es un enfoque válido para enviar mensajes en nombre del bot desde la aplicación de la consola?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Según su descripción, seguí este tutorial para comenzar con el Conector y seguí este tutorial para enviar y recibir actividades.

Según su código, creé mi aplicación de consola y pude reproducir el mismo problema, luego encontré un problema de git sobre el problema similar. Después de algunas pruebas, pude hacer que funcionara como se esperaba por mi parte, puede consultarlo:

 MicrosoftAppCredentials.TrustServiceUrl("{ServiceUrl}", DateTime.Now.AddDays(7)); var account=new MicrosoftAppCredentials("MicrosoftAppIdKey", "MicrosoftAppPasswordKey"); var connector = new ConnectorClient(new Uri("{ServiceUrl}"),account);

O

Implemente su DelegatingHandler

 public class MyDelegatingHandler : DelegatingHandler { private string _token; public MyDelegatingHandler(string token) { _token = token; } protected override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", _token); return base.SendAsync(request, cancellationToken); } }

Luego, debe crear su ConnectorClient de la siguiente manera:

 var account=new MicrosoftAppCredentials("{MicrosoftAppIdKey}", "{MicrosoftAppPasswordKey}"); var jwtToken=await account.GetTokenAsync(); var connector = new ConnectorClient(new Uri("{serviceUrl}"),handlers:new MyDelegatingHandler(jwtToken));

Aquí está el fragmento de código de mi aplicación de consola, puede consultarlo:

 try { var userAccount = new ChannelAccount() { Id = "default-user", Name = "user" }; var botAccount = new ChannelAccount() { Id = "934493jn5f6f348f", Name = "console-Bot" }; string url = "{serviceUrl}"; MicrosoftAppCredentials.TrustServiceUrl(url, DateTime.Now.AddDays(7)); var account = new MicrosoftAppCredentials("{MicrosoftAppIdKey}", "{MicrosoftAppPasswordKey}"); var connector = new ConnectorClient(new Uri(url), account); IMessageActivity message = Activity.CreateMessageActivity(); message.From = botAccount; message.Recipient = userAccount; message.Conversation = new ConversationAccount() { Id = "{conversationId}" }; message.Text = "Message sent from console application!!!"; message.Locale = "en-us"; var response = await connector.Conversations.SendToConversationAsync((Activity)message); Console.WriteLine($"response:{response.Id}"); } catch (Exception e) { Console.WriteLine($"exception:{e.Message}\r\n{e.StackTrace}"); }

Resultado

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Relatório

0

Intente crear una nueva conversación como esta:

 var conversationId = await connector.Conversations.CreateDirectConversationAsync(botAccount, userAccount);
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda