예제 #1
0
        private async Task <IAliceResponseBase> GetAliceResponseAsync(DemoAliceRequest aliceRequest)
        {
            var buttons = new List <AliceButtonModel>()
            {
                new AliceButtonModel(_codeButtonTitle, true, null, new Uri(_githubLink)),
                new AliceButtonModel(_noImageButtonTitle, true),
                new AliceButtonModel(_oneImageButtonTitle, true),
                new AliceButtonModel(_galleryButtonTitle, true),
                new AliceButtonModel(_testIntentButtonTitle, true),
                new AliceButtonModel(_resourcesWorkButtonTitle, true)
            };

            if (aliceRequest.Meta.Interfaces.GeolocationSharing != null)
            {
                buttons.Add(new AliceButtonModel(_geolocationButtonTitle, true));
            }

            if (aliceRequest.Request.Command == _codeButtonTitle)
            {
                string text        = $"Вот ссылка на github";
                var    codeButtons = new List <AliceButtonModel>()
                {
                    new AliceButtonModel(_githubLink, false, null, new Uri(_githubLink))
                };
                return(new AliceResponse <CustomSessionState, object>(aliceRequest, text, codeButtons));
            }
            if (aliceRequest.Request.Command == _noImageButtonTitle)
            {
                string text = $"Это пример ответа без изображений. Здесь может быть текст или например эмодзи {char.ConvertFromUtf32(0x1F60E)}";
                return(new AliceResponse <CustomSessionState, object>(aliceRequest, text, buttons));
            }
            if (aliceRequest.Request.Command == _oneImageButtonTitle ||
                aliceRequest.Request.Command == "ответ с 1 изображением")
            {
                string text          = $"Здесь можно отобразить только одно большое фото. Например котика";
                var    aliceResponse = new AliceImageResponse <CustomSessionState, object>(aliceRequest, text, buttons);
                aliceResponse.Response.Card = new AliceImageCardModel
                {
                    Title       = "Манчкин",
                    Description = "Современная порода кошек. При средней длине тела их лапки короче, чем у обычных кошек в 2-3 раза.",
                    ImageId     = DemoResources.Images.CatImageId1,
                    Button      = new AliceImageCardButtonModel()
                    {
                        Text = "подробнее",
                        Url  = new Uri("https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%BD%D1%87%D0%BA%D0%B8%D0%BD_(%D0%BF%D0%BE%D1%80%D0%BE%D0%B4%D0%B0_%D0%BA%D0%BE%D1%88%D0%B5%D0%BA)")
                    }
                };
                return(aliceResponse);
            }
            if (aliceRequest.Request.Command == _galleryButtonTitle)
            {
                string text          = $"В ответе такого типа можно отобразить несколько фотографий";
                var    aliceResponse = new AliceGalleryResponse <CustomSessionState, object>(aliceRequest, text, buttons);
                aliceResponse.Response.Card = new AliceGalleryCardModel
                {
                    Header = new AliceGalleryCardHeaderModel("Щеночки"),
                    Items  = new List <AliceGalleryCardItem>()
                    {
                        new AliceGalleryCardItem()
                        {
                            Title       = "Ягдтерьер",
                            ImageId     = DemoResources.Images.DogImageId1,
                            Description = "Порода универсальных охотничьих собак.",
                            Button      = new AliceImageCardButtonModel()
                            {
                                Text = "подробнее",
                                Url  = new Uri("https://ru.wikipedia.org/wiki/%D0%9D%D0%B5%D0%BC%D0%B5%D1%86%D0%BA%D0%B8%D0%B9_%D1%8F%D0%B3%D0%B4%D1%82%D0%B5%D1%80%D1%8C%D0%B5%D1%80")
                            }
                        },
                        new AliceGalleryCardItem()
                        {
                            Title       = "Хаски",
                            ImageId     = DemoResources.Images.DogImageId2,
                            Description = "Общее название для нескольких пород ездовых собак, выведенных в северных регионах, которые отличаются быстрой манерой тянуть упряжку.",
                            Button      = new AliceImageCardButtonModel()
                            {
                                Text = "подробнее",
                                Url  = new Uri("https://ru.wikipedia.org/wiki/%D0%A5%D0%B0%D1%81%D0%BA%D0%B8")
                            }
                        },
                        new AliceGalleryCardItem()
                        {
                            Title       = "Лабрадор",
                            ImageId     = DemoResources.Images.DogImageId3,
                            Description = "Порода собак. Первоначально была выведена в качестве охотничьей подружейной собаки.",
                            Button      = new AliceImageCardButtonModel()
                            {
                                Text = "подробнее",
                                Url  = new Uri("https://ru.wikipedia.org/wiki/%D0%9B%D0%B0%D0%B1%D1%80%D0%B0%D0%B4%D0%BE%D1%80-%D1%80%D0%B5%D1%82%D1%80%D0%B8%D0%B2%D0%B5%D1%80")
                            }
                        }
                    },
                    Footer = new AliceGalleryCardFooterModel("больше щеночков",
                                                             new AliceImageCardButtonModel()
                    {
                        Text = "больше щеночков",
                        Url  = new Uri("https://www.google.com/search?q=%D1%89%D0%B5%D0%BD%D0%BE%D1%87%D0%BA%D0%B8&sxsrf=ALeKk03SlYE13sTDiS7dm3TPL9e5Y3FEMw:1589313761070&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiW4qiRj6_pAhXsw8QBHVOqBHcQ_AUoAXoECAoQAw&biw=1216&bih=601")
                    })
                };
                return(aliceResponse);
            }
            if (aliceRequest.Request.Command == _testIntentButtonTitle)
            {
                string text          = "Для того чтобы протестировать интент, нажмите на одну из кнопок";
                var    intentButtons = new List <AliceButtonModel>()
                {
                    new AliceButtonModel("включи свет в ванной"),
                    new AliceButtonModel("включи кондиционер на кухне"),
                    new AliceButtonModel(_homeButtonTitle)
                };
                return(new AliceResponse <CustomSessionState, object>(aliceRequest, text, intentButtons)
                {
                    SessionState = new CustomSessionState(ModeType.IntentsTesting)
                });
            }
            if (aliceRequest.Request.Command == _resourcesWorkButtonTitle)
            {
                string text             = "Так же я могу управлять файлами изображений и звуков в навыке, используя HTTP API. Попробуйте отправить мне ссылку на изображение и я отображу его в ответе";
                var    resourcesButtons = new List <AliceButtonModel>()
                {
                    new AliceButtonModel(_homeButtonTitle)
                };
                return(new AliceResponse <CustomSessionState, object>(aliceRequest, text, resourcesButtons)
                {
                    SessionState = new CustomSessionState(ModeType.ResourcesTesting)
                });
            }
            if (aliceRequest.Request.Command == _geolocationButtonTitle)
            {
                var response = new AliceResponse <CustomSessionState, object>(aliceRequest, "Разрешите доступ к геолокации, чтобы навык смог ее узнать")
                {
                    SessionState = new CustomSessionState()
                };
                response.Response.Directives.SetRequestGeolocation();
                return(response);
            }
            if (aliceRequest.Request.Type == AliceRequestType.GeolocationAllowed)
            {
                string text = $"Ваши координаты: {aliceRequest.Session.Location.Lat}, {aliceRequest.Session.Location.Lon}";
                return(new AliceResponse <CustomSessionState, object>(aliceRequest, text, buttons)
                {
                    SessionState = new CustomSessionState()
                });
            }

            if (aliceRequest.Request.Command != _homeButtonTitle &&
                aliceRequest.State?.Session?.Mode == ModeType.ResourcesTesting)
            {
                if (Uri.TryCreate(aliceRequest.Request.OriginalUtterance, UriKind.Absolute, out Uri uri))
                {
                    var response = await _dialogsApiService.UploadImageAsync(_aliceSettings.SkillId, new DialogsWebUploadRequest(uri)).ConfigureAwait(false);

                    if (response.IsSuccess)
                    {
                        var uploadedButtons = new List <AliceButtonModel>()
                        {
                            new AliceButtonModel(_homeButtonTitle, true)
                        };
                        var aliceResponse = new AliceImageResponse <CustomSessionState, object>(aliceRequest, "Изображение загружено", uploadedButtons);
                        aliceResponse.Response.Card = new AliceImageCardModel
                        {
                            Title       = Yandex_Alice_Sdk_Demo_Resources.Image_Upload_Success,
                            Description = "Вы можете попробовать загрузить другое изображение",
                            ImageId     = response.Content.Image.Id,
                        };
                        aliceResponse.SessionState = new CustomSessionState(ModeType.ResourcesTesting);
                        return(aliceResponse);
                    }
                }
                string text             = "Не удалось загрузить изображение. Попробуйте еще раз";
                var    resourcesButtons = new List <AliceButtonModel>()
                {
                    new AliceButtonModel(_homeButtonTitle)
                };
                return(new AliceResponse <CustomSessionState, object>(aliceRequest, text, resourcesButtons)
                {
                    SessionState = new CustomSessionState(ModeType.ResourcesTesting)
                });
            }
            if (aliceRequest.Request.Command != _homeButtonTitle &&
                aliceRequest.Request.Nlu?.Intents?.TurnOn == null &&
                aliceRequest.State?.Session?.Mode == ModeType.IntentsTesting)
            {
                string text          = "Не удалось распознать интент. Попробуйте еще раз";
                var    intentButtons = new List <AliceButtonModel>()
                {
                    new AliceButtonModel("включи свет в ванной"),
                    new AliceButtonModel("включи кондиционер на кухне"),
                    new AliceButtonModel(_homeButtonTitle)
                };
                return(new AliceResponse <CustomSessionState, object>(aliceRequest, text, intentButtons)
                {
                    SessionState = new CustomSessionState(ModeType.IntentsTesting)
                });
            }
            if (aliceRequest.Request.Nlu?.Intents?.TurnOn != null)
            {
                var what = aliceRequest.Request.Nlu.Intents.TurnOn.Slots.What as AliceEntityStringModel;
                var where = aliceRequest.Request.Nlu.Intents.TurnOn.Slots.Where as AliceEntityStringModel;
                string text = $"Я распознал интент и понял что нужно включить {what.Value} {where.Value}. Но делать я этого конечно не буду " + char.ConvertFromUtf32(0x1F60E);
                return(new AliceResponse <CustomSessionState, object>(aliceRequest, text, buttons));
            }
            else
            {
                string text = aliceRequest.Session.New
                    ? "Привет! Это навык, демонстрирующий работу неофициального SDK для разработки навыков для Алисы на .Net"
                    : "Выберите действие";
                return(new AliceResponse <CustomSessionState, object>(aliceRequest, text, buttons));
            }
        }
