Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

335
Vistas
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?

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

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í

about 4 years ago · Santiago Trujillo Denunciar

0

Intente crear una nueva conversación como esta:

 var conversationId = await connector.Conversations.CreateDirectConversationAsync(botAccount, userAccount);
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda