2017-01-23 4 views
1

Я использую программу MicroSpot BotFramework.Bot Framework - Несколько ответов с задержкой

Процесс: клиенты просят моего бота генерировать конкретный код 1. Бот отвечает клиенту, что он генерирует код. 2. Спустя примерно 10 секунд бот отправляет код клиенту без какого-либо другого запроса.

Проблема: Я использую метод

ReplyToActivityAsync(...) 

отправить оба ответа, до возвращения заявления. В этом случае между двумя ответами возникает ошибка времени ожидания .

Вот мой код:

 if (activity.Type == ActivityTypes.Message) 
     { 
      ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl)); 

      // return our reply to the user 
      string welcomeMessage = "[...] Reply 1 [...]" 
      await connector.Conversations.ReplyToActivityAsync(activity.CreateReply(welcomeMessage)); 

      // MyApi.GetCode() takes about 10 secs 
      await connector.Conversations.ReplyToActivityAsync(activity.CreateReply(MyAPI.GetCode())); 
     } 

Как начать ответ, не дожидаясь запроса пользователя? Спасибо!

+0

Что произойдет, если во втором вызове вместо использования ReplyToActivityAsync вы используете SendToConversationAsync? –

+0

Точно так же. – Jonathan

+0

Да .. Я представляю это. И если вместо отправки MyAPI.GetCode() вы отправляете что-то еще, например, «привет», оно просто работает правильно? Я подозреваю, что проблема в вашем методе GetCode ... есть ли какие-либо изменения, чтобы сделать этот метод async? –

ответ

0

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

string userId ="123456789"; // For Example 
string serviceUrl = "https://telegram.botframework.com"; // For Example 

var connector = new ConnectorClient(new Uri(serviceUrl)); 
IMessageActivity newMessage = Activity.CreateMessageActivity(); 
newMessage.Type = ActivityTypes.Message; 
newMessage.From = new ChannelAccount("<BotId>", "<BotName>"); 
newMessage.Conversation = new ConversationAccount(false, userId); 
newMessage.Recipient = new ChannelAccount(userId); 
newMessage.Text = "<MessageText>"; 
await connector.Conversations.SendToConversationAsync((Activity)newMessage); 

В выше, вы можете отправить сообщение пользователю, используя его Id в соответствующем канале. Кроме того, serviceUrl определяется на основе соответствующего канала (здесь, например, Telegram).

 Смежные вопросы

  • Нет связанных вопросов^_^