예제 #2
0
 private static AliceResponseBase GetAliceResponse(AliceRequest aliceRequest)
 {
     if (aliceRequest.Request.Command == _codeButtonTitle)
     {
         string text    = $"Вот ссылка на github";
         var    buttons = new List <AliceButtonModel>()
         {
             new AliceButtonModel(_githubLink, false, null, new Uri(_githubLink))
         };
         return(new AliceResponse(aliceRequest, text, buttons));
     }
     else if (aliceRequest.Request.Command == _noImageButtonTitle)
     {
         string text    = $"Это пример ответа без изображений. Здесь может быть текст или например эмодзи {char.ConvertFromUtf32(0x1F60E)}";
         var    buttons = new List <AliceButtonModel>()
         {
             new AliceButtonModel(_codeButtonTitle, false, null, new Uri(_githubLink)),
             new AliceButtonModel(_oneImageButtonTitle),
             new AliceButtonModel(_galleryButtonTitle)
         };
         return(new AliceResponse(aliceRequest, text, buttons));
     }
     else if (aliceRequest.Request.Command == _oneImageButtonTitle ||
              aliceRequest.Request.Command == "ответ с 1 изображением")
     {
         string text    = $"Здесь можно отобразить только одно большое фото. Например котика";
         var    buttons = new List <AliceButtonModel>()
         {
             new AliceButtonModel(_codeButtonTitle, true, null, new Uri(_githubLink)),
             new AliceButtonModel(_noImageButtonTitle, true),
             new AliceButtonModel(_galleryButtonTitle, true)
         };
         var aliceResponse = new AliceImageResponse(aliceRequest, text, buttons);
         aliceResponse.Response.Card = new AliceImageCardModel
         {
             Title       = "Манчкин",
             Description = "Современная порода кошек. При средней длине тела их лапки короче, чем у обычных кошек в 2-3 раза.",
             ImageId     = "937455/748ce93e9e77af0a53d1",
             Button      = new AliceImageCardButtonModel()
             {
                 Text = "подробнее",
                 Url  = new Uri("https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%BD%D1%87%D0%BA%D0%B8%D0%BD_(%D0%BF%D0%BE%D1%80%D0%BE%D0%B4%D0%B0_%D0%BA%D0%BE%D1%88%D0%B5%D0%BA)")
             }
         };
         return(aliceResponse);
     }
     else if (aliceRequest.Request.Command == _galleryButtonTitle)
     {
         string text    = $"В ответе такого типа можно отобразить несколько фотографий";
         var    buttons = new List <AliceButtonModel>()
         {
             new AliceButtonModel(_codeButtonTitle, true, null, new Uri(_githubLink)),
             new AliceButtonModel(_noImageButtonTitle, true),
             new AliceButtonModel(_oneImageButtonTitle, true)
         };
         var aliceResponse = new AliceGalleryResponse(aliceRequest, text, buttons);
         aliceResponse.Response.Card = new AliceGalleryCardModel
         {
             Header = new AliceGalleryCardHeaderModel("Щеночки"),
             Items  = new List <AliceGalleryCardItem>()
             {
                 new AliceGalleryCardItem()
                 {
                     Title       = "Ягдтерьер",
                     ImageId     = "1656841/2ffd3010e6df3d0fd513",
                     Description = "Порода универсальных охотничьих собак.",
                     Button      = new AliceImageCardButtonModel()
                     {
                         Text = "подробнее",
                         Url  = new Uri("https://ru.wikipedia.org/wiki/%D0%9D%D0%B5%D0%BC%D0%B5%D1%86%D0%BA%D0%B8%D0%B9_%D1%8F%D0%B3%D0%B4%D1%82%D0%B5%D1%80%D1%8C%D0%B5%D1%80")
                     }
                 },
                 new AliceGalleryCardItem()
                 {
                     Title       = "Хаски",
                     ImageId     = "965417/8d82b0800c9cf1cdcf78",
                     Description = "Общее название для нескольких пород ездовых собак, выведенных в северных регионах, которые отличаются быстрой манерой тянуть упряжку.",
                     Button      = new AliceImageCardButtonModel()
                     {
                         Text = "подробнее",
                         Url  = new Uri("https://ru.wikipedia.org/wiki/%D0%A5%D0%B0%D1%81%D0%BA%D0%B8")
                     }
                 },
                 new AliceGalleryCardItem()
                 {
                     Title       = "Лабрадор",
                     ImageId     = "965417/6ac8614766ecc99a3967",
                     Description = "Порода собак. Первоначально была выведена в качестве охотничьей подружейной собаки.",
                     Button      = new AliceImageCardButtonModel()
                     {
                         Text = "подробнее",
                         Url  = new Uri("https://ru.wikipedia.org/wiki/%D0%9B%D0%B0%D0%B1%D1%80%D0%B0%D0%B4%D0%BE%D1%80-%D1%80%D0%B5%D1%82%D1%80%D0%B8%D0%B2%D0%B5%D1%80")
                     }
                 }
             },
             Footer = new AliceGalleryCardFooterModel("больше щеночков",
                                                      new AliceImageCardButtonModel()
             {
                 Text = "больше щеночков",
                 Url  = new Uri("https://www.google.com/search?q=%D1%89%D0%B5%D0%BD%D0%BE%D1%87%D0%BA%D0%B8&sxsrf=ALeKk03SlYE13sTDiS7dm3TPL9e5Y3FEMw:1589313761070&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiW4qiRj6_pAhXsw8QBHVOqBHcQ_AUoAXoECAoQAw&biw=1216&bih=601")
             })
         };
         return(aliceResponse);
     }
     else
     {
         string text = aliceRequest.Session.New
             ? "Привет! Это навык, демонстрирующий работу неофициального SDK для разработки навыков для Алисы на .Net"
             : "Выберите действие";
         var buttons = new List <AliceButtonModel>()
         {
             new AliceButtonModel(_codeButtonTitle, false, null, new Uri(_githubLink)),
             new AliceButtonModel(_noImageButtonTitle),
             new AliceButtonModel(_oneImageButtonTitle),
             new AliceButtonModel(_galleryButtonTitle)
         };
         return(new AliceResponse(aliceRequest, text, buttons));
     }
 }