public IMessageActivity Map(IMessageActivity message) { if (String.IsNullOrEmpty(message.Text)) { return(message); } Task <string> translation = Task <String> .Factory.StartNew(() => { //store key is based on user to bot data. We need to build this a little different var key = Address.FromActivity(message); var userKey = new Address(key.UserId, key.ChannelId, key.BotId, key.ConversationId, key.ServiceUrl); var userData = _botDataStore.LoadAsync(userKey, BotStoreType.BotPrivateConversationData, CancellationToken.None).Result; var storedLangugageCode = userData.GetProperty <string>("ISOLanguageCode"); storedLangugageCode = storedLangugageCode ?? _languageUtilities.DefaultLanguage; var translatedText = _languageUtilities.TranslateTextAsync <List <AltLanguageTranslateResult> >(message.Text, storedLangugageCode).Result; return(translatedText[0].translations[0].text); }); message.Text = translation.Result; return(message); }
/// <summary> /// POST: api/Messages /// Receive a message from a user and reply to it /// </summary> public async Task <HttpResponseMessage> Post([FromBody] Activity activity) { if (activity.Type == ActivityTypes.Message) { var message = activity as IMessageActivity; string outputLanguage = string.Empty; if (activity.Text != null) { //detect incoming langugage var msgLanguage = await _languageUtilities.DetectInputLanguageAsync <List <AltLanguageDetectResult> >(activity.Text); outputLanguage = msgLanguage[0].language; var key = Address.FromActivity(activity); var userData = await _botDataStore.LoadAsync(key, BotStoreType.BotPrivateConversationData, CancellationToken.None); var storedLangugageCode = userData.GetProperty <string>("ISOLanguageCode"); storedLangugageCode = storedLangugageCode ?? _languageUtilities.DefaultLanguage; if (!storedLangugageCode.Equals(outputLanguage)) { //save new code userData.SetProperty("ISOLanguageCode", outputLanguage); await _botDataStore.SaveAsync(key, BotStoreType.BotPrivateConversationData, userData, CancellationToken.None); await _botDataStore.FlushAsync(key, CancellationToken.None); } List <AltLanguageTranslateResult> translatedObj = null; //we're assuming English is the bot language. So we will translate incoming non-english to english for processing if (!msgLanguage.Equals(_languageUtilities.DefaultLanguage)) { translatedObj = await _languageUtilities.TranslateTextAsync <List <AltLanguageTranslateResult> >(activity.Text, _languageUtilities.DefaultLanguage); } activity.Text = translatedObj[0].translations[0].text; } using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message)) { await Conversation.SendAsync(activity, () => scope.Resolve <MyLuisDialog>()); //await Conversation.SendAsync(activity, () => scope.Resolve<RootDialog>()); } } else { HandleSystemMessage(activity); } var response = Request.CreateResponse(HttpStatusCode.OK); return(response); }