2016-07-22 5 views
1

Я работаю над базовыми технологиями ботов, в одном из моих проектов я хочу обновить приведенные ниже строки кода с версии 1 до версии 3.Как создать клиентские объекты StateClient или Connector в других контроллерах, кроме Message Controller?

var client = new ConnectorClient(); 
      var getData = await client.Bots.GetUserDataAsync(Constants.botId, userid); 
      getData.Data = ar.Serialize(); 
      var foo = await client.Bots.SetUserDataAsync(Constants.botId, userid, getData); 

Скажите, пожалуйста, как решить эту проблему.

-Pradeep

ответ

0

Это работает:

if (activity.Type == ActivityTypes.Message) 
{ 
// Get any saved values 
StateClient sc = activity.GetStateClient(); 
BotData userData = sc.BotState.GetPrivateConversationData(activity.ChannelId, activity.Conversation.Id, activity.From.Id); 

boolAskedForUserName = userData.GetProperty<bool>("AskedForUserName"); 
strUserName = userData.GetProperty<string>("UserName") ?? "[No User Name]"; 

// Set BotUserData 
userData.SetProperty<string>("UserName", strUserName); 

// Save BotUserData 
    sc.BotState.SetPrivateConversationData(activity.ChannelId, activity.Conversation.Id, activity.From.Id, userData); 
} 

См: Creating a Hello World! Bot Using The Microsoft Bot Framework

+0

вы должны написали выше код в MessagesController, но я хочу тот же код в другом контроллере например LoginController. В MessageController работает нормально, потому что у него есть ссылка на активность, но когда я пытаюсь создать объект stateclient в LoginController, всегда будет Null. – pradeep

+1

Чтобы создать правильный экземпляр StateClient, вам потребуется либо ** MicrosoftAppCredentials **, либо ** Service Url **. Таким образом, вам не нужна сама деятельность. 'var stateClient = новый StateClient (новый Uri (serviceUrl));' Наконец, чтобы получить доступ к пользовательским данным, вам необходимо иметь userId и соответствующий channelId. Похоже, что версия 1 не отличалась между каналами при поиске пользователя. 'var data = await stateClient.BotState.GetUserDataAsync (channelid, userid);' – toastedtoast

+0

как создать объект StateClient с помощью MicrosoftAppCredentials, а также сообщить, что такое serviceUrl. – pradeep