Example #1
0
        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);
        }
Example #2
0
        /// <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);
        }