From 025ca3810fd987434473afecc8f1d429987facd1 Mon Sep 17 00:00:00 2001 From: Oceania2018 Date: Mon, 18 Jun 2018 09:07:00 -0500 Subject: [PATCH 1/5] Add music.bot --- .../Agents/Dialogflow/Spotify/agent.json | 36 + .../Spotify/entities/music-album.json | 7 + .../entities/music-album_entries_en.json | 737 ++ .../Spotify/entities/music-service.json | 7 + .../entities/music-service_entries_en.json | 107 + .../Spotify/entities/music-sort.json | 7 + .../entities/music-sort_entries_en.json | 28 + .../Dialogflow/Spotify/entities/playlist.json | 7 + .../Spotify/entities/playlist_entries_en.json | 265 + .../Dialogflow/Spotify/entities/song.json | 7 + .../Spotify/entities/song_entries_en.json | 608 ++ .../Spotify/intents/music.play.json | 97 + .../intents/music.play_usersays_en.json | 6121 +++++++++++++++++ .../music_player_control.add_favorite.json | 37 + ...ayer_control.add_favorite_usersays_en.json | 178 + .../music_player_control.add_playlist.json | 45 + ...ayer_control.add_playlist_usersays_en.json | 155 + .../intents/music_player_control.pause.json | 37 + ...usic_player_control.pause_usersays_en.json | 108 + .../intents/music_player_control.play.json | 37 + ...music_player_control.play_usersays_en.json | 289 + .../intents/music_player_control.repeat.json | 37 + ...sic_player_control.repeat_usersays_en.json | 651 ++ .../intents/music_player_control.resume.json | 37 + ...sic_player_control.resume_usersays_en.json | 156 + .../intents/music_player_control.shuffle.json | 37 + ...ic_player_control.shuffle_usersays_en.json | 62 + .../music_player_control.skip_backward.json | 37 + ...yer_control.skip_backward_usersays_en.json | 210 + .../music_player_control.skip_forward.json | 37 + ...ayer_control.skip_forward_usersays_en.json | 534 ++ .../intents/music_player_control.stop.json | 37 + ...music_player_control.stop_usersays_en.json | 172 + .../Agents/Dialogflow/Spotify/package.json | 3 + 34 files changed, 10930 insertions(+) create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/agent.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-album.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-album_entries_en.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-service.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-service_entries_en.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-sort.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-sort_entries_en.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/playlist.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/playlist_entries_en.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/song.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/song_entries_en.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music.play.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music.play_usersays_en.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.add_favorite.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.add_favorite_usersays_en.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.add_playlist.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.add_playlist_usersays_en.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.pause.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.pause_usersays_en.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.play.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.play_usersays_en.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.repeat.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.repeat_usersays_en.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.resume.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.resume_usersays_en.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.shuffle.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.shuffle_usersays_en.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.skip_backward.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.skip_backward_usersays_en.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.skip_forward.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.skip_forward_usersays_en.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.stop.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.stop_usersays_en.json create mode 100644 BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/package.json diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/agent.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/agent.json new file mode 100644 index 00000000..c1dbd9a7 --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/agent.json @@ -0,0 +1,36 @@ +{ + "description": "Whether they\u0027re on the road, working out or relaxing on the couch, your users want complete control of their music. With this agent users can search, pause, skip or shuffle in your app, just by asking.", + "language": "en", + "shortDescription": "Play and control your music and playlists", + "examples": "User: Switch to workout music.\nUser: Put on my late night playlist.\nUser: Can you please play a song from my favorite playlist?\nUser: Play a song from Spotify.\nUser: I want to listen to some music.\nUser: Play an album by Madonna.\nUser: Play something by The Rolling Stones.", + "activeAssistantAgents": [], + "disableInteractionLogs": false, + "disableStackdriverLogs": true, + "googleAssistant": { + "googleAssistantCompatible": false, + "welcomeIntentSignInRequired": false, + "startIntents": [], + "systemIntents": [], + "endIntentIds": [], + "oAuthLinking": { + "required": false, + "grantType": "AUTH_CODE_GRANT" + }, + "voiceType": "MALE_1", + "capabilities": [], + "protocolVersion": "V1", + "isDeviceAgent": false + }, + "defaultTimezone": "America/New_York", + "webhook": { + "available": false, + "useForDomains": false, + "cloudFunctionsEnabled": false, + "cloudFunctionsInitialized": false + }, + "isPrivate": false, + "customClassifierMode": "use.instead", + "mlMinConfidence": 0.3, + "supportedLanguages": [], + "onePlatformApiVersion": "v1legacy" +} \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-album.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-album.json new file mode 100644 index 00000000..105dbc20 --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-album.json @@ -0,0 +1,7 @@ +{ + "id": "6fddba52-6c51-42b2-bd35-70c6cce204f5", + "name": "music-album", + "isOverridable": true, + "isEnum": false, + "automatedExpansion": true +} \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-album_entries_en.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-album_entries_en.json new file mode 100644 index 00000000..6ce5878d --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-album_entries_en.json @@ -0,0 +1,737 @@ +[ + { + "value": "Achtung Baby", + "synonyms": [ + "Achtung Baby" + ] + }, + { + "value": "At Folsom Prison", + "synonyms": [ + "At Folsom Prison" + ] + }, + { + "value": "Brain", + "synonyms": [ + "Brain" + ] + }, + { + "value": "Exodus", + "synonyms": [ + "Exodus" + ] + }, + { + "value": "Marquee Moon", + "synonyms": [ + "Marquee Moon" + ] + }, + { + "value": "Pet Sounds", + "synonyms": [ + "Pet Sounds" + ] + }, + { + "value": "Revolver", + "synonyms": [ + "Revolver" + ] + }, + { + "value": "Stand!", + "synonyms": [ + "Stand!" + ] + }, + { + "value": "Thriller", + "synonyms": [ + "Thriller" + ] + }, + { + "value": "Tommy", + "synonyms": [ + "Tommy" + ] + }, + { + "value": "Burst Apart", + "synonyms": [ + "Burst Apart" + ] + }, + { + "value": "Closing Time", + "synonyms": [ + "Closing Time" + ] + }, + { + "value": "Electric Ladyland", + "synonyms": [ + "Electric Ladyland" + ] + }, + { + "value": "Innervisions", + "synonyms": [ + "Innervisions" + ] + }, + { + "value": "Love", + "synonyms": [ + "love" + ] + }, + { + "value": "Power, Corruption \u0026 Lies", + "synonyms": [ + "Power, Corruption \u0026 Lies", + "Power Corruption Lies", + "corruption and lies" + ] + }, + { + "value": "Quadrophenia", + "synonyms": [ + "Quadrophenia" + ] + }, + { + "value": "Songs in the Key of Life", + "synonyms": [ + "Songs in the Key of Life" + ] + }, + { + "value": "The Wall", + "synonyms": [ + "The Wall" + ] + }, + { + "value": "American Beauty", + "synonyms": [ + "American Beauty" + ] + }, + { + "value": "Blue", + "synonyms": [ + "Blue" + ] + }, + { + "value": "Born to Run", + "synonyms": [ + "Born to Run" + ] + }, + { + "value": "Bringing It All Back Home", + "synonyms": [ + "Bringing It All Back Home" + ] + }, + { + "value": "Daydream Nation", + "synonyms": [ + "Daydream Nation" + ] + }, + { + "value": "Divorcio", + "synonyms": [ + "Divorcio" + ] + }, + { + "value": "Let It Be", + "synonyms": [ + "Let It Be" + ] + }, + { + "value": "\u0027Live\u0027 at The Apollo", + "synonyms": [ + "Live at The Apollo" + ] + }, + { + "value": "Magical Mystery Tour", + "synonyms": [ + "Magical Mystery Tour" + ] + }, + { + "value": "Paul\u0027s Boutique", + "synonyms": [ + "Paul s Boutique, Pauls Boutique" + ] + }, + { + "value": "Sgt. Pepper\u0027s Lonely Hearts Club Band", + "synonyms": [ + "Sgt Pepper s Lonely Hearts Club Band, Sgt Peppers Lonely Hearts Club Band" + ] + }, + { + "value": "Songs about Jane", + "synonyms": [ + "Songs about Jane" + ] + }, + { + "value": "The Velvet Underground and Nico", + "synonyms": [ + "The Velvet Underground and Nico" + ] + }, + { + "value": "Un Monde Meilleur", + "synonyms": [ + "Un Monde Meilleur" + ] + }, + { + "value": "Appetite for Destruction", + "synonyms": [ + "Appetite for Destruction" + ] + }, + { + "value": "Goodbye Yellow Brick Road", + "synonyms": [ + "Goodbye Yellow Brick Road" + ] + }, + { + "value": "Highway Revisited", + "synonyms": [ + "Highway Revisited" + ] + }, + { + "value": "Kind of Blue", + "synonyms": [ + "Kind of Blue" + ] + }, + { + "value": "Layla and Other Assorted Love Songs", + "synonyms": [ + "Layla and Other Assorted Love Songs" + ] + }, + { + "value": "Led Zeppelin II", + "synonyms": [ + "Led Zeppelin II" + ] + }, + { + "value": "Led Zeppelin II", + "synonyms": [ + "Led Zeppelin too, Led Zeppelin second, Led Zeppelin two, Led Zeppelin 2, Led Zeppelin II" + ] + }, + { + "value": "The Clash", + "synonyms": [ + "The Clash" + ] + }, + { + "value": "The Rise and Fall of Ziggy Stardust and the Spiders From Mars", + "synonyms": [ + "The Rise and Fall of Ziggy Stardust and the Spiders From Mars" + ] + }, + { + "value": "White", + "synonyms": [ + "White" + ] + }, + { + "value": "Who\u0027s Next", + "synonyms": [ + "Who s Next, Whos Next" + ] + }, + { + "value": "After the Gold Rush", + "synonyms": [ + "After the Gold Rush" + ] + }, + { + "value": "Beggars Banquet", + "synonyms": [ + "Beggars Banquet" + ] + }, + { + "value": "My Aim Is True", + "synonyms": [ + "My Aim Is True" + ] + }, + { + "value": "Straight Outta Compton", + "synonyms": [ + "Straight Outta Compton" + ] + }, + { + "value": "Summer", + "synonyms": [ + "Summer" + ] + }, + { + "value": "The Joshua Tree", + "synonyms": [ + "The Joshua Tree" + ] + }, + { + "value": "The Marshall Mathers LP", + "synonyms": [ + "The Marshall Mathers LP", + "The Marshall Mathers" + ] + }, + { + "value": "The Sun Sessions", + "synonyms": [ + "The Sun Sessions" + ] + }, + { + "value": "Some Girls", + "synonyms": [ + "Some Girls" + ] + }, + { + "value": "A Love Supreme", + "synonyms": [ + "A Love Supreme" + ] + }, + { + "value": "Automatic for the People", + "synonyms": [ + "Automatic for the People" + ] + }, + { + "value": "Moondance", + "synonyms": [ + "Moondance" + ] + }, + { + "value": "Nevermind", + "synonyms": [ + "Nevermind" + ] + }, + { + "value": "Raising Hell", + "synonyms": [ + "Raising Hell" + ] + }, + { + "value": "Tapestry", + "synonyms": [ + "Tapestry" + ] + }, + { + "value": "Forever Changes", + "synonyms": [ + "Forever Changes" + ] + }, + { + "value": "In the Court of the Crimson King", + "synonyms": [ + "In the Court of the Crimson King" + ] + }, + { + "value": "Let It Bleed", + "synonyms": [ + "Let It Bleed" + ] + }, + { + "value": "Never Mind the Bollocks Here\u0027s the Sex Pistols", + "synonyms": [ + "Never Mind the Bollocks Heres the Sex Pistols, Never Mind the Bollocks Here s the Sex Pistols" + ] + }, + { + "value": "Winter", + "synonyms": [ + "Winter" + ] + }, + { + "value": "Wish You Were Here", + "synonyms": [ + "Wish You Were Here" + ] + }, + { + "value": "19", + "synonyms": [ + "19" + ] + }, + { + "value": "Abraxas", + "synonyms": [ + "Abraxas" + ] + }, + { + "value": "Are You Experienced", + "synonyms": [ + "Are You Experienced" + ] + }, + { + "value": "Astral Weeks", + "synonyms": [ + "Astral Weeks" + ] + }, + { + "value": "Blonde on Blonde", + "synonyms": [ + "Blonde on Blonde" + ] + }, + { + "value": "Giant Steps", + "synonyms": [ + "Giant Steps" + ] + }, + { + "value": "It Takes a Nation of Millions to Hold Us Back", + "synonyms": [ + "It Takes a Nation of Millions to Hold Us Back" + ] + }, + { + "value": "Modern Sounds in Country and Western Music", + "synonyms": [ + "Modern Sounds in Country and Western Music" + ] + }, + { + "value": "The Bends", + "synonyms": [ + "The Bends" + ] + }, + { + "value": "Abbey Road", + "synonyms": [ + "Abbey Road" + ] + }, + { + "value": "Call Me", + "synonyms": [ + "Call Me" + ] + }, + { + "value": "Disraeli Gears", + "synonyms": [ + "Disraeli Gears" + ] + }, + { + "value": "Grace", + "synonyms": [ + "Grace" + ] + }, + { + "value": "Please Please Me", + "synonyms": [ + "Please Please Me" + ] + }, + { + "value": "Rumours", + "synonyms": [ + "Rumours" + ] + }, + { + "value": "Synchronicity", + "synonyms": [ + "Synchronicity" + ] + }, + { + "value": "Bridge Over Troubled Water", + "synonyms": [ + "Bridge Over Troubled Water" + ] + }, + { + "value": "Exile on Main St.", + "synonyms": [ + "Exile on Main St" + ] + }, + { + "value": "John Lennon / Plastic Ono Band", + "synonyms": [ + "John Lennon / Plastic Ono Band" + ] + }, + { + "value": "Music From Big Pink", + "synonyms": [ + "Music From Big Pink" + ] + }, + { + "value": "Rocks", + "synonyms": [ + "Rocks" + ] + }, + { + "value": "Back in Black", + "synonyms": [ + "Back in Black" + ] + }, + { + "value": "Biagio", + "synonyms": [ + "Biagio" + ] + }, + { + "value": "Blood on the Tracks", + "synonyms": [ + "Blood on the Tracks" + ] + }, + { + "value": "Hotel California", + "synonyms": [ + "Hotel California" + ] + }, + { + "value": "Hunky Dory", + "synonyms": [ + "Hunky Dory" + ] + }, + { + "value": "Ten", + "synonyms": [ + "Ten" + ] + }, + { + "value": "The Doors", + "synonyms": [ + "The Doors" + ] + }, + { + "value": "Californication", + "synonyms": [ + "Californication" + ] + }, + { + "value": "OK Computer", + "synonyms": [ + "OK Computer" + ] + }, + { + "value": "What\u0027s Going On", + "synonyms": [ + "Whats Going On, What s Going On" + ] + }, + { + "value": "Green River", + "synonyms": [ + "Green River" + ] + }, + { + "value": "Led Zeppelin", + "synonyms": [ + "Led Zeppelin" + ] + }, + { + "value": "Remain in Light", + "synonyms": [ + "Remain in Light" + ] + }, + { + "value": "Rubber Soul", + "synonyms": [ + "Rubber Soul" + ] + }, + { + "value": "The Dark Side of the Moon", + "synonyms": [ + "The Dark Side of the Moon" + ] + }, + { + "value": "Born in the U.S.A.", + "synonyms": [ + "Born in the USA, Born in the U S A" + ] + }, + { + "value": "Celebration", + "synonyms": [ + "Celebration" + ] + }, + { + "value": "Harvest", + "synonyms": [ + "Harvest" + ] + }, + { + "value": "London Calling", + "synonyms": [ + "London Calling" + ] + }, + { + "value": "Purple Rain", + "synonyms": [ + "Purple Rain" + ] + }, + { + "value": "Sign the Times", + "synonyms": [ + "Sign the Times" + ] + }, + { + "value": "White Album", + "synonyms": [ + "The Beatles White Album, White, White Album" + ] + }, + { + "value": "Graceland", + "synonyms": [ + "Graceland" + ] + }, + { + "value": "Horses", + "synonyms": [ + "Horses" + ] + }, + { + "value": "In Utero", + "synonyms": [ + "In Utero" + ] + }, + { + "value": "Paid In Full", + "synonyms": [ + "Paid In Full" + ] + }, + { + "value": "At Fillmore East", + "synonyms": [ + "At Fillmore East" + ] + }, + { + "value": "Axis Bold as Love", + "synonyms": [ + "Axis Bold as Love" + ] + }, + { + "value": "Déjà vu", + "synonyms": [ + "Déjà vu" + ] + }, + { + "value": "Doolittle", + "synonyms": [ + "Doolittle" + ] + }, + { + "value": "Eat a Peach", + "synonyms": [ + "Eat a Peach" + ] + }, + { + "value": "I Never Loved a Man the Way I Love You", + "synonyms": [ + "I Never Loved a Man the Way I Love You" + ] + }, + { + "value": "Love", + "synonyms": [ + "Love" + ] + }, + { + "value": "Physical Graffiti", + "synonyms": [ + "Physical Graffiti" + ] + }, + { + "value": "Sticky Fingers", + "synonyms": [ + "Sticky Fingers" + ] + }, + { + "value": "Surrealistic Pillow", + "synonyms": [ + "Surrealistic Pillow" + ] + } +] \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-service.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-service.json new file mode 100644 index 00000000..9602232e --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-service.json @@ -0,0 +1,7 @@ +{ + "id": "9fdfa4b7-5aae-4209-8790-8989b4ede389", + "name": "music-service", + "isOverridable": true, + "isEnum": false, + "automatedExpansion": false +} \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-service_entries_en.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-service_entries_en.json new file mode 100644 index 00000000..3e7240c5 --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-service_entries_en.json @@ -0,0 +1,107 @@ +[ + { + "value": "Vimeo", + "synonyms": [ + "vimeo" + ] + }, + { + "value": "iTunes", + "synonyms": [ + "iTunes" + ] + }, + { + "value": "SXM", + "synonyms": [ + "SXM", + " Sirius XM" + ] + }, + { + "value": "Prime Music", + "synonyms": [ + "Prime Music" + ] + }, + { + "value": "Spotify", + "synonyms": [ + "Spotify" + ] + }, + { + "value": "Apple Music", + "synonyms": [ + "Apple Music" + ] + }, + { + "value": "Slacker", + "synonyms": [ + "slaker", + " slacker" + ] + }, + { + "value": "Last fm", + "synonyms": [ + "lastfm", + " last fm", + " Last Fm" + ] + }, + { + "value": "Zvooq", + "synonyms": [ + "Zvooq" + ] + }, + { + "value": "Iheart", + "synonyms": [ + "iheart radio", + " iHeartRadio", + " iheart" + ] + }, + { + "value": "Prime Music", + "synonyms": [ + "Prime", + " Prime Music" + ] + }, + { + "value": "Netflix", + "synonyms": [ + "Netflix" + ] + }, + { + "value": "Deezer", + "synonyms": [ + "Deezer" + ] + }, + { + "value": "Pandora", + "synonyms": [ + "pandora" + ] + }, + { + "value": "Google Music", + "synonyms": [ + "Google Music", + "google musik" + ] + }, + { + "value": "Youtube", + "synonyms": [ + "youtube", + "you tube" + ] + } +] \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-sort.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-sort.json new file mode 100644 index 00000000..65096ded --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-sort.json @@ -0,0 +1,7 @@ +{ + "id": "ba4644ef-abb8-42f6-9302-249fd3e38d03", + "name": "music-sort", + "isOverridable": true, + "isEnum": false, + "automatedExpansion": false +} \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-sort_entries_en.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-sort_entries_en.json new file mode 100644 index 00000000..6a604d15 --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/music-sort_entries_en.json @@ -0,0 +1,28 @@ +[ + { + "value": "top", + "synonyms": [ + "top", + "popular", + "most popular" + ] + }, + { + "value": "latest", + "synonyms": [ + "latest", + "last", + "new", + "newest" + ] + }, + { + "value": "best", + "synonyms": [ + "best", + "good", + "greatest", + "the greatest" + ] + } +] \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/playlist.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/playlist.json new file mode 100644 index 00000000..0c6208a7 --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/playlist.json @@ -0,0 +1,7 @@ +{ + "id": "0ecc10fe-a743-4182-a6c9-0ed8cc2590c3", + "name": "playlist", + "isOverridable": true, + "isEnum": false, + "automatedExpansion": true +} \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/playlist_entries_en.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/playlist_entries_en.json new file mode 100644 index 00000000..77176f8c --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/playlist_entries_en.json @@ -0,0 +1,265 @@ +[ + { + "value": "rock", + "synonyms": [ + "rock" + ] + }, + { + "value": "travel", + "synonyms": [ + "traveling", + "travel", + "travelling" + ] + }, + { + "value": "my faves", + "synonyms": [ + "my faves" + ] + }, + { + "value": "chill", + "synonyms": [ + "chill", + "chilling" + ] + }, + { + "value": "kids", + "synonyms": [ + "kids" + ] + }, + { + "value": "quality", + "synonyms": [ + "quality" + ] + }, + { + "value": "summer", + "synonyms": [ + "summer" + ] + }, + { + "value": "today\u0027s top hits", + "synonyms": [ + "today\u0027s top hits" + ] + }, + { + "value": "breakfast", + "synonyms": [ + "breakfast" + ] + }, + { + "value": "mood", + "synonyms": [ + "mood" + ] + }, + { + "value": "gym", + "synonyms": [ + "gym" + ] + }, + { + "value": "dinner", + "synonyms": [ + "dinner party", + "dinner party", + "dinner" + ] + }, + { + "value": "study", + "synonyms": [ + "study" + ] + }, + { + "value": "relaxing", + "synonyms": [ + "relaxing" + ] + }, + { + "value": "trending", + "synonyms": [ + "trending" + ] + }, + { + "value": "calm", + "synonyms": [ + "calm" + ] + }, + { + "value": "cool", + "synonyms": [ + "cool" + ] + }, + { + "value": "focus", + "synonyms": [ + "focus", + "focusing" + ] + }, + { + "value": "party", + "synonyms": [ + "party" + ] + }, + { + "value": "late night", + "synonyms": [ + "late night" + ] + }, + { + "value": "recently added", + "synonyms": [ + "recently added" + ] + }, + { + "value": "winter", + "synonyms": [ + "winter" + ] + }, + { + "value": "comedy", + "synonyms": [ + "comedy" + ] + }, + { + "value": "meditative", + "synonyms": [ + "meditative" + ] + }, + { + "value": "roxette", + "synonyms": [ + "roxette" + ] + }, + { + "value": "sleep", + "synonyms": [ + "sleep" + ] + }, + { + "value": "workout", + "synonyms": [ + "workout", + "working out", + "workingout", + "work out" + ] + }, + { + "value": "favourite", + "synonyms": [ + "favourite" + ] + }, + { + "value": "favorite", + "synonyms": [ + "favorite", + "favorites", + "faves", + "fave", + "fav" + ] + }, + { + "value": "jazz", + "synonyms": [ + "jazz" + ] + }, + { + "value": "running", + "synonyms": [ + "running", + "run" + ] + }, + { + "value": "viral hits", + "synonyms": [ + "viral hits" + ] + }, + { + "value": "energy", + "synonyms": [ + "energetic", + "energy" + ] + }, + { + "value": "fitness", + "synonyms": [ + "fitness", + "for fitness" + ] + }, + { + "value": "love", + "synonyms": [ + "love" + ] + }, + { + "value": "work", + "synonyms": [ + "work" + ] + }, + { + "value": "romance", + "synonyms": [ + "romance", + "romancing", + "romantic", + "for date", + "for a date", + "for romantic date", + "for a romantic date" + ] + }, + { + "value": "uplifting", + "synonyms": [ + "uplifting", + "100 most uplifting songs ever" + ] + }, + { + "value": "50 great beatles songs", + "synonyms": [ + "50 great beatles songs" + ] + }, + { + "value": "lunch", + "synonyms": [ + "lunch" + ] + } +] \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/song.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/song.json new file mode 100644 index 00000000..c5e66c6d --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/song.json @@ -0,0 +1,7 @@ +{ + "id": "01c1df34-ecad-4ab0-bc4a-62e1d43a27d8", + "name": "song", + "isOverridable": true, + "isEnum": false, + "automatedExpansion": true +} \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/song_entries_en.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/song_entries_en.json new file mode 100644 index 00000000..14dcc09b --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/entities/song_entries_en.json @@ -0,0 +1,608 @@ +[ + { + "value": "Castle On The Hill", + "synonyms": [ + "Castle On The Hill" + ] + }, + { + "value": "Sound Of Silence", + "synonyms": [ + "Sound Of Silence" + ] + }, + { + "value": "Photograph", + "synonyms": [ + "Photograph" + ] + }, + { + "value": "Creep", + "synonyms": [ + "Creep" + ] + }, + { + "value": "Hurt", + "synonyms": [ + "Hurt" + ] + }, + { + "value": "Love Yourself", + "synonyms": [ + "Love Yourself" + ] + }, + { + "value": "Wish You Were Here", + "synonyms": [ + "Wish You Were Here" + ] + }, + { + "value": "Million Reasons", + "synonyms": [ + "Million Reasons" + ] + }, + { + "value": "When We Were Young", + "synonyms": [ + "When We Were Young" + ] + }, + { + "value": "Versace On The Floor", + "synonyms": [ + "Versace On The Floor" + ] + }, + { + "value": "Shape Of You", + "synonyms": [ + "Shape Of You" + ] + }, + { + "value": "Nothing Else Matters", + "synonyms": [ + "Nothing Else Matters" + ] + }, + { + "value": "Let Her Go", + "synonyms": [ + "Let Her Go" + ] + }, + { + "value": "Riptide", + "synonyms": [ + "Riptide" + ] + }, + { + "value": "Say You Wont Let Go", + "synonyms": [ + "Say You Wont Let Go" + ] + }, + { + "value": "Cant Help Falling In Love With You", + "synonyms": [ + "Cant Help Falling In Love With You" + ] + }, + { + "value": "Im Yours", + "synonyms": [ + "Im Yours" + ] + }, + { + "value": "The Scientist Acoustic", + "synonyms": [ + "The Scientist Acoustic" + ] + }, + { + "value": "Shape Of You", + "synonyms": [ + "Shape Of You" + ] + }, + { + "value": "A Thousand Years", + "synonyms": [ + "A Thousand Years" + ] + }, + { + "value": "La La Land - Audition The Fools Who Dream", + "synonyms": [ + "La La Land - Audition The Fools Who Dream" + ] + }, + { + "value": "Hey There Delilah", + "synonyms": [ + "Hey There Delilah" + ] + }, + { + "value": "City Of Stars Acoustic", + "synonyms": [ + "City Of Stars Acoustic" + ] + }, + { + "value": "Closer", + "synonyms": [ + "Closer" + ] + }, + { + "value": "Treat You Better", + "synonyms": [ + "Treat You Better" + ] + }, + { + "value": "Let It Be", + "synonyms": [ + "Let It Be" + ] + }, + { + "value": "Rockabye", + "synonyms": [ + "Rockabye" + ] + }, + { + "value": "Shape Of You", + "synonyms": [ + "Shape Of You" + ] + }, + { + "value": "City Of Stars", + "synonyms": [ + "City Of Stars" + ] + }, + { + "value": "All Of Me", + "synonyms": [ + "All Of Me" + ] + }, + { + "value": "How Far Ill Go", + "synonyms": [ + "How Far Ill Go" + ] + }, + { + "value": "All I Ask", + "synonyms": [ + "All I Ask" + ] + }, + { + "value": "More Than Words", + "synonyms": [ + "More Than Words" + ] + }, + { + "value": "Surat Cinta Untuk Starla", + "synonyms": [ + "Surat Cinta Untuk Starla" + ] + }, + { + "value": "City Of Stars", + "synonyms": [ + "City Of Stars" + ] + }, + { + "value": "Something Just Like This", + "synonyms": [ + "Something Just Like This" + ] + }, + { + "value": "Mercy", + "synonyms": [ + "Mercy" + ] + }, + { + "value": "Versace On The Floor", + "synonyms": [ + "Versace On The Floor" + ] + }, + { + "value": "Someone Like You", + "synonyms": [ + "Someone Like You" + ] + }, + { + "value": "Human", + "synonyms": [ + "Human" + ] + }, + { + "value": "Thinking Out Loud", + "synonyms": [ + "Thinking Out Loud" + ] + }, + { + "value": "When I Was Your Man", + "synonyms": [ + "When I Was Your Man" + ] + }, + { + "value": "Versace On The Floor", + "synonyms": [ + "Versace On The Floor" + ] + }, + { + "value": "House Of The Rising Sun", + "synonyms": [ + "House Of The Rising Sun" + ] + }, + { + "value": "Stairway To Heaven", + "synonyms": [ + "Stairway To Heaven" + ] + }, + { + "value": "Wonderwall", + "synonyms": [ + "Wonderwall" + ] + }, + { + "value": "How Would You Feel", + "synonyms": [ + "How Would You Feel" + ] + }, + { + "value": "I Dont Wanna Live Forever", + "synonyms": [ + "I Dont Wanna Live Forever" + ] + }, + { + "value": "Stay With Me", + "synonyms": [ + "Stay With Me" + ] + }, + { + "value": "This Town", + "synonyms": [ + "This Town" + ] + }, + { + "value": "Hallelujah", + "synonyms": [ + "Hallelujah" + ] + }, + { + "value": "7 Years", + "synonyms": [ + "7 Years" + ] + }, + { + "value": "City Of Stars", + "synonyms": [ + "City Of Stars" + ] + }, + { + "value": "Hotel California", + "synonyms": [ + "Hotel California" + ] + }, + { + "value": "I See Fire", + "synonyms": [ + "I See Fire" + ] + }, + { + "value": "Dancing On My Own", + "synonyms": [ + "Dancing On My Own" + ] + }, + { + "value": "Fix You Acoustic", + "synonyms": [ + "Fix You Acoustic" + ] + }, + { + "value": "The A Team", + "synonyms": [ + "The A Team" + ] + }, + { + "value": "Wonderwall", + "synonyms": [ + "Wonderwall" + ] + }, + { + "value": "Skinny Love", + "synonyms": [ + "Skinny Love" + ] + }, + { + "value": "Yellow Acoustic", + "synonyms": [ + "Yellow Acoustic" + ] + }, + { + "value": "Hallelujah", + "synonyms": [ + "Hallelujah" + ] + }, + { + "value": "Let It Go", + "synonyms": [ + "Let It Go" + ] + }, + { + "value": "All I Want", + "synonyms": [ + "All I Want" + ] + }, + { + "value": "Say Something", + "synonyms": [ + "Say Something" + ] + }, + { + "value": "Radioactive", + "synonyms": [ + "Radioactive" + ] + }, + { + "value": "Shape Of You", + "synonyms": [ + "Shape Of You" + ] + }, + { + "value": "Redemption Song", + "synonyms": [ + "Redemption Song" + ] + }, + { + "value": "Sweet Child O Mine", + "synonyms": [ + "Sweet Child O Mine" + ] + }, + { + "value": "Chasing Cars", + "synonyms": [ + "Chasing Cars" + ] + }, + { + "value": "Boulevard Of Broken Dreams Acoustic", + "synonyms": [ + "Boulevard Of Broken Dreams Acoustic" + ] + }, + { + "value": "Hey Jude", + "synonyms": [ + "Hey Jude" + ] + }, + { + "value": "Closer", + "synonyms": [ + "Closer" + ] + }, + { + "value": "Youve Got A Friend In Me", + "synonyms": [ + "Youve Got A Friend In Me" + ] + }, + { + "value": "Halo", + "synonyms": [ + "Halo" + ] + }, + { + "value": "Heathens", + "synonyms": [ + "Heathens" + ] + }, + { + "value": "Counting Stars", + "synonyms": [ + "Counting Stars" + ] + }, + { + "value": "Wish You Were Here", + "synonyms": [ + "Wish You Were Here" + ] + }, + { + "value": "Im Not The Only One", + "synonyms": [ + "Im Not The Only One" + ] + }, + { + "value": "I Wont Give Up", + "synonyms": [ + "I Wont Give Up" + ] + }, + { + "value": "Stitches", + "synonyms": [ + "Stitches" + ] + }, + { + "value": "Sweater Weather", + "synonyms": [ + "Sweater Weather" + ] + }, + { + "value": "Good Riddance Time Of Your Life", + "synonyms": [ + "Good Riddance Time Of Your Life" + ] + }, + { + "value": "Love On The Brain", + "synonyms": [ + "Love On The Brain" + ] + }, + { + "value": "Blackbird", + "synonyms": [ + "Blackbird" + ] + }, + { + "value": "We Dont Talk Anymore", + "synonyms": [ + "We Dont Talk Anymore" + ] + }, + { + "value": "Hey Soul Sister", + "synonyms": [ + "Hey Soul Sister" + ] + }, + { + "value": "Faded", + "synonyms": [ + "Faded" + ] + }, + { + "value": "Under The Bridge", + "synonyms": [ + "Under The Bridge" + ] + }, + { + "value": "Imagine", + "synonyms": [ + "Imagine" + ] + }, + { + "value": "Dont Look Back In Anger", + "synonyms": [ + "Dont Look Back In Anger" + ] + }, + { + "value": "Iris", + "synonyms": [ + "Iris" + ] + }, + { + "value": "Love", + "synonyms": [ + "Love" + ] + }, + { + "value": "One Call Away", + "synonyms": [ + "One Call Away" + ] + }, + { + "value": "Hello", + "synonyms": [ + "Hello" + ] + }, + { + "value": "Somewhere Over The Rainbow", + "synonyms": [ + "Somewhere Over The Rainbow" + ] + }, + { + "value": "Starving", + "synonyms": [ + "Starving" + ] + }, + { + "value": "Jolene", + "synonyms": [ + "Jolene" + ] + }, + { + "value": "Castle On The Hill", + "synonyms": [ + "Castle On The Hill" + ] + }, + { + "value": "Lost Boy Acoustic", + "synonyms": [ + "Lost Boy Acoustic" + ] + }, + { + "value": "Make You Feel My Love", + "synonyms": [ + "Make You Feel My Love" + ] + } +] \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music.play.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music.play.json new file mode 100644 index 00000000..401de69a --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music.play.json @@ -0,0 +1,97 @@ +{ + "id": "ad118f22-6185-4566-8b22-7a6067fb42e2", + "name": "music.play", + "auto": true, + "contexts": [], + "responses": [ + { + "resetContexts": false, + "action": "music.play", + "affectedContexts": [ + { + "name": "play-music", + "parameters": {}, + "lifespan": 5 + }, + { + "name": "music-player-control", + "parameters": {}, + "lifespan": 3 + } + ], + "parameters": [ + { + "id": "4e5778f6-53b2-4b74-b369-0c3fd482bd75", + "required": false, + "dataType": "@song", + "name": "song", + "value": "$song", + "isList": false + }, + { + "id": "c6de8e2e-b285-40bd-9dcb-ba3d03956f80", + "required": false, + "dataType": "@sys.music-artist", + "name": "artist", + "value": "$artist", + "isList": true + }, + { + "id": "a6a18c6f-ad5a-45d2-9570-666d96de9e51", + "required": false, + "dataType": "@music-album", + "name": "album", + "value": "$album", + "isList": false + }, + { + "id": "baf8e37e-ec14-4cd0-a34a-2d2d1c9dbd48", + "required": false, + "dataType": "@sys.music-genre", + "name": "genre", + "value": "$genre", + "isList": false + }, + { + "id": "e4a8c145-ec0b-414a-afb2-90278fbea7fe", + "required": false, + "dataType": "@playlist", + "name": "playlist", + "value": "$playlist", + "isList": false + }, + { + "id": "5bf2245f-2281-44e0-85b3-b2e024731155", + "required": false, + "dataType": "@music-service", + "name": "service", + "value": "$service", + "isList": false + }, + { + "id": "c5480361-27a4-4f2b-be86-e4c6bda25306", + "required": false, + "dataType": "@music-sort", + "name": "sort", + "value": "$sort", + "isList": false + } + ], + "messages": [ + { + "type": 0, + "lang": "en", + "speech": [] + } + ], + "defaultResponsePlatforms": {}, + "speech": [] + } + ], + "priority": 500000, + "webhookUsed": false, + "webhookForSlotFilling": false, + "lastUpdate": 1497017425, + "fallbackIntent": false, + "events": [] +} \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music.play_usersays_en.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music.play_usersays_en.json new file mode 100644 index 00000000..a73a687e --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music.play_usersays_en.json @@ -0,0 +1,6121 @@ +[ + { + "id": "4140af75-12d8-4f32-80f0-e864ff58447f", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Madonna", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": "\u0027s ", + "userDefined": false + }, + { + "text": "Like a Virgin", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 36, + "updated": 0 + }, + { + "id": "c232eb6e-963a-4482-b9ed-f0343b331cfc", + "data": [ + { + "text": "can", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "you", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " play ", + "userDefined": false + }, + { + "text": "country", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + }, + { + "text": " music", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "9f1bc06d-87b0-43d0-a24a-4f3c9bfb9b09", + "data": [ + { + "text": "play some ", + "userDefined": false + }, + { + "text": "romantic", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + }, + { + "text": " songs", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d35ef9fd-4b6e-4b0e-b29a-bc398f21a06c", + "data": [ + { + "text": "playing ", + "userDefined": false + }, + { + "text": "Mozart", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "3c34962c-5094-4cdb-a0ae-aa2598941632", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Red Hot Chili Peppers", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "12bae030-caee-4793-9dde-116190c5ea29", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Led Zeppelin two", + "alias": "album", + "meta": "@music-album", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "df476926-5b0b-4d0a-9189-1df7ddccb10d", + "data": [ + { + "text": "I want to listen to the song ", + "userDefined": false + }, + { + "text": "New York", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "1eaa1073-9a2b-4379-9a20-bf8238896a6f", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Hard Times", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "David Newman", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "c2d8041c-bbd0-4e37-8bfd-ae981e08026f", + "data": [ + { + "text": "let\u0027s listen to ", + "userDefined": false + }, + { + "text": "Come together", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Beatles", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "2bbf6334-1242-44c8-b380-a2eb6406546e", + "data": [ + { + "text": "play the song ", + "userDefined": false + }, + { + "text": "Love Me Like You Do", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "962b0574-5e8d-42e9-9b0d-2c742b1651e9", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Beyonce", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "6458ef3d-c044-4162-87f3-194a93615cd0", + "data": [ + { + "text": "play the song ", + "userDefined": false + }, + { + "text": "Gorilla", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "9d129655-8307-434f-9c9a-1110d1547a2b", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "Master of Puppets", + "alias": "album", + "meta": "@music-album", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "5140ab21-9f48-402c-8b95-11495aa6be3d", + "data": [ + { + "text": "play me some ", + "userDefined": false + }, + { + "text": "good", + "alias": "sort", + "meta": "@music-sort", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "bcf21f73-d1d5-4be1-ac55-fe4e9e0ce53f", + "data": [ + { + "text": "can I listen to ", + "userDefined": false + }, + { + "text": "Macarena", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "aeabcd3a-ee8b-4181-9a10-b33d830d2c28", + "data": [ + { + "text": "Can\u0027t Feel My Face", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "on", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "Google Music", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "f4f40ba6-40f7-4c8f-b963-90f7cff853c6", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Maroon 5", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "b5ded7a1-0b2c-4bf0-84cd-d4b2657da797", + "data": [ + { + "text": "play me some ", + "userDefined": false + }, + { + "text": "country", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "4053950b-b9a6-4a9f-ac30-100067ea5c57", + "data": [ + { + "text": "play some ", + "userDefined": false + }, + { + "text": "rock and roll", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a4878e41-bbdb-49c8-9137-26aef6fce868", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Foolin", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Changing Faces", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "b14e5674-de6f-4a41-b12f-7a885908ea8d", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "Appetite for destruction", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Guns n Roses", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "088ba699-d35c-4a00-b696-a065253ce0e0", + "data": [ + { + "text": "play a song ", + "userDefined": false + }, + { + "text": "Another Brick in the Wall", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "739e3f75-8a7f-467c-b05e-357bec187f91", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "She\u0027s Got the Look", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Roxette", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "32761126-bcd3-47dd-9b06-6206013dcb95", + "data": [ + { + "text": "start playing ", + "userDefined": false + }, + { + "text": "The Lost", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a17e0479-a85c-4194-ac6d-d34a14c31025", + "data": [ + { + "text": "play me some ", + "userDefined": false + }, + { + "text": "relaxing", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "3f6fa54f-dbf3-4ca7-990e-9caf154d9a01", + "data": [ + { + "text": "play song by ", + "userDefined": false + }, + { + "text": "Willie Nelson", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "021d9348-d13b-4980-af3f-304dfb926b01", + "data": [ + { + "text": "just play ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " for me", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a3b1d4ed-9645-4dae-a439-c6a0ef995ad4", + "data": [ + { + "text": "can you ", + "userDefined": false + }, + { + "text": "open", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "Careless Whisper", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "68f49695-9e23-4ea0-ab03-029bf1cff728", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "After the Gold Rush", + "alias": "album", + "meta": "@music-album", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "32cbd88f-d48e-4238-bf2a-89d8f185b5a6", + "data": [ + { + "text": "I want ", + "userDefined": false + }, + { + "text": "to", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " listen to a song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "e1c422b1-3a4b-4578-b7cb-608ee937221d", + "data": [ + { + "text": "play genre ", + "userDefined": false + }, + { + "text": "RnB", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "1c9dad16-0e2b-4bf4-8a39-ae51f8fd122d", + "data": [ + { + "text": "I want ", + "userDefined": false + }, + { + "text": "to", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " hear ", + "userDefined": false + }, + { + "text": "a", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "4eca3c0b-f8d0-4767-99d9-2a7b8231f758", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "jazz", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + }, + { + "text": " on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "ce401513-df30-4cd3-b694-e36cf03e3b0a", + "data": [ + { + "text": "play artist ", + "userDefined": false + }, + { + "text": "A great big world", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 37, + "updated": 0 + }, + { + "id": "e45a1b64-ac6b-40a6-967b-84fff5d89b2b", + "data": [ + { + "text": "rock", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + }, + { + "text": " compositions", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "ee3dfda5-6725-4c8d-ad65-d17a5c2378a2", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Vanessa Paradis", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "fd37b105-d39c-43bd-99e4-128935a42eed", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Sweet Dreams", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Eurythmics", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": false + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "62e31c4d-c930-4cc7-9aa3-0997a403de1d", + "data": [ + { + "text": "play a ", + "userDefined": false + }, + { + "text": "pop", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "211843de-f8c3-4b24-b3d6-c0d8e92592a4", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Megan Trainer", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "5815f8cc-81a1-41ef-996d-214f1ca56186", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Faded", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "ZHU", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " song on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "1ecd472e-b59e-4f4c-8077-a5a77df39280", + "data": [ + { + "text": "let me hear some ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Coldplay", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "7333da40-706d-4396-a76f-3630406fef97", + "data": [ + { + "text": "play song ", + "userDefined": false + }, + { + "text": "Killer Queen", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Queen", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "e288571f-f3f6-47cc-a8c8-960e29ed187f", + "data": [ + { + "text": "play the artist ", + "userDefined": false + }, + { + "text": "Rush", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "9e6371e2-1ba7-414b-9d03-c221a762f8e1", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "the", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " song ", + "userDefined": false + }, + { + "text": "Pots of gold", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "the", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " artist ", + "userDefined": false + }, + { + "text": "Mamas Gun", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a2df31d7-8338-46e0-8148-914c060e3789", + "data": [ + { + "text": "can you ", + "userDefined": false + }, + { + "text": "open", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "Shape of My Heart", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " in ", + "userDefined": false + }, + { + "text": "Google music", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "2930d107-d840-4791-a522-4246912e98b7", + "data": [ + { + "text": "play song from the album ", + "userDefined": false + }, + { + "text": "Address", + "alias": "album", + "meta": "@music-album", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "572599a1-7b95-44fa-bf68-abd7a42961d0", + "data": [ + { + "text": "play song ", + "userDefined": false + }, + { + "text": "Alive", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "ddbbda1f-37ad-47bd-aad9-107d13635d5e", + "data": [ + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "R\u0026B", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "0c813c89-38b3-43f6-ab66-fe31496aec88", + "data": [ + { + "text": "song ", + "userDefined": false + }, + { + "text": "pop", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "01c319ca-bf22-4642-b148-aebdde53759b", + "data": [ + { + "text": "play some ", + "userDefined": false + }, + { + "text": "rock", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "763ca6f4-8a07-44b8-9846-a2a306d6e9e4", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "Ramones", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "0baf8554-9a81-4771-a3dd-cde31073c10f", + "data": [ + { + "text": "Eminem", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "4f41227b-b191-44af-a542-e72a6247ac29", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Pearl Jam", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "1ce85c25-8301-458d-b3a9-31e4b64ba123", + "data": [ + { + "text": "please play song ", + "userDefined": false + }, + { + "text": "Lost in You", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "5ee387f0-cdb6-4e55-b818-c6ab67699ec0", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "Power Corruption Lies", + "alias": "album", + "meta": "@music-album", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "21e0682f-f75f-45aa-873b-533b7021d935", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "End of the World", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "The living end", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "730d0b32-6b85-403e-883d-77d706e1e990", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Empty Sky", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Elton John", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "7c0708bd-a6ee-4d0d-b682-48ffaeeb98c6", + "data": [ + { + "text": "play my ", + "userDefined": false + }, + { + "text": "workout", + "alias": "playlist", + "meta": "@playlist", + "userDefined": true + }, + { + "text": " playlist", + "userDefined": false + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "8b12892d-9897-4974-977a-fcadd9dee7e6", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Guns N Roses", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "aa1768ad-7682-48cf-82b1-638d3ffa4935", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Laura Pausini", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "7e07261b-1fd5-45e9-b3a8-7194510cea73", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "greatest", + "alias": "sort", + "meta": "@music-sort", + "userDefined": true + }, + { + "text": " hits by ", + "userDefined": false + }, + { + "text": "Metallica", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "601b73f6-ffe9-4095-a207-a642cac506f2", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Hello", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 2, + "updated": 0 + }, + { + "id": "411a6482-db67-41b7-811a-f4c9a8f20cea", + "data": [ + { + "text": "play song ", + "userDefined": false + }, + { + "text": "Roxanne", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "fdba87b0-6b00-484b-9e59-457bc8fdd564", + "data": [ + { + "text": "play the ", + "userDefined": false + }, + { + "text": "50 Great Beatles Songs", + "alias": "playlist", + "meta": "@playlist", + "userDefined": true + }, + { + "text": " playlist in ", + "userDefined": false + }, + { + "text": "Prime Music", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "6247a818-cee3-4d49-ad2b-91f978387b8c", + "data": [ + { + "text": "start up the track ", + "userDefined": false + }, + { + "text": "Come Together", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "f14d89de-a723-4445-b524-12bb3317c185", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "Born to Run", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Bruce Springsteen", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "1f72e842-a388-49b2-b898-25e8ca55ea35", + "data": [ + { + "text": "country", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "5e935d5e-26d8-4a4f-9a25-afd636972459", + "data": [ + { + "text": "let me hear something from ", + "userDefined": false + }, + { + "text": "George Strait", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "aaf53aa3-3d48-4a9d-b45f-1cd7887ad4ab", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "Fly by Night", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Rush", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "5d952c84-c246-403e-9589-aebffb0d8ad9", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "Graceland", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Paul Simon", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "c50656a3-b142-4ef4-b21b-19a1764c488c", + "data": [ + { + "text": "play an album by ", + "userDefined": false + }, + { + "text": "Madonna", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "57f2758a-94b0-4766-b8ec-5cccb46196e8", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "It’s Now or Never", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "160aa92b-707c-4a13-9db2-f8f70bee3f2b", + "data": [ + { + "text": "Play ", + "userDefined": false + }, + { + "text": "Five Seconds of Summer", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "86af6b61-0464-4280-b3cf-ff5f10cf660b", + "data": [ + { + "text": "play some ", + "userDefined": false + }, + { + "text": "relaxing", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "8c70d5d1-ddfe-409b-bf42-e1c2986b34a2", + "data": [ + { + "text": "let\u0027s hear ", + "userDefined": false + }, + { + "text": "Wilco", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d5bb88c7-503c-4d39-bbb3-ce4695238778", + "data": [ + { + "text": "I\u0027d like to listen to some ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "470eb328-d528-4f81-898d-769576d94472", + "data": [ + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " play ", + "userDefined": false + }, + { + "text": "Addicted to Love", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "e1473efe-4531-4381-b7bf-8052f3968cc3", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Home To Mama", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Justin Bieber", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " song on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "56543c3c-873c-4cf7-b7f2-c666c70b8f46", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "best", + "alias": "sort", + "meta": "@music-sort", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "Metallica", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " songs", + "userDefined": false + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "d948f02d-920e-42f8-a4a7-db301b32eb13", + "data": [ + { + "text": "play me some ", + "userDefined": false + }, + { + "text": "jazz", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "29618b5b-4fae-4437-9d33-a9ac5ac70bcc", + "data": [ + { + "text": "play some ", + "userDefined": false + }, + { + "text": "good", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "8746f5f4-6a28-4492-b744-e2e74d04b17a", + "data": [ + { + "text": "show ", + "userDefined": false + }, + { + "text": "best", + "alias": "sort", + "meta": "@music-sort", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "songs", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Rihanna", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "7d7b3a3d-7640-42fa-85cc-057aedf1e105", + "data": [ + { + "text": "turn ", + "userDefined": false + }, + { + "text": "on", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " a song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "4432a8e0-0ec6-4c6a-9942-9a21afd3308a", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "Madonna", + "alias": "album", + "meta": "@music-album", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "eead6f02-d9e9-4185-9790-5354f86e113f", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "Thriller", + "alias": "album", + "meta": "@music-album", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "806a8e42-2fe6-4af5-8fd6-3501f7835bf0", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "London calling", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "The Clash", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "6b329618-5b05-452c-9f27-85014ecfa49d", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Do I Wanna Know", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Arctic Monkeys", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " song on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d7240388-5999-4e9e-b209-a0c130c8fb2a", + "data": [ + { + "text": "I want to hear ", + "userDefined": false + }, + { + "text": "Owner of a Lonely Heart", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "f0f7001d-6da5-41ff-a1fc-acc96bd477ca", + "data": [ + { + "text": "play song by ", + "userDefined": false + }, + { + "text": "Lil Wayne", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "16928918-ef7e-4450-b307-b4b5eecf7268", + "data": [ + { + "text": "play song by ", + "userDefined": false + }, + { + "text": "Nicki Minaj", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "dbc75797-de41-49f9-ab3a-783b4a05de11", + "data": [ + { + "text": "play song ", + "userDefined": false + }, + { + "text": "She\u0027s Got the Look", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "5a094ad4-c7e2-43a6-b666-c223b3e005d9", + "data": [ + { + "text": "play the song ", + "userDefined": false + }, + { + "text": "Chasing the Dragon", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "081e8961-e441-49ef-8182-8c31af8036bf", + "data": [ + { + "text": "play song ", + "userDefined": false + }, + { + "text": "The Nights", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "1c095906-23c9-4f12-800c-9939ecd06090", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Ignition", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "R Kelly", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 11, + "updated": 0 + }, + { + "id": "7792e55d-0766-4504-9f0a-85436d6ab448", + "data": [ + { + "text": "play a song ", + "userDefined": false + }, + { + "text": "on", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "156bed9a-4461-4329-b540-392b34baf151", + "data": [ + { + "text": "I want you to play ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "8fdb8dce-0cab-4bea-97e6-ac27498228bf", + "data": [ + { + "text": "play song ", + "userDefined": false + }, + { + "text": "Poker Face", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Lady Gaga", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d093ebaf-e4ae-4494-a110-9109cbbb1815", + "data": [ + { + "text": "can I listen to ", + "userDefined": false + }, + { + "text": "Gangsta\u0027s Paradise", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "6584fcba-250d-4cf3-98e8-a3b0d57bc368", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Animals", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Maroon 5", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "8ce7f1ca-9942-4074-b4ca-8be026f6c1a3", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "What Does the Fox Say", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "f4f60a85-1de1-4efb-b920-44289ad322fe", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "Nevermind", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Nirvana", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "93b181fc-7356-4531-94cd-26ab93b3f4b9", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Apparently", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "J Cole", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "5eb85606-88df-44ba-85f9-f0c6e0d8881d", + "data": [ + { + "text": "Bob Marley", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " play the song please", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a78bf904-8cca-4962-8530-e7698fc54152", + "data": [ + { + "text": "Bart Baker", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "1be9fdac-b9a5-46bb-9db3-0774741448d9", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Rihanna", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "Unfaithful", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " song for me", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "ee65a516-c38c-4932-8de2-4a0a4b9af9f9", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "In the jungle groove", + "alias": "album", + "meta": "@music-album", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a50d9a57-b22e-43c7-929e-c10d6506e97e", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "Sounds Good Field", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Five Seconds of Summer", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "12c35c5c-775e-4ca1-a986-ff77a1c1a2b2", + "data": [ + { + "text": "reproduce a the track ", + "userDefined": false + }, + { + "text": "Monster", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Rihanna", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " ft ", + "userDefined": false + }, + { + "text": "Eminem", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "a7463bcd-e379-4883-9399-ec2bc26155d8", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Yesterday", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Beatles", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "ccbe210e-3d0a-47b6-9eec-f9811c37fae2", + "data": [ + { + "text": "play the song ", + "userDefined": false + }, + { + "text": "Back in time", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Pitbull", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "af1f7029-c9d0-4356-82bf-f7cb35f1741a", + "data": [ + { + "text": "play song by ", + "userDefined": false + }, + { + "text": "Shaggy", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "e5e81c1b-da7b-451f-a549-d5355f8d906d", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "I See Fire", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Ed Sheeran", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " song on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "fcaa4dbe-d5ad-431b-ba69-067aaa946487", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Budapest", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "94e14c50-b195-4b7b-ace4-5d88fc112b4e", + "data": [ + { + "text": "play the song ", + "userDefined": false + }, + { + "text": "Nothing Gonna Stop Us Now", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d425f27c-2b23-429c-a8f3-55e581c3a84a", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Blackbird", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "from SD card", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "9ec7086f-0cf0-427b-9356-f458fecdbc65", + "data": [ + { + "text": "play the album ", + "userDefined": false + }, + { + "text": "The Wall", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "0a831a75-4120-4535-96a2-aa40bb08edb3", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Ca Marche", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Maitre Gims", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a62fdd37-45ff-447c-97d3-223fb3eef801", + "data": [ + { + "text": "I want to listen to ", + "userDefined": false + }, + { + "text": "Crazy", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " performed by ", + "userDefined": false + }, + { + "text": "Aerosmith", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "8412430c-9182-4412-a8f7-2a60b7d064ec", + "data": [ + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "songs", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "from", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " playlist ", + "userDefined": false + }, + { + "text": "Hot Hits UK", + "alias": "playlist", + "meta": "@playlist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d4b457c5-bfbf-44e1-8fb0-afb46d2448fc", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "One Direction", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d4879ec4-d109-4703-b6a0-b7e537b68cf6", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "on", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "75f031ea-f0c3-4d2d-a7c9-b6473c2d9cc5", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Dangerous", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " feat ", + "userDefined": false + }, + { + "text": "Sam Martin", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "David Guetta", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " song on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "400a712b-c701-4eac-97ff-8932f1b65109", + "data": [ + { + "text": "play something by ", + "userDefined": false + }, + { + "text": "Rihanna", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "affb702a-6145-484e-8a19-9f8f5ee81319", + "data": [ + { + "text": "the song ", + "userDefined": false + }, + { + "text": "Grew", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Bruno Mars", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "172ddfdb-9d9e-430b-929e-9b78a7beddf3", + "data": [ + { + "text": "let\u0027s hear ", + "userDefined": false + }, + { + "text": "The Beatles", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "cb952e74-7f67-43b9-8262-1b8a2e2b8625", + "data": [ + { + "text": "can you start playing music", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "ddd7408f-8bbc-46fd-86aa-6322b6c3aa8f", + "data": [ + { + "text": "I want to listen to ", + "userDefined": false + }, + { + "text": "Ariana Grande", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "6f1e750b-e40e-4adc-8f2c-fa2568257178", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Justin Bieber", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "df5e75a6-e592-40a8-b515-b1785a7b3f1f", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Abbey Road", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " remastered by ", + "userDefined": false + }, + { + "text": "The Beatles", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d1c947cd-cc54-4e68-80c2-8ba9b61e4024", + "data": [ + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "r\u0026b", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "642f3a40-1168-45e9-af74-2d439ba63bef", + "data": [ + { + "text": "play a ", + "userDefined": false + }, + { + "text": "romantic", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "8e175fb1-5908-49b4-bf23-85dc77ed8ffc", + "data": [ + { + "text": "play song ", + "userDefined": false + }, + { + "text": "Thriller", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "df767c28-f11c-4e7c-9875-1ea8d4871fac", + "data": [ + { + "text": "I\u0027d like to listen to ", + "userDefined": false + }, + { + "text": "classic opera", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "63c74e0b-8766-4df6-ba94-717ad2f4aff8", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Bad", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " from ", + "userDefined": false + }, + { + "text": "Michael Jackson", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "269c71e0-e42e-4c41-8495-e35449bfd90a", + "data": [ + { + "text": "play song by ", + "userDefined": false + }, + { + "text": "Eminem", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " and ", + "userDefined": false + }, + { + "text": "Rihanna", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "f556da1d-10e3-4c50-a454-da9b654bc8f3", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "françoise hardy", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "283d983d-98e1-4df4-81b4-0207567d3974", + "data": [ + { + "text": "switch to ", + "userDefined": false + }, + { + "text": "workout", + "alias": "playlist", + "meta": "@playlist", + "userDefined": true + }, + { + "text": " music", + "userDefined": false + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "33a0ab8d-341a-4a6d-833d-b90995d4764f", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "Songs for the Deaf", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Queens of the stone age", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "98f98243-0f50-43af-99e4-e6a701bdb923", + "data": [ + { + "text": "Hollaback Girl", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " music", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "768a22cf-6066-44e4-848a-bb3655bf784f", + "data": [ + { + "text": "play something by ", + "userDefined": false + }, + { + "text": "The Rolling Stones", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "6265a232-c622-40c3-87db-5ad3db85df28", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "jazz", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "8d9963f5-cf9c-428a-98f3-77e472fd5b04", + "data": [ + { + "text": "play the ", + "userDefined": false + }, + { + "text": "Mean Kitty", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "757b7e86-b9de-4f24-b472-b929f3c6ca6e", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Amy Winehouse", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "2f7bd4b4-2305-49ad-a8bf-a9692ffa27c2", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Drake", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "9cea1a96-526c-43ab-9d6a-4894cbfc5b39", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Meghan Trainor", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "1c32a3a4-bd47-4c7c-9367-abfb7f4c27b3", + "data": [ + { + "text": "I\u0027d like to listen to ", + "userDefined": false + }, + { + "text": "jazz", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "7467827c-3b39-4919-8fd1-671da5153eb7", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Gospel", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + }, + { + "text": " songs on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "650927fc-7680-4602-9d67-10ef052ad78b", + "data": [ + { + "text": "I want to listen to ", + "userDefined": false + }, + { + "text": "Temperature", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Sean Paul", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "6792c706-ff8d-4a61-8e5e-d3638bafb3e7", + "data": [ + { + "text": "play songs by ", + "userDefined": false + }, + { + "text": "Ellie Goulding", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "7b7ee199-6a86-4d40-92eb-28c485fc8237", + "data": [ + { + "text": "play the song ", + "userDefined": false + }, + { + "text": "Encantadora", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "48f9a456-4c97-4853-b0d8-6e5ccc9e0c4d", + "data": [ + { + "text": "put on my ", + "userDefined": false + }, + { + "text": "late night", + "alias": "playlist", + "meta": "@playlist", + "userDefined": true + }, + { + "text": " playlist", + "userDefined": false + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "d964c519-c04a-43e6-9a5b-65cbf3675224", + "data": [ + { + "text": "I want to listen to ", + "userDefined": false + }, + { + "text": "Bleeding Love", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d397d0a4-0e29-4a5d-bd70-1a48afc28168", + "data": [ + { + "text": "can", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " you play ", + "userDefined": false + }, + { + "text": "Adele", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "226efae3-8551-4a13-b9ca-854ee9407f79", + "data": [ + { + "text": "play song from ", + "userDefined": false + }, + { + "text": "Rihanna", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "71b9ccc4-b8f6-4244-b4f6-28a72464b1ef", + "data": [ + { + "text": "can you play song ", + "userDefined": false + }, + { + "text": "Dark Horse", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "710491f2-3f97-46c4-88a5-bf8055adbd92", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Miracles", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " from ", + "userDefined": false + }, + { + "text": "Apple Music", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "9cc89a30-6a79-445f-a695-e54dccab5e53", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "RnB", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "187e7d29-1b5a-427a-a6a7-fa80965dbe60", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Do I Wanna Know", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Arctic Monkeys", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "47412244-c03e-4f77-bcd6-371ccd6a4612", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "hip hop", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "2460edc3-3fa8-4220-9f88-957b3fc5e622", + "data": [ + { + "text": "play a song from ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "2a33e951-9079-48b1-8304-91f2177aabdc", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Black Widow", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Iggy Azalea", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " song on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "600a7eb6-8da7-4d60-b8f3-75084e14aa62", + "data": [ + { + "text": "play music by ", + "userDefined": false + }, + { + "text": "Marco Mengoni", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "4a51c7fa-d779-4bda-961f-8addc818a2ee", + "data": [ + { + "text": "play genre ", + "userDefined": false + }, + { + "text": "blues", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "c5b311f0-01c1-4ef2-b327-e3488c61d194", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Nirvana", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "c3de288a-2fda-4e50-ab80-4b4619b136a3", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "songs", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Enrique Iglesias", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 2, + "updated": 0 + }, + { + "id": "fb063662-66d2-408e-b02e-45d7d1e56cc9", + "data": [ + { + "text": "I want to listen to some ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "df04c95d-9e6c-4ec3-9b07-458d284465cb", + "data": [ + { + "text": "songs by ", + "userDefined": false + }, + { + "text": "Tom Waits", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "919b3261-925d-477d-a81f-cf745f79be73", + "data": [ + { + "text": "I\u0027d like to listen to ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "70ece144-6411-4d2c-9c3e-76a5fe8df0cd", + "data": [ + { + "text": "play song ", + "userDefined": false + }, + { + "text": "from", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "iTunes", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "ea122652-0bef-40cd-8c2c-1a3a0baa7b1f", + "data": [ + { + "text": "I want to listen to something by ", + "userDefined": false + }, + { + "text": "Madonna", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a36d7a17-a4a3-42e5-a7da-8a842b13261d", + "data": [ + { + "text": "play artist ", + "userDefined": false + }, + { + "text": "Meghan Trainor", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "50033e2f-1f47-4558-b463-f671412b2d60", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Britney Spears", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "Me Against the Music", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " feat ", + "userDefined": false + }, + { + "text": "Madonna", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "aacfafab-2472-4aa4-a9f0-c7032a66f1ec", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "The Police", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "68e27cf4-f036-4922-bf96-837efefead72", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Never listen", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "Julia Othmer", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "82665e89-c7ff-4fa8-88fc-bfbfcdc081cf", + "data": [ + { + "text": "play the song ", + "userDefined": false + }, + { + "text": "Bird", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "ccb4fe47-d139-42b9-85d3-b705035ca606", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Rihanna", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "26e4ef21-d1dd-4764-b788-78ef36960ab2", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Miracles", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " from ", + "userDefined": false + }, + { + "text": "phone", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "6c8a9102-3d86-4485-89f2-32d09e5514ba", + "data": [ + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "Adele", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": "\u0027s ", + "userDefined": false + }, + { + "text": "Hello", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "f1cd710f-333b-403b-a40a-4d2a4f59c493", + "data": [ + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "Imagine Dragons", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "10fa87c3-1563-45e9-93f8-31ff757f6e1e", + "data": [ + { + "text": "play some ", + "userDefined": false + }, + { + "text": "smooth jazz", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "bf97fdc3-9aa6-4d88-9de1-b5bd04e5b228", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Bohemian Rhapsody", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Queen", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "1059d415-3a79-48b1-9fd0-59888e955aab", + "data": [ + { + "text": "play the album ", + "userDefined": false + }, + { + "text": "Divorcio", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Julio Iglesia", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "afb3d4e6-1835-4c7c-92ff-159e3418d079", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Thinking Out Loud", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Ed Sheeran", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "bad552f1-3623-43eb-ad57-707856aba08a", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Harder Better Faster", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "bfdf2ac1-0d50-498f-a558-79e0507a7d5b", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a67145ff-df87-4242-9c5f-2505ec2b0eea", + "data": [ + { + "text": "Cher", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "Believe", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "aceb8375-c055-4b5f-819c-e24c8be35fc3", + "data": [ + { + "text": "Blank Space", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "949e513a-0e63-43da-b2fb-bcfa14fba0f2", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Thriller", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "Michael Jackson", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "6b3938b2-5d2a-407d-b610-9e86eec7261e", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "Madonna", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Madonna", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "884d7c51-fd31-4afd-8bde-c65d045a02e1", + "data": [ + { + "text": "put", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "on", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " some ", + "userDefined": false + }, + { + "text": "Rolling Stones", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "afda44f2-b66a-4f57-ad85-3be5a014ac55", + "data": [ + { + "text": "play a song from my ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "library", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "498d74c8-f6fb-4514-b21f-f42083ea435a", + "data": [ + { + "text": "play genre ", + "userDefined": false + }, + { + "text": "party", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "f7cff84a-2606-46e2-8736-1b694a4420c8", + "data": [ + { + "text": "Live While We are Young", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "38ab8a22-465c-4f48-a443-0383f1dab382", + "data": [ + { + "text": "play a ", + "userDefined": false + }, + { + "text": "country", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a170cbd8-595e-4418-94fa-4f122038e651", + "data": [ + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "Best of You", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Foo Fighters", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "94abfa0e-280b-4401-a3ae-58f0d727d2f9", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Keep On Walking", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "CeCe", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "20ff5ce3-7acb-46a2-ba25-dd84e3f4d273", + "data": [ + { + "text": "can", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " you turn ", + "userDefined": false + }, + { + "text": "on", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " my ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "23bcca1c-b7cf-4001-be83-07df61a8a264", + "data": [ + { + "text": "play a ", + "userDefined": false + }, + { + "text": "U2", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "8f576510-622b-4839-a97a-0ed793724f4a", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Experimental", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + }, + { + "text": " songs on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "be65effc-4c48-43f4-8a51-6d3e352956e7", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Miracle", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " from ", + "userDefined": false + }, + { + "text": "Apple Music", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "b9b72a58-2a2f-4e72-81ec-91ba52dcb140", + "data": [ + { + "text": "I want to listen to ", + "userDefined": false + }, + { + "text": "Disturbia", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "b4cb7f5c-8133-4c8e-a63a-c039436c456f", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Elastic Heart", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Sia", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " song on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "11fbfd11-5ae5-40ac-8032-176e568bd457", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "6 Words", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Wretch 32", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "87cbbcc8-3839-435e-875c-32750b80a646", + "data": [ + { + "text": "can you play ", + "userDefined": false + }, + { + "text": "Irreplaceable", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Beyonce", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "ca1807fb-6616-4597-b7ab-65a3a80c45e3", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "I Will Always Love You", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " from ", + "userDefined": false + }, + { + "text": "Whitney Houston", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "87e08518-5170-409e-97fb-5b10c2463c94", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "my faves", + "alias": "playlist", + "meta": "@playlist", + "userDefined": true + }, + { + "text": " playlist", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "220f26f8-ee29-4eed-b80b-caa9cef5cb52", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Metallica", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "8e3541a5-8d8b-4ad4-b703-ac7991d04a63", + "data": [ + { + "text": "play song ", + "userDefined": false + }, + { + "text": "The Cantos de Mallorca", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 23, + "updated": 0 + }, + { + "id": "5198c960-2842-4fc9-9249-a9ca961a23af", + "data": [ + { + "text": "I would like to hear some ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "04b1aeba-2417-4b3a-9ba2-a9388a5f196b", + "data": [ + { + "text": "play genre ", + "userDefined": false + }, + { + "text": "romance", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "6ffac0fc-c209-4db2-90aa-9195d79a2232", + "data": [ + { + "text": "change", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "to", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " my ", + "userDefined": false + }, + { + "text": "workout", + "alias": "playlist", + "meta": "@playlist", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "89528305-1941-43a1-af61-53bfd06c9c54", + "data": [ + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "Grenade", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " in my ", + "userDefined": false + }, + { + "text": "library", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "ddc5ddd3-9902-497f-b01a-afa9de33197a", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Let Her Go", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Passenger", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " song on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "83fe76d6-d82b-4608-94c2-08865d775632", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Maroon 5", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "7ae9c980-66c8-4009-8dd0-eb5bb1790e09", + "data": [ + { + "text": "turn on", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "meditative", + "alias": "playlist", + "meta": "@playlist", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "tracks", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d2771282-c5f0-46d0-90a1-546be28fc87e", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Do you Mind", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Changing Faces", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "c12d0f32-a322-4cc4-9d99-38b88c0b0dc7", + "data": [ + { + "text": "can you play ", + "userDefined": false + }, + { + "text": "It Must Have Been Love", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "f327361f-d9f6-42b8-96f1-167a68c4064f", + "data": [ + { + "text": "will", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " you please play ", + "userDefined": false + }, + { + "text": "Tik Tok", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "0ad3e07c-3410-4706-b480-5d8a7acde886", + "data": [ + { + "text": "play any song ", + "userDefined": false + }, + { + "text": "of", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "Babbu Maan", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " from my ", + "userDefined": false + }, + { + "text": "library", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "38c7ce00-85c7-453b-9a1c-c07755ba705d", + "data": [ + { + "text": "play the album ", + "userDefined": false + }, + { + "text": "Un monde meilleur", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Kids United", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "4dce1fc0-c708-425a-aad8-92b38f29633b", + "data": [ + { + "text": "can you play the song ", + "userDefined": false + }, + { + "text": "Still into You", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "dea8b13f-9b5e-433e-91b4-a2632923a235", + "data": [ + { + "text": "can you please play a song from my ", + "userDefined": false + }, + { + "text": "favourite", + "alias": "playlist", + "meta": "@playlist", + "userDefined": true + }, + { + "text": " playlist", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "6ec8e79c-1046-4bf9-86b5-707725f50c0b", + "data": [ + { + "text": "play song ", + "userDefined": false + }, + { + "text": "In Da Club", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a4a1227d-3caf-4250-ba61-9e5e82853a1a", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " for me", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "cc911300-6be8-4005-afec-6d69c17c5c89", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "21", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Adele", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a6df9ebf-04cd-4dee-967a-a80924dab3dd", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Now Call Mom", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "6ef00ec3-689c-4b4d-bddf-33a8db64da61", + "data": [ + { + "text": "play me a song by ", + "userDefined": false + }, + { + "text": "Aventura", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "37b8d332-9c6a-41c7-97be-12940cbe9d48", + "data": [ + { + "text": "Tom Waits", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " songs", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "bdb361c7-208e-4e3e-aacf-d43172173f1d", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Song of Joy", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "10dad1aa-e8a5-4847-b809-4b849e11928b", + "data": [ + { + "text": "I wanna listen to ", + "userDefined": false + }, + { + "text": "reggae", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "25278946-e823-43ef-958d-4be7757858fa", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Tears in Heaven", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Eric Clapton", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "93173604-0a30-49c8-b4ec-9580bc3e2b08", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Anaconda", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Nicki Minaj", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "c5eb5234-0a7f-49ac-a1d2-db28c49c4db3", + "data": [ + { + "text": "please play song ", + "userDefined": false + }, + { + "text": "Secret Love Song", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "b99b9842-0d8a-4200-bf9e-446b97e3651a", + "data": [ + { + "text": "a", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " song ", + "userDefined": false + }, + { + "text": "Still Loving You", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "98a809bf-7ee5-47fb-acb5-768b5fe9bdff", + "data": [ + { + "text": "can you play ", + "userDefined": false + }, + { + "text": "How You Remind Me", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "e2be7657-6d72-471e-9c8b-dbd0fc10f52b", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Theory of a Deadman", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 1497017425 + }, + { + "id": "b47dd2ec-948f-4679-a03e-6df29485688f", + "data": [ + { + "text": "play me some ", + "userDefined": false + }, + { + "text": "Michael Jackson", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a24ee159-1dca-4fed-aa8c-cc2a49022a6b", + "data": [ + { + "text": "play artist ", + "userDefined": false + }, + { + "text": "ACDC", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "10adef9f-bf9d-441e-b131-bf17671cdf48", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Miracle", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "1f8df08a-4aab-4581-8bcb-66c4af33a559", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "Purple Rain", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " on ", + "userDefined": false + }, + { + "text": "Spotify", + "alias": "service", + "meta": "@music-service", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "ca158749-3e4f-4a25-8a43-40ff4070e48d", + "data": [ + { + "text": "can you play the song ", + "userDefined": false + }, + { + "text": "Beauty and a Beat", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "2f07511a-7bf9-464c-a0d9-10791c0b3aab", + "data": [ + { + "text": "play some ", + "userDefined": false + }, + { + "text": "rock n roll", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "dcd0b614-d7b4-4564-bddd-daaac3989d87", + "data": [ + { + "text": "play a song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a79c1d43-6ceb-443f-8490-80a1c952e29d", + "data": [ + { + "text": "play the ", + "userDefined": false + }, + { + "text": "newest", + "alias": "sort", + "meta": "@music-sort", + "userDefined": true + }, + { + "text": " song by ", + "userDefined": false + }, + { + "text": "Eminem", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d28275ed-81fb-420d-a64d-2456de43229b", + "data": [ + { + "text": "put ", + "userDefined": false + }, + { + "text": "on", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "some", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "463ee578-3305-45d3-89df-d9f794ec84a1", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "country blues", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "188a93b3-991e-4dd3-a832-22609729b568", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Queens of the stone age", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d8839581-1a5b-4cb3-a95c-ee4eba449921", + "data": [ + { + "text": "No Scrubs", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " song play", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "41fd1f25-e099-4612-a8ba-8ebc1a1e0035", + "data": [ + { + "text": "play song ", + "userDefined": false + }, + { + "text": "How do I Live", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "1d9df822-ccae-4427-8231-a24d6361bdb3", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "The marshall mathers", + "alias": "album", + "meta": "@music-album", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Eminem", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "b20f0ae3-164f-401f-84c9-aa9634b60c38", + "data": [ + { + "text": "play album ", + "userDefined": false + }, + { + "text": "Horses", + "alias": "album", + "meta": "@music-album", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "b9663329-579d-421c-8721-8d1809c0d225", + "data": [ + { + "text": "play a song ", + "userDefined": false + }, + { + "text": "Tera Mera Rishta", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d38034bf-c988-400d-8406-c41890899fbe", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "The Antlers", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "8c0fb53f-14ec-4b1a-86b0-0e92ea9988e2", + "data": [ + { + "text": "Play", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "chill", + "alias": "playlist", + "meta": "@playlist", + "userDefined": true + }, + { + "text": " playlist", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "f370ceb8-c706-4770-b13f-9bb3c158161a", + "data": [ + { + "text": "play a ", + "userDefined": false + }, + { + "text": "rock", + "alias": "genre", + "meta": "@sys.music-genre", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "92e80d1f-7a17-433b-8e4c-2a884c398277", + "data": [ + { + "text": "turn ", + "userDefined": false + }, + { + "text": "on", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " the ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "7ac433c5-387a-4e3c-9b21-4bbf86cf54b4", + "data": [ + { + "text": "can you play some music", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a40407bb-38e5-4ba7-b64c-e77b902d61b3", + "data": [ + { + "text": "play song ", + "userDefined": false + }, + { + "text": "Krystof", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "Tak Pojd Hlwdat Breh", + "alias": "song", + "meta": "@song", + "userDefined": true + } + ], + "isTemplate": false, + "count": 45, + "updated": 0 + }, + { + "id": "ab2f6e07-3af3-4000-9c4a-bc62cb2f09d4", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "Focus", + "alias": "song", + "meta": "@song", + "userDefined": true + }, + { + "text": " by ", + "userDefined": false + }, + { + "text": "Ariana Grande", + "alias": "artist", + "meta": "@sys.music-artist", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + } +] \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.add_favorite.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.add_favorite.json new file mode 100644 index 00000000..7a613ddd --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.add_favorite.json @@ -0,0 +1,37 @@ +{ + "id": "75b1cd1c-ecc9-4c16-b8bc-a3b2153954cc", + "name": "music_player_control.add_favorite", + "auto": true, + "contexts": [ + "music-player-control" + ], + "responses": [ + { + "resetContexts": false, + "action": "music_player_control.add_favorite", + "affectedContexts": [ + { + "name": "music-player-control", + "parameters": {}, + "lifespan": 3 + } + ], + "parameters": [], + "messages": [ + { + "type": 0, + "lang": "en", + "speech": [] + } + ], + "defaultResponsePlatforms": {}, + "speech": [] + } + ], + "priority": 500000, + "webhookUsed": false, + "webhookForSlotFilling": false, + "lastUpdate": 1496995044549, + "fallbackIntent": false, + "events": [] +} \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.add_favorite_usersays_en.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.add_favorite_usersays_en.json new file mode 100644 index 00000000..e94a9ed2 --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.add_favorite_usersays_en.json @@ -0,0 +1,178 @@ +[ + { + "id": "502c4820-23f6-4280-b7e7-be2abb7409db", + "data": [ + { + "text": "it\u0027s my favourite", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "87e4a21f-d682-4397-a7a1-6f14c397d3aa", + "data": [ + { + "text": "I", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "love", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " this song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "99cfb77a-4e7e-4eb6-baed-2aa5f132b771", + "data": [ + { + "text": "put this track into my favourites", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "da909d83-bdd2-4fbb-a159-a315950c77a9", + "data": [ + { + "text": "add to ", + "userDefined": false + }, + { + "text": "faves", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "f82e039c-0f0e-479f-a56d-7b2e434981b3", + "data": [ + { + "text": "add this song to my ", + "userDefined": false + }, + { + "text": "favourites", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "710574b0-bf68-4395-91be-9df929547295", + "data": [ + { + "text": "add this song to ", + "userDefined": false + }, + { + "text": "favorites", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "e1137399-47fc-4e30-9397-29510c535731", + "data": [ + { + "text": "add it to ", + "userDefined": false + }, + { + "text": "my favourites", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "e866c7e9-cad4-44ab-9327-6576e7b0d1b7", + "data": [ + { + "text": "favourite", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " this song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "f5898038-a109-47d3-aad6-6301f662fee2", + "data": [ + { + "text": "could you mark it as favourite", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "179136ba-cd2e-40e8-aaae-6913404d2530", + "data": [ + { + "text": "remember this song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "48af2f2b-57ea-43d7-a399-4db18d83456c", + "data": [ + { + "text": "fave", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " this song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + } +] \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.add_playlist.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.add_playlist.json new file mode 100644 index 00000000..fcb7346f --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.add_playlist.json @@ -0,0 +1,45 @@ +{ + "id": "6315f5ee-327f-4c47-8512-b5fe0bebe020", + "name": "music_player_control.add_playlist", + "auto": true, + "contexts": [ + "music-player-control" + ], + "responses": [ + { + "resetContexts": false, + "action": "music_player_control.add_playlist", + "affectedContexts": [ + { + "name": "music-player-control", + "parameters": {}, + "lifespan": 3 + } + ], + "parameters": [ + { + "id": "ee99ad29-dd22-4209-8a6e-bc6318c036e6", + "dataType": "@sys.any", + "name": "playlist", + "value": "$playlist", + "isList": false + } + ], + "messages": [ + { + "type": 0, + "lang": "en", + "speech": [] + } + ], + "defaultResponsePlatforms": {}, + "speech": [] + } + ], + "priority": 500000, + "webhookUsed": false, + "webhookForSlotFilling": false, + "lastUpdate": 1496995044571, + "fallbackIntent": false, + "events": [] +} \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.add_playlist_usersays_en.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.add_playlist_usersays_en.json new file mode 100644 index 00000000..7dfb00df --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.add_playlist_usersays_en.json @@ -0,0 +1,155 @@ +[ + { + "id": "f41942b0-e652-47a5-8e01-b0580c87e98a", + "data": [ + { + "text": "put it into the playlist ", + "userDefined": false + }, + { + "text": "Running", + "alias": "playlist", + "meta": "@sys.any", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "2f1ff037-28e1-401f-b978-034c2c9c89a8", + "data": [ + { + "text": "put it on my ", + "userDefined": false + }, + { + "text": "Late Night", + "alias": "playlist", + "meta": "@sys.any", + "userDefined": true + }, + { + "text": " playlist", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "533c99cb-c20b-46c7-a57d-702ac28dce06", + "data": [ + { + "text": "move it to the ", + "userDefined": false + }, + { + "text": "Gym", + "alias": "playlist", + "meta": "@sys.any", + "userDefined": true + }, + { + "text": " playlist", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "4d9d5238-1395-41bd-9b3e-44e54f460717", + "data": [ + { + "text": "save ", + "userDefined": false + }, + { + "text": "this", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " song to my ", + "userDefined": false + }, + { + "text": "Workout", + "alias": "playlist", + "meta": "@sys.any", + "userDefined": true + }, + { + "text": " playlist", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "0762f05b-407d-4381-b5ec-fa92b1c07cd5", + "data": [ + { + "text": "add ", + "userDefined": false + }, + { + "text": "this", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " song to my playlist", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "5fb50231-4168-4872-90d5-b97a57a4a0f3", + "data": [ + { + "text": "add it to the playlist ", + "userDefined": false + }, + { + "text": "Yoga", + "alias": "playlist", + "meta": "@sys.any", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "6608f743-b21c-403c-aa74-7f5d7ac39986", + "data": [ + { + "text": "save ", + "userDefined": false + }, + { + "text": "this", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " track in my playlist", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + } +] \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.pause.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.pause.json new file mode 100644 index 00000000..48c62c95 --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.pause.json @@ -0,0 +1,37 @@ +{ + "id": "726c72bd-dd50-4d5f-bc69-627f04ef3b2f", + "name": "music_player_control.pause", + "auto": true, + "contexts": [ + "music-player-control" + ], + "responses": [ + { + "resetContexts": false, + "action": "music_player_control.pause", + "affectedContexts": [ + { + "name": "music-player-control", + "parameters": {}, + "lifespan": 3 + } + ], + "parameters": [], + "messages": [ + { + "type": 0, + "lang": "en", + "speech": [] + } + ], + "defaultResponsePlatforms": {}, + "speech": [] + } + ], + "priority": 500000, + "webhookUsed": false, + "webhookForSlotFilling": false, + "lastUpdate": 1496995044542, + "fallbackIntent": false, + "events": [] +} \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.pause_usersays_en.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.pause_usersays_en.json new file mode 100644 index 00000000..4eaca567 --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.pause_usersays_en.json @@ -0,0 +1,108 @@ +[ + { + "id": "162342e0-af29-485b-9460-ae0b3a2dc2e4", + "data": [ + { + "text": "can you pause ", + "userDefined": false + }, + { + "text": "it", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "b11e776a-dd85-4c98-8eb7-225eac6bde6b", + "data": [ + { + "text": "put it on pause", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "3de0c5b1-ba70-4ffc-974b-849aecde4862", + "data": [ + { + "text": "pause playing", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "60805177-3fb6-4f3f-aa39-8bae18c7aa24", + "data": [ + { + "text": "pause song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "3274762f-cd92-4188-b087-e3b8fa1819d1", + "data": [ + { + "text": "pause ", + "userDefined": false + }, + { + "text": "it", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "91abaa3b-b353-4fdd-a21a-26e140af062d", + "data": [ + { + "text": "pause", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "86f2580c-0ab5-4c50-ad51-790e81f496b6", + "data": [ + { + "text": "please pause", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "b4aa7ed6-8b9a-4767-92f5-f3b7e2520be2", + "data": [ + { + "text": "pause this song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + } +] \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.play.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.play.json new file mode 100644 index 00000000..8a8c72a0 --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.play.json @@ -0,0 +1,37 @@ +{ + "id": "ce58082e-3375-4229-a1d3-66b11fc44a33", + "name": "music_player_control.play", + "auto": true, + "contexts": [ + "music-player-control" + ], + "responses": [ + { + "resetContexts": false, + "action": "music_player_control.play", + "affectedContexts": [ + { + "name": "music-player-control", + "parameters": {}, + "lifespan": 3 + } + ], + "parameters": [], + "messages": [ + { + "type": 0, + "lang": "en", + "speech": [] + } + ], + "defaultResponsePlatforms": {}, + "speech": [] + } + ], + "priority": 500000, + "webhookUsed": false, + "webhookForSlotFilling": false, + "lastUpdate": 1496995044553, + "fallbackIntent": false, + "events": [] +} \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.play_usersays_en.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.play_usersays_en.json new file mode 100644 index 00000000..4da0b399 --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.play_usersays_en.json @@ -0,0 +1,289 @@ +[ + { + "id": "f098f50b-845b-4ce3-aad9-cca7583c2924", + "data": [ + { + "text": "can", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " you ", + "userDefined": false + }, + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "it", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "4ac6acb4-9cdb-4438-92b3-960f3813048f", + "data": [ + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " this", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "62cd9a42-5cf7-47bd-9538-d9cc3dbdd811", + "data": [ + { + "text": "could", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " you ", + "userDefined": false + }, + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " this one", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "5c738eb0-0705-4416-87c5-b6e4b9708433", + "data": [ + { + "text": "play", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d9e5dc70-43b7-4bca-980e-abef66dc260b", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "it", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "dd0eb425-4ce5-4ca2-bbac-866b20b28c9f", + "data": [ + { + "text": "could", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " you ", + "userDefined": false + }, + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " it for ", + "userDefined": false + }, + { + "text": "me", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "df174d51-6caa-40fe-a46c-b8743bd3625c", + "data": [ + { + "text": "now", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "start", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " playing", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "48ba2aa1-e9b3-476d-8cc9-14e1fbacfd35", + "data": [ + { + "text": "now", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "cb52c98e-ebb9-4929-9de9-71b8f26c02f5", + "data": [ + { + "text": "start", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " playing ", + "userDefined": false + }, + { + "text": "it", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "e3582d27-4f67-4fcf-8789-1ef3525a381e", + "data": [ + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "it", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "fd5d4c65-2cb4-4657-a8f1-24497e01c595", + "data": [ + { + "text": "and ", + "userDefined": false + }, + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "it", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "92a51f0b-f1b2-42b1-a87a-4f664bfc12c6", + "data": [ + { + "text": "I want you ", + "userDefined": false + }, + { + "text": "to", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "it", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + } +] \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.repeat.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.repeat.json new file mode 100644 index 00000000..be58d4f3 --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.repeat.json @@ -0,0 +1,37 @@ +{ + "id": "af2b866d-f6e3-4425-92fc-85d9e1f308d7", + "name": "music_player_control.repeat", + "auto": true, + "contexts": [ + "music-player-control" + ], + "responses": [ + { + "resetContexts": false, + "action": "music_player_control.repeat", + "affectedContexts": [ + { + "name": "music-player-control", + "parameters": {}, + "lifespan": 3 + } + ], + "parameters": [], + "messages": [ + { + "type": 0, + "lang": "en", + "speech": [] + } + ], + "defaultResponsePlatforms": {}, + "speech": [] + } + ], + "priority": 500000, + "webhookUsed": false, + "webhookForSlotFilling": false, + "lastUpdate": 1496995044540, + "fallbackIntent": false, + "events": [] +} \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.repeat_usersays_en.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.repeat_usersays_en.json new file mode 100644 index 00000000..ef6c2942 --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.repeat_usersays_en.json @@ -0,0 +1,651 @@ +[ + { + "id": "8279fd5f-a41b-4e4b-8011-47edb5c916eb", + "data": [ + { + "text": "I", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " want ", + "userDefined": false + }, + { + "text": "to", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " listen ", + "userDefined": false + }, + { + "text": "to", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " this song once again", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "ff784cc5-d872-40a8-a8cf-1f45de2b3bfc", + "data": [ + { + "text": "turn on", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " repeat mode for ", + "userDefined": false + }, + { + "text": "it", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "37420c0f-179a-4340-92d5-d325a958368a", + "data": [ + { + "text": "repeat ", + "userDefined": false + }, + { + "text": "it", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "once", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " again", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "26570cc9-e98d-4787-9015-b369fd0cd8bb", + "data": [ + { + "text": "play this track", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "once", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " again", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "7dc5bfeb-f60f-4009-8ae0-8501e35af89f", + "data": [ + { + "text": "repeat this track one", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "more", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "time", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "23113a23-6a81-4038-813c-77c070bb5e48", + "data": [ + { + "text": "put ", + "userDefined": false + }, + { + "text": "it", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "on", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " repeat mode", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d94650e0-e3bd-45df-a7bd-469219dbdfe7", + "data": [ + { + "text": "put this ", + "userDefined": false + }, + { + "text": "on", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " repeat", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "f26ff4f2-7c2b-4c4a-a182-d082ba947741", + "data": [ + { + "text": "repeat this ", + "userDefined": false + }, + { + "text": "song", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "once", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " again", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "b8ce9e24-b751-4e4f-8c70-5fc3668b14fc", + "data": [ + { + "text": "put this ", + "userDefined": false + }, + { + "text": "track", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "on", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " repeat", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "3c188110-0b09-48cb-8204-3e9ce532e84d", + "data": [ + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " again from the ", + "userDefined": false + }, + { + "text": "very", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " beginning", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "90b65c7a-10db-4d8f-ba1a-3760c985c800", + "data": [ + { + "text": "turn on", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " repeat for this ", + "userDefined": false + }, + { + "text": "song", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "b8d3aa06-47af-4b17-a198-35bfa762c3c1", + "data": [ + { + "text": "repeat this song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "45a408d3-a6a1-4876-b39c-37038cf3a86e", + "data": [ + { + "text": "repeat this ", + "userDefined": false + }, + { + "text": "track", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "ef78b9dc-7026-4093-b90b-bf2dab521ed0", + "data": [ + { + "text": "play this song again", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "fa7dcfb0-1e77-4e3f-898f-dcb5d63fadb8", + "data": [ + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " it ", + "userDefined": false + }, + { + "text": "one", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "more", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "time", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "08043402-da62-43fa-bcce-7ef51551f6bb", + "data": [ + { + "text": "repeat ", + "userDefined": false + }, + { + "text": "one", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "more", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "time", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "05ab3a12-d5ae-4086-8b2a-8cb3307484a2", + "data": [ + { + "text": "repeat", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "fcfe36ba-ccba-4deb-b2ae-db32292436e0", + "data": [ + { + "text": "let\u0027", + "userDefined": false + }, + { + "text": "s", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " repeat this ", + "userDefined": false + }, + { + "text": "track", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a768f306-b47b-4710-b768-5e245fd9600f", + "data": [ + { + "text": "turn on", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " repeat mode for this ", + "userDefined": false + }, + { + "text": "song", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "be857c76-1ce9-4e42-989a-4504c779b8c1", + "data": [ + { + "text": "repeat ", + "userDefined": false + }, + { + "text": "mode for this track", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "4b18fef4-ef84-4a45-b029-a10bee4bb7ce", + "data": [ + { + "text": "one", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " more time", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a37e2385-2b6c-4745-922d-a16af957c352", + "data": [ + { + "text": "can you repeat this track", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a282d0fb-ec7d-4fe7-b892-3989b739c0ea", + "data": [ + { + "text": "can", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " you repeat ", + "userDefined": false + }, + { + "text": "it", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "29fea104-7adf-4d2d-8e73-e60015fa786a", + "data": [ + { + "text": "repeat it", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "e0ce3070-f7ba-4db5-8494-4cb8a7e6c2d2", + "data": [ + { + "text": "could", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " you repeat them", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "8c33ec71-5006-4b60-b7aa-43c24497dc60", + "data": [ + { + "text": "repeat the ", + "userDefined": false + }, + { + "text": "song", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "59061600-8e19-4a80-a021-b51d175782ff", + "data": [ + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "it", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " again", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "2dbf6bda-4465-4ca5-baf0-dead73439e71", + "data": [ + { + "text": "play", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " this song from the beginning", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "7c2058a4-e5e2-4456-82a3-238408e9347a", + "data": [ + { + "text": "repeat please", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + } +] \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.resume.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.resume.json new file mode 100644 index 00000000..47ac2c28 --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.resume.json @@ -0,0 +1,37 @@ +{ + "id": "bf047cdf-0cac-446c-8cdf-a43a40004f76", + "name": "music_player_control.resume", + "auto": true, + "contexts": [ + "music-player-control" + ], + "responses": [ + { + "resetContexts": false, + "action": "music_player_control.resume", + "affectedContexts": [ + { + "name": "music-player-control", + "parameters": {}, + "lifespan": 3 + } + ], + "parameters": [], + "messages": [ + { + "type": 0, + "lang": "en", + "speech": [] + } + ], + "defaultResponsePlatforms": {}, + "speech": [] + } + ], + "priority": 500000, + "webhookUsed": false, + "webhookForSlotFilling": false, + "lastUpdate": 1496995044557, + "fallbackIntent": false, + "events": [] +} \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.resume_usersays_en.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.resume_usersays_en.json new file mode 100644 index 00000000..8d4a778d --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.resume_usersays_en.json @@ -0,0 +1,156 @@ +[ + { + "id": "8b89201d-0660-437d-8d7b-90cb186462b3", + "data": [ + { + "text": "resume playing", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "c508cdb6-06c0-4020-aa67-408d549d3ee8", + "data": [ + { + "text": "resume ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "fb726b0a-c1a8-4610-bc6e-c6bb6a99e064", + "data": [ + { + "text": "resume this song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "2ade82da-0276-4827-8049-b7c411af26b8", + "data": [ + { + "text": "continue playing", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "454bfeb5-d225-4ecc-929f-1754f825a9dc", + "data": [ + { + "text": "start", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " again", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "dfe058ca-d791-4a50-95b1-730531a40f10", + "data": [ + { + "text": "restart ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "47d17eda-673e-46c1-b610-f5e6abc2062a", + "data": [ + { + "text": "resume", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a92e3ecc-6a47-43dd-b150-c4e7af84263e", + "data": [ + { + "text": "continue", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "a87c1572-364c-4ad1-bbf5-34f52552f610", + "data": [ + { + "text": "continue the ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "6d32a82a-bcbf-43fb-97c2-6d7f0d6fb82a", + "data": [ + { + "text": "resume ", + "userDefined": false + }, + { + "text": "it", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + } +] \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.shuffle.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.shuffle.json new file mode 100644 index 00000000..1588ea16 --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.shuffle.json @@ -0,0 +1,37 @@ +{ + "id": "ba64e2b5-1768-49e3-9134-b62627d17935", + "name": "music_player_control.shuffle", + "auto": true, + "contexts": [ + "music-player-control" + ], + "responses": [ + { + "resetContexts": false, + "action": "music_player_control.shuffle", + "affectedContexts": [ + { + "name": "music-player-control", + "parameters": {}, + "lifespan": 3 + } + ], + "parameters": [], + "messages": [ + { + "type": 0, + "lang": "en", + "speech": [] + } + ], + "defaultResponsePlatforms": {}, + "speech": [] + } + ], + "priority": 500000, + "webhookUsed": false, + "webhookForSlotFilling": false, + "lastUpdate": 1496995044563, + "fallbackIntent": false, + "events": [] +} \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.shuffle_usersays_en.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.shuffle_usersays_en.json new file mode 100644 index 00000000..192d9f8f --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.shuffle_usersays_en.json @@ -0,0 +1,62 @@ +[ + { + "id": "b1a766d4-6a1a-4f6a-a291-c0908b3e3c30", + "data": [ + { + "text": "shuffle mode on", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "db5f6da7-cab0-49ff-b152-88887f425e76", + "data": [ + { + "text": "turn on shuffle mode", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "3c1050f4-4758-4ce2-b887-d7fc31b1fc9e", + "data": [ + { + "text": "shuffle them", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "982e73e8-3e93-48a8-9063-7c46b123c5e4", + "data": [ + { + "text": "shuffle this playlist", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "f2a75ade-f319-4415-b754-95fb6c0614f7", + "data": [ + { + "text": "shuffle", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + } +] \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.skip_backward.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.skip_backward.json new file mode 100644 index 00000000..963e981b --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.skip_backward.json @@ -0,0 +1,37 @@ +{ + "id": "a097a69f-6573-4b40-8bac-f7274837583c", + "name": "music_player_control.skip_backward", + "auto": true, + "contexts": [ + "music-player-control" + ], + "responses": [ + { + "resetContexts": false, + "action": "music_player_control.skip_backward", + "affectedContexts": [ + { + "name": "music-player-control", + "parameters": {}, + "lifespan": 3 + } + ], + "parameters": [], + "messages": [ + { + "type": 0, + "lang": "en", + "speech": [] + } + ], + "defaultResponsePlatforms": {}, + "speech": [] + } + ], + "priority": 500000, + "webhookUsed": false, + "webhookForSlotFilling": false, + "lastUpdate": 1496995044561, + "fallbackIntent": false, + "events": [] +} \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.skip_backward_usersays_en.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.skip_backward_usersays_en.json new file mode 100644 index 00000000..04506d7f --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.skip_backward_usersays_en.json @@ -0,0 +1,210 @@ +[ + { + "id": "1d241e47-729a-4322-8138-21d4e5cfa0b9", + "data": [ + { + "text": "previous song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "521e7df1-d8c9-40e7-b7e2-9ba7b6f341d5", + "data": [ + { + "text": "skip to the back", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "e5801f56-fa54-4b4d-a4e9-032c1e9dcb35", + "data": [ + { + "text": "skip ", + "userDefined": false + }, + { + "text": "to", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " previous", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "6abd6674-fc27-4df9-b719-28a3d03e8106", + "data": [ + { + "text": "previous", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "66d1ab50-bde7-4b9e-8d6e-9be69570c674", + "data": [ + { + "text": "go back to previous", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "261689c1-64e2-4370-8fdd-fbc349f39702", + "data": [ + { + "text": "go back to previous song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "031f6eb7-0589-444f-96dd-4b3cf18370b9", + "data": [ + { + "text": "skip backward", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "03a5a9d6-ed0e-471c-a841-f2c99267aa5c", + "data": [ + { + "text": "go back to the previous station", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "01f250d9-6765-4d1b-a97b-eecaa0bfafd3", + "data": [ + { + "text": "go back", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "b74b7c71-59d0-42c8-ad57-3b60009a6805", + "data": [ + { + "text": "skip back", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "7f1995fb-6dd9-462e-b580-35d91c41f499", + "data": [ + { + "text": "previous station", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "014415b7-bb59-4c40-9d70-82bf410ff095", + "data": [ + { + "text": "skip to the previous song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "5d71fac5-626e-4e73-a904-a3f2500a05f3", + "data": [ + { + "text": "back", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "170d4bb0-23f8-4ad2-8ced-f03bee8c710a", + "data": [ + { + "text": "back", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "up", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " a ", + "userDefined": false + }, + { + "text": "track", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "1c1dcb40-4800-45a4-b7d5-49cc48e188d0", + "data": [ + { + "text": "go to previous", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + } +] \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.skip_forward.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.skip_forward.json new file mode 100644 index 00000000..d3508a7e --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.skip_forward.json @@ -0,0 +1,37 @@ +{ + "id": "8e86a17e-f7fb-4aa0-b00f-78b46c9b8cf8", + "name": "music_player_control.skip_forward", + "auto": true, + "contexts": [ + "music-player-control" + ], + "responses": [ + { + "resetContexts": false, + "action": "music_player_control.skip_forward", + "affectedContexts": [ + { + "name": "music-player-control", + "parameters": {}, + "lifespan": 3 + } + ], + "parameters": [], + "messages": [ + { + "type": 0, + "lang": "en", + "speech": [] + } + ], + "defaultResponsePlatforms": {}, + "speech": [] + } + ], + "priority": 500000, + "webhookUsed": false, + "webhookForSlotFilling": false, + "lastUpdate": 1496995044580, + "fallbackIntent": false, + "events": [] +} \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.skip_forward_usersays_en.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.skip_forward_usersays_en.json new file mode 100644 index 00000000..90155939 --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.skip_forward_usersays_en.json @@ -0,0 +1,534 @@ +[ + { + "id": "5c80d39d-cb85-4a53-bded-09b9e9d4ca00", + "data": [ + { + "text": "the ", + "userDefined": false + }, + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "bc434b0a-8426-4856-a150-8f1cad0628fc", + "data": [ + { + "text": "skip", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "4aeae22a-340a-4bb4-9cca-20e7d4f9245d", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "08268db3-f6d8-4b77-bd79-7dc2f94ffca5", + "data": [ + { + "text": "what\u0027", + "userDefined": false + }, + { + "text": "s", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " the ", + "userDefined": false + }, + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "one", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "91daa8ef-57fe-474b-ac86-f09dc6dcba4b", + "data": [ + { + "text": "go to the ", + "userDefined": false + }, + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "one", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "422be628-6763-43b3-af66-d270a46b5cb5", + "data": [ + { + "text": "now the ", + "userDefined": false + }, + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "one", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "9d6efcbe-481a-4bf0-b8eb-d22d75c85575", + "data": [ + { + "text": "go ", + "userDefined": false + }, + { + "text": "forward", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "b02e239b-3df5-48b6-8307-335fba6dee9f", + "data": [ + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 1, + "updated": 0 + }, + { + "id": "125380ba-2616-426f-8b40-6dda2d744a2f", + "data": [ + { + "text": "skip ", + "userDefined": false + }, + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "f9137299-0316-4fb7-b3f5-05c761b5c5f4", + "data": [ + { + "text": "skip ", + "userDefined": false + }, + { + "text": "to", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " the ", + "userDefined": false + }, + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "one", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "f0dacf73-31c1-413f-9041-c5824cd99933", + "data": [ + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "8a538320-42eb-42cf-8d7e-a5397e325851", + "data": [ + { + "text": "what\u0027", + "userDefined": false + }, + { + "text": "s", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " the ", + "userDefined": false + }, + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "song", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "19b42a16-1c43-4c21-9f69-664804d6fac1", + "data": [ + { + "text": "skip to ", + "userDefined": false + }, + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d77ba8c7-d460-4069-818b-f062c8b5702c", + "data": [ + { + "text": "skip this ", + "userDefined": false + }, + { + "text": "song", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "7559ee2a-8d03-4019-9600-781208b8bfe0", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " track", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "c3a6a359-f3c2-45bd-845a-ecf8b34f1e68", + "data": [ + { + "text": "play ", + "userDefined": false + }, + { + "text": "the", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "06afa98e-cd51-45dc-a659-33dbb4f68adf", + "data": [ + { + "text": "play the ", + "userDefined": false + }, + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "one", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d7b33d22-3c4b-4226-a4cf-299e53e15fb4", + "data": [ + { + "text": "play another ", + "userDefined": false + }, + { + "text": "one", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "ccfea9da-87d5-4396-abb5-2227d6856c23", + "data": [ + { + "text": "the ", + "userDefined": false + }, + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " please", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "39c4c4a1-c046-49de-b9d0-6589ac53c460", + "data": [ + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "track", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "69071604-607f-4720-9849-5de4d0b0e6bb", + "data": [ + { + "text": "skip ", + "userDefined": false + }, + { + "text": "forward", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "3f4cdaef-35ae-4d9b-8eb1-81f97e751fe4", + "data": [ + { + "text": "what\u0027s", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "877b3fef-7517-4891-bcb3-c28fb580c7cc", + "data": [ + { + "text": "the", + "meta": "@sys.ignore", + "userDefined": false + }, + { + "text": " following song", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "3e5289fb-0a2b-4e00-a8eb-3f32bc4f581e", + "data": [ + { + "text": "go to the ", + "userDefined": false + }, + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d6e2553f-668b-45f9-9b58-4eb554f3f4ad", + "data": [ + { + "text": "next", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " please", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + } +] \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.stop.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.stop.json new file mode 100644 index 00000000..da25933c --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.stop.json @@ -0,0 +1,37 @@ +{ + "id": "13727a0e-f535-4e29-9d6f-1c33863a25d7", + "name": "music_player_control.stop", + "auto": true, + "contexts": [ + "music-player-control" + ], + "responses": [ + { + "resetContexts": false, + "action": "music_player_control.stop", + "affectedContexts": [ + { + "name": "music-player-control", + "parameters": {}, + "lifespan": 3 + } + ], + "parameters": [], + "messages": [ + { + "type": 0, + "lang": "en", + "speech": [] + } + ], + "defaultResponsePlatforms": {}, + "speech": [] + } + ], + "priority": 500000, + "webhookUsed": false, + "webhookForSlotFilling": false, + "lastUpdate": 1496995044566, + "fallbackIntent": false, + "events": [] +} \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.stop_usersays_en.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.stop_usersays_en.json new file mode 100644 index 00000000..06ec3780 --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/intents/music_player_control.stop_usersays_en.json @@ -0,0 +1,172 @@ +[ + { + "id": "7e5bf1d5-3562-4c8f-a89a-21aa5e244c4e", + "data": [ + { + "text": "stop playing", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "f5edf560-d161-406e-9a58-07df60f1e6f8", + "data": [ + { + "text": "enough ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "d2914a06-fad6-4880-ba95-c66b0d06e939", + "data": [ + { + "text": "enough", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "75c6e6c6-d275-43a8-98c3-797b67fb7d23", + "data": [ + { + "text": "stop", + "userDefined": false + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "580ccb15-4f99-4796-99f8-487733ec0e74", + "data": [ + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "off", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "5e8bd1e2-d0f3-499f-b026-bc96fffd2329", + "data": [ + { + "text": "can you stop the ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "853e3b36-e604-441c-b3e2-adf15dfc0637", + "data": [ + { + "text": "stop the ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "3939fb30-219e-436b-97b3-151914b39b37", + "data": [ + { + "text": "stop", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "it", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "48c9c678-871d-4075-975b-6a3b6a175d4c", + "data": [ + { + "text": "could you ", + "userDefined": false + }, + { + "text": "stop", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + }, + { + "id": "9b351312-c262-40be-9dc0-732dafb17954", + "data": [ + { + "text": "turn off", + "meta": "@sys.ignore", + "userDefined": true + }, + { + "text": " ", + "userDefined": false + }, + { + "text": "music", + "meta": "@sys.ignore", + "userDefined": true + } + ], + "isTemplate": false, + "count": 0, + "updated": 0 + } +] \ No newline at end of file diff --git a/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/package.json b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/package.json new file mode 100644 index 00000000..688e9398 --- /dev/null +++ b/BotSharp.UnitTest/App_Data/DbInitializer/Agents/Dialogflow/Spotify/package.json @@ -0,0 +1,3 @@ +{ + "version": "1.0.0" +} \ No newline at end of file From 220b6ad209b9ddde740304671a828aac86ef5485 Mon Sep 17 00:00:00 2001 From: Oceania2018 Date: Mon, 18 Jun 2018 09:15:54 -0500 Subject: [PATCH 2/5] TrainAgentPerContextTest --- BotSharp.Core/Agents/AgentDriver.cs | 88 -------- .../Dialogflow/AIResponseCustomPayload.cs | 2 +- .../Dialogflow/AgentImporterInDialogflow.cs | 2 + BotSharp.Core/Engines/Rasa/RasaAi.cs | 44 ++++ .../Engines/Rasa/RasaIntentExpression.cs | 1 + BotSharp.Core/Engines/RequestExtension.cs | 98 +-------- BotSharp.Core/Entities/EntrySynonym.cs | 2 +- BotSharp.Core/Intents/Intent.cs | 16 +- BotSharp.UnitTest/AgentTest.cs | 13 ++ BotSharp.UnitTest/BotSharp.UnitTest.csproj | 207 +----------------- BotSharp.UnitTest/IntentTest.cs | 4 +- BotSharp.UnitTest/TestEssential.cs | 8 +- 12 files changed, 97 insertions(+), 388 deletions(-) diff --git a/BotSharp.Core/Agents/AgentDriver.cs b/BotSharp.Core/Agents/AgentDriver.cs index fd1faefd..5e18394c 100644 --- a/BotSharp.Core/Agents/AgentDriver.cs +++ b/BotSharp.Core/Agents/AgentDriver.cs @@ -137,94 +137,6 @@ namespace BotSharp.Core.Agents }); }); - return trainingData; - } - - public static RasaTrainingData GrabCorpusPerContexts(this Agent agent, Database dc, List ctx) - { - var trainingData = new RasaTrainingData - { - Entities = new List(), - UserSays = new List() - }; - - var expressParts = new List(); - - var intents = dc.Table() - .Include(x => x.Contexts) - .Include(x => x.UserSays).ThenInclude(say => say.Data) - .Where(x => x.UserSays.Count > 0) - .ToList(); - - var contexts = ctx.OrderBy(x => x.Name).Select(x => x.Name.ToLower()).ToList(); - - // search all potential intents which input context included in contexts - intents = intents.Where(it => - { - if (contexts.Count == 0) - { - return it.Contexts.Count() == 0; - } - else - { - return it.Contexts.Count() > 0 && it.Contexts.Count(x => contexts.Contains(x.Name.ToLower())) == it.Contexts.Count; - } - }).OrderByDescending(x => x.Contexts.Count).ToList(); - - intents.ForEach(intent => - { - intent.UserSays.ForEach(exp => - { - var say = new RasaIntentExpression - { - Intent = intent.Name, - Text = String.Join("", exp.Data.OrderBy(x => x.UpdatedTime).Select(x => x.Text)), - }; - - // convert entity format - exp.Data.Where(x => !String.IsNullOrEmpty(x.Meta)) - .ToList() - .ForEach(x => - { - int start = say.Text.IndexOf(x.Text); - - var part = new RasaIntentExpressionPart - { - Value = x.Text, - Entity = x.Alias, - Start = start, - End = start + x.Text.Length - }; - - if (say.Entities == null) say.Entities = new List(); - say.Entities.Add(part); - - // assemble entity synonmus - if (!trainingData.Entities.Any(y => y.EntityType == x.Alias && y.EntityValue == x.Text)) - { - var allSynonyms = (from e in dc.Table() - join ee in dc.Table() on e.Id equals ee.EntityId - join ees in dc.Table() on ee.Id equals ees.EntityEntryId - where e.Name == x.Alias && ee.Value == x.Text & ees.Synonym != x.Text - select ees.Synonym ).ToList(); - - var te = new RasaTraningEntity - { - EntityType = x.Alias, - EntityValue = x.Text, - Synonyms = allSynonyms - }; - - trainingData.Entities.Add(te); - } - }); - - trainingData.UserSays.Add(say); - }); - }); - - - return trainingData; } } diff --git a/BotSharp.Core/Engines/Dialogflow/AIResponseCustomPayload.cs b/BotSharp.Core/Engines/Dialogflow/AIResponseCustomPayload.cs index 57701442..3af9984a 100644 --- a/BotSharp.Core/Engines/Dialogflow/AIResponseCustomPayload.cs +++ b/BotSharp.Core/Engines/Dialogflow/AIResponseCustomPayload.cs @@ -8,6 +8,6 @@ namespace BotSharp.Core.Models { public string Task { get; set; } - public Object Body { get; set; } + public List Parameters { get; set; } } } diff --git a/BotSharp.Core/Engines/Dialogflow/AgentImporterInDialogflow.cs b/BotSharp.Core/Engines/Dialogflow/AgentImporterInDialogflow.cs index 1b0a9439..63e8f997 100644 --- a/BotSharp.Core/Engines/Dialogflow/AgentImporterInDialogflow.cs +++ b/BotSharp.Core/Engines/Dialogflow/AgentImporterInDialogflow.cs @@ -83,6 +83,8 @@ namespace BotSharp.Core.Engines intentJson = intentJson.Replace("\"prompts\":", "\"promptList\":"); var intent = JsonConvert.DeserializeObject(intentJson); + // void id confict + intent.Id = Guid.NewGuid().ToString(); intent.Name = intent.Name.Replace("/","_"); // load user expressions if (fileName.Contains("Default Fallback Intent")) diff --git a/BotSharp.Core/Engines/Rasa/RasaAi.cs b/BotSharp.Core/Engines/Rasa/RasaAi.cs index 06c74f87..80ffec3e 100644 --- a/BotSharp.Core/Engines/Rasa/RasaAi.cs +++ b/BotSharp.Core/Engines/Rasa/RasaAi.cs @@ -1,5 +1,6 @@ using BotSharp.Core.Agents; using BotSharp.Core.Entities; +using BotSharp.Core.Intents; using BotSharp.Core.Models; using EntityFrameworkCore.BootKit; using Microsoft.EntityFrameworkCore; @@ -86,5 +87,48 @@ namespace BotSharp.Core.Engines return String.Empty; } } + + public string TrainWithContexts() + { + var corpus = agent.GrabCorpus(dc); + + string json = JsonConvert.SerializeObject(new { rasa_nlu_data = corpus }, + new JsonSerializerSettings + { + ContractResolver = new CamelCasePropertyNamesContractResolver(), + NullValueHandling = NullValueHandling.Ignore + }); + + var client = new RestClient($"{Database.Configuration.GetSection("Rasa:Host").Value}"); + var rest = new RestRequest("train", Method.POST); + rest.AddQueryParameter("project", agent.Id); + rest.AddParameter("application/json", json, ParameterType.RequestBody); + + var response = client.Execute(rest); + + if (response.IsSuccessful) + { + var result = JObject.Parse(response.Content); + + string modelName = result["info"].Value().Split(": ")[1]; + + dc.Table().Add(new ContextModelMapping + { + AgentId = agent.Id, + ModelName = modelName, + //ContextId = contextId + }); + + return modelName; + } + else + { + var result = JObject.Parse(response.Content); + + Console.WriteLine(result["error"]); + + return String.Empty; + } + } } } diff --git a/BotSharp.Core/Engines/Rasa/RasaIntentExpression.cs b/BotSharp.Core/Engines/Rasa/RasaIntentExpression.cs index b7562340..6ab8d0a3 100644 --- a/BotSharp.Core/Engines/Rasa/RasaIntentExpression.cs +++ b/BotSharp.Core/Engines/Rasa/RasaIntentExpression.cs @@ -12,6 +12,7 @@ namespace BotSharp.Core.Models public String Text { get; set; } public String Intent { get; set; } + public String ContextHash { get; set; } public List Entities { get; set; } } } diff --git a/BotSharp.Core/Engines/RequestExtension.cs b/BotSharp.Core/Engines/RequestExtension.cs index d966ad0f..4266c5ae 100644 --- a/BotSharp.Core/Engines/RequestExtension.cs +++ b/BotSharp.Core/Engines/RequestExtension.cs @@ -113,8 +113,9 @@ namespace BotSharp.Core.Engines response.Intent }; } - response.IntentRanking = response.IntentRanking - .Where(x => x.Confidence > decimal.Parse("0.2") && intents.Select(i => i.Name).Contains(x.Name)).ToList(); + + response.IntentRanking = response.IntentRanking.Where(x => x.Confidence > decimal.Parse("0.1")).ToList(); + response.IntentRanking = response.IntentRanking.Where(x => intents.Select(i => i.Name).Contains(x.Name)).ToList(); // add Default Fallback Intent if (response.IntentRanking.Count == 0) @@ -314,23 +315,10 @@ namespace BotSharp.Core.Engines } }).OrderByDescending(x => x.Contexts.Count).ToList(); - // training per request contexts + // query per request contexts { string contextId = $"{String.Join(',', contexts.Select(x => x.Name))}".GetMd5Hash(); string modelName = dc.Table().FirstOrDefault(x => x.ContextId == contextId)?.ModelName; - // need training - if (String.IsNullOrEmpty(modelName)) - { - request.Contexts = contexts.Select(x => new AIContext { Name = x.Name.ToLower() }) - .OrderBy(x => x.Name) - .ToList(); - - dc.DbTran(() => - { - modelName = TrainWithContexts(rasa, dc, request, contextId); - }); - } - var result = CallRasa(rasa.agent.Id, request.Query.First(), modelName); if (result.Data.Intent != null) @@ -351,15 +339,6 @@ namespace BotSharp.Core.Engines string modelName = dc.Table().FirstOrDefault(x => x.ContextId == contextId)?.ModelName; - // need training - if (String.IsNullOrEmpty(modelName)) - { - dc.DbTran(() => - { - modelName = TrainWithContexts(rasa, dc, request, contextId); - }); - } - var result = CallRasa(rasa.agent.Id, request.Query.First(), modelName); if (result.Data.Intent != null) @@ -470,74 +449,5 @@ namespace BotSharp.Core.Engines return aiResponse; } - - /// - /// Need two categories at least - /// - /// - /// - /// - /// - /// - public static string TrainWithContexts(this RasaAi console, Database dc, AIRequest request, String contextId) - { - var corpus = console.agent.GrabCorpusPerContexts(dc, request.Contexts); - - corpus.UserSays.Add(new RasaIntentExpression - { - Intent = "Welcome", - Text = "Hi" - }); - - corpus.UserSays.Add(new RasaIntentExpression - { - Intent = "Welcome", - Text = "Hey" - }); - - corpus.UserSays.Add(new RasaIntentExpression - { - Intent = "Welcome", - Text = "Hello" - }); - - string json = JsonConvert.SerializeObject(new { rasa_nlu_data = corpus }, - new JsonSerializerSettings - { - ContractResolver = new CamelCasePropertyNamesContractResolver(), - NullValueHandling = NullValueHandling.Ignore - }); - - var client = new RestClient($"{Database.Configuration.GetSection("Rasa:Host").Value}"); - var rest = new RestRequest("train", Method.POST); - rest.AddQueryParameter("project", console.agent.Id); - rest.AddParameter("application/json", json, ParameterType.RequestBody); - - var response = client.Execute(rest); - - if (response.IsSuccessful) - { - var result = JObject.Parse(response.Content); - - string modelName = result["info"].Value().Split(": ")[1]; - - dc.Table().Add(new ContextModelMapping - { - AgentId = console.agent.Id, - ModelName = modelName, - ContextId = contextId - }); - - return modelName; - } - else - { - var result = JObject.Parse(response.Content); - - Console.WriteLine(result["error"]); - - return String.Empty; - } - } } } diff --git a/BotSharp.Core/Entities/EntrySynonym.cs b/BotSharp.Core/Entities/EntrySynonym.cs index 1b00f295..a2222dfa 100644 --- a/BotSharp.Core/Entities/EntrySynonym.cs +++ b/BotSharp.Core/Entities/EntrySynonym.cs @@ -14,7 +14,7 @@ namespace BotSharp.Core.Entities [StringLength(36)] public String EntityEntryId { get; set; } - [MaxLength(64)] + [MaxLength(128)] public String Synonym { get; set; } } } diff --git a/BotSharp.Core/Intents/Intent.cs b/BotSharp.Core/Intents/Intent.cs index 5d20ded0..25ee198c 100644 --- a/BotSharp.Core/Intents/Intent.cs +++ b/BotSharp.Core/Intents/Intent.cs @@ -1,8 +1,10 @@ -using EntityFrameworkCore.BootKit; +using DotNetToolkit; +using EntityFrameworkCore.BootKit; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; using System.Text; namespace BotSharp.Core.Intents @@ -26,6 +28,18 @@ namespace BotSharp.Core.Intents [ForeignKey("IntentId")] public List Contexts { get; set; } + /// + /// Get input contexts hash + /// + [NotMapped] + public String ContextHash + { + get + { + return $"{String.Join(',', Contexts.OrderBy(x => x.Name).Select(x => x.Name))}".GetMd5Hash(); + } + } + [ForeignKey("IntentId")] public List UserSays { get; set; } diff --git a/BotSharp.UnitTest/AgentTest.cs b/BotSharp.UnitTest/AgentTest.cs index 87506f92..7c616554 100644 --- a/BotSharp.UnitTest/AgentTest.cs +++ b/BotSharp.UnitTest/AgentTest.cs @@ -73,5 +73,18 @@ namespace BotSharp.UnitTest Assert.IsTrue(!String.IsNullOrEmpty(msg)); } + + [TestMethod] + public void TrainAgentPerContextTest() + { + var config = new AIConfiguration(BOT_CLIENT_TOKEN, SupportedLanguage.English); + config.SessionId = Guid.NewGuid().ToString(); + + var rasa = new RasaAi(dc, config); + + string msg = rasa.TrainWithContexts(); + + Assert.IsTrue(!String.IsNullOrEmpty(msg)); + } } } diff --git a/BotSharp.UnitTest/BotSharp.UnitTest.csproj b/BotSharp.UnitTest/BotSharp.UnitTest.csproj index 44a9776a..57854ba7 100644 --- a/BotSharp.UnitTest/BotSharp.UnitTest.csproj +++ b/BotSharp.UnitTest/BotSharp.UnitTest.csproj @@ -7,208 +7,21 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - PreserveNewest @@ -237,7 +50,7 @@ - + diff --git a/BotSharp.UnitTest/IntentTest.cs b/BotSharp.UnitTest/IntentTest.cs index 533e65f4..d2c2bc83 100644 --- a/BotSharp.UnitTest/IntentTest.cs +++ b/BotSharp.UnitTest/IntentTest.cs @@ -20,8 +20,8 @@ namespace BotSharp.UnitTest var rasa = new RasaAi(dc, config); // Round 1 - var response = rasa.TextRequest(new AIRequest { Query = new String[] { "Hi" } }); - Assert.AreEqual(response.Result.Metadata.IntentName, "greet"); + var response = rasa.TextRequest(new AIRequest { Query = new String[] { "Can you play country music?" } }); + Assert.AreEqual(response.Result.Metadata.IntentName, "music.play"); } } } diff --git a/BotSharp.UnitTest/TestEssential.cs b/BotSharp.UnitTest/TestEssential.cs index 44ae611c..0c6993f0 100644 --- a/BotSharp.UnitTest/TestEssential.cs +++ b/BotSharp.UnitTest/TestEssential.cs @@ -10,10 +10,10 @@ namespace BotSharp.UnitTest { public abstract class TestEssential { - public static String BOT_ID = "5f98a0fd-e7e9-4155-9610-d3f40d026162"; - public static String BOT_CLIENT_TOKEN = "2fffb9a1a9214144ab2717a37fa43c33"; - public static String BOT_DEVELOPER_TOKEN = "2c7d224cf7274f9d93b4c65c31ca82fe"; - public static String BOT_NAME = "Handybot"; + public static String BOT_ID = "6a9fd374-c43d-447a-97f2-f37540d0c725"; + public static String BOT_CLIENT_TOKEN = "43a0f48e3f1e41da822092e7e699426b"; + public static String BOT_DEVELOPER_TOKEN = "cd1e4685c6a04d7db1f59e6853fd597b"; + public static String BOT_NAME = "Spotify"; protected Database dc { get; set; } protected string contentRoot; From ad309dc68d2eb543ce5052493e5984e45c8348fc Mon Sep 17 00:00:00 2001 From: "haiping008@gmail.com" Date: Mon, 18 Jun 2018 17:15:32 -0500 Subject: [PATCH 3/5] train model by input contexts. --- BotSharp.Core/Agents/AgentDriver.cs | 4 + BotSharp.Core/BotSharp.Core.csproj | 4 + .../Dialogflow/AgentImporterInDialogflow.cs | 6 + BotSharp.Core/Engines/Rasa/RasaAi.cs | 114 ++++++++---- .../Engines/Rasa/RasaIntentExpression.cs | 6 +- .../Engines/Rasa/RasaTraningEntity.cs | 1 + BotSharp.Core/Engines/RequestExtension.cs | 163 +++--------------- BotSharp.Core/Intents/ContextModelMapping.cs | 25 --- BotSharp.Core/Intents/Intent.cs | 4 +- BotSharp.UnitTest/AgentTest.cs | 4 +- BotSharp.UnitTest/BotSharp.UnitTest.csproj | 3 - BotSharp.UnitTest/IntentTest.cs | 23 +++ BotSharp.UnitTest/Settings/settings.bot.json | 2 +- 13 files changed, 147 insertions(+), 212 deletions(-) delete mode 100644 BotSharp.Core/Intents/ContextModelMapping.cs diff --git a/BotSharp.Core/Agents/AgentDriver.cs b/BotSharp.Core/Agents/AgentDriver.cs index 5e18394c..c100b2f8 100644 --- a/BotSharp.Core/Agents/AgentDriver.cs +++ b/BotSharp.Core/Agents/AgentDriver.cs @@ -93,6 +93,7 @@ namespace BotSharp.Core.Agents { Intent = intent.Name, Text = String.Join("", exp.Data.OrderBy(x => x.UpdatedTime).Select(x => x.Text)), + ContextHash = intent.ContextHash }; // convert entity format @@ -137,6 +138,9 @@ namespace BotSharp.Core.Agents }); }); + // remove Default Fallback Intent + trainingData.UserSays = trainingData.UserSays.Where(x => x.Intent != "Default Fallback Intent").ToList(); + return trainingData; } } diff --git a/BotSharp.Core/BotSharp.Core.csproj b/BotSharp.Core/BotSharp.Core.csproj index 9e372958..0e69260c 100644 --- a/BotSharp.Core/BotSharp.Core.csproj +++ b/BotSharp.Core/BotSharp.Core.csproj @@ -23,6 +23,10 @@ https://github.com/Oceania2018/BotSharp + + TRACE;DEBUG;MODEL_PER_CONTEXTS + + diff --git a/BotSharp.Core/Engines/Dialogflow/AgentImporterInDialogflow.cs b/BotSharp.Core/Engines/Dialogflow/AgentImporterInDialogflow.cs index 63e8f997..dc05f813 100644 --- a/BotSharp.Core/Engines/Dialogflow/AgentImporterInDialogflow.cs +++ b/BotSharp.Core/Engines/Dialogflow/AgentImporterInDialogflow.cs @@ -108,6 +108,12 @@ namespace BotSharp.Core.Engines { string expressionJson = File.ReadAllText($"{expressionFileName}"); intent.UserSays = JsonConvert.DeserializeObject>(expressionJson); + + // remove @sys.ignore + intent.UserSays.ForEach(say => + { + say.Data.Where(x => x.Meta == "@sys.ignore").ToList().ForEach(x => x.Meta = null); + }); } } diff --git a/BotSharp.Core/Engines/Rasa/RasaAi.cs b/BotSharp.Core/Engines/Rasa/RasaAi.cs index 80ffec3e..9856e5e6 100644 --- a/BotSharp.Core/Engines/Rasa/RasaAi.cs +++ b/BotSharp.Core/Engines/Rasa/RasaAi.cs @@ -2,6 +2,7 @@ using BotSharp.Core.Entities; using BotSharp.Core.Intents; using BotSharp.Core.Models; +using DotNetToolkit; using EntityFrameworkCore.BootKit; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; @@ -49,9 +50,6 @@ namespace BotSharp.Core.Engines var corpus = agent.GrabCorpus(dc); - // remove Default Fallback Intent - corpus.UserSays = corpus.UserSays.Where(x => x.Intent != "Default Fallback Intent").ToList(); - string json = JsonConvert.SerializeObject(new { rasa_nlu_data = corpus }, new JsonSerializerSettings { @@ -59,14 +57,10 @@ namespace BotSharp.Core.Engines NullValueHandling = NullValueHandling.Ignore }); -#if RASA_NLU_0_11 - rest.AddParameter("application/json", json, ParameterType.RequestBody); -#else - string trainingConfig = agent.Language == "zh" ? "config_jieba_mitie_sklearn.yml" : "config_mitie_sklearn.yml"; + string trainingConfig = agent.Language == "zh" ? "config_jieba_mitie_sklearn.yml" : "config_spacy.yml"; string body = File.ReadAllText($"{Database.ContentRootPath}{Path.DirectorySeparatorChar}Settings{Path.DirectorySeparatorChar}{trainingConfig}"); body = $"{body}\r\ndata: {json}"; rest.AddParameter("application/x-yml", body, ParameterType.RequestBody); -#endif var response = client.Execute(rest); @@ -88,47 +82,93 @@ namespace BotSharp.Core.Engines } } - public string TrainWithContexts() + public void TrainWithContexts() { var corpus = agent.GrabCorpus(dc); - string json = JsonConvert.SerializeObject(new { rasa_nlu_data = corpus }, - new JsonSerializerSettings + var client = new RestClient($"{Database.Configuration.GetSection("Rasa:Nlu").Value}"); + + var contextHashs = corpus.UserSays + .Select(x => x.ContextHash) + .Distinct() + .ToList(); + + contextHashs.ForEach(ctx => + { + var data = new RasaTrainingData { - ContractResolver = new CamelCasePropertyNamesContractResolver(), - NullValueHandling = NullValueHandling.Ignore + Entities = corpus.Entities, + UserSays = corpus.UserSays.Where(x => x.ContextHash == ctx).ToList() + }; + + // meet minimal requirement + // at least 2 different classes + int count = data.UserSays + .Select(x => x.Intent) + .Distinct().Count(); + + if (count < 2) + { + data.UserSays.Add(new RasaIntentExpression + { + Intent = "Intent2", + Text = Guid.NewGuid().ToString("N") + }); + + data.UserSays.Add(new RasaIntentExpression + { + Intent = "Intent2", + Text = Guid.NewGuid().ToString("N") + }); + } + + // at least 2 corpus per intent + data.UserSays.Select(x => x.Intent) + .Distinct() + .ToList() + .ForEach(intent => + { + if(data.UserSays.Count(x => x.Intent == intent) < 2) + { + data.UserSays.Add(new RasaIntentExpression + { + Intent = intent, + Text = Guid.NewGuid().ToString("N") + }); + } }); - var client = new RestClient($"{Database.Configuration.GetSection("Rasa:Host").Value}"); - var rest = new RestRequest("train", Method.POST); - rest.AddQueryParameter("project", agent.Id); - rest.AddParameter("application/json", json, ParameterType.RequestBody); + string json = JsonConvert.SerializeObject(new { rasa_nlu_data = data }, + new JsonSerializerSettings + { + ContractResolver = new CamelCasePropertyNamesContractResolver(), + NullValueHandling = NullValueHandling.Ignore + }); - var response = client.Execute(rest); + var rest = new RestRequest("train", Method.POST); + rest.AddQueryParameter("project", agent.Id); + rest.AddQueryParameter("model", ctx); + string trainingConfig = agent.Language == "zh" ? "config_jieba_mitie_sklearn.yml" : "config_spacy.yml"; + string body = File.ReadAllText($"{Database.ContentRootPath}{Path.DirectorySeparatorChar}Settings{Path.DirectorySeparatorChar}{trainingConfig}"); + body = $"{body}\r\ndata: {json}"; + rest.AddParameter("application/x-yml", body, ParameterType.RequestBody); - if (response.IsSuccessful) - { - var result = JObject.Parse(response.Content); + var response = client.Execute(rest); - string modelName = result["info"].Value().Split(": ")[1]; - - dc.Table().Add(new ContextModelMapping + if (response.IsSuccessful) { - AgentId = agent.Id, - ModelName = modelName, - //ContextId = contextId - }); + var result = JObject.Parse(response.Content); - return modelName; - } - else - { - var result = JObject.Parse(response.Content); + string modelName = result["info"].Value().Split(": ")[1]; + } + else + { + var result = JObject.Parse(response.Content); + Console.WriteLine(result["error"]); + result["error"].Log(); + } + }); - Console.WriteLine(result["error"]); - - return String.Empty; - } } } } diff --git a/BotSharp.Core/Engines/Rasa/RasaIntentExpression.cs b/BotSharp.Core/Engines/Rasa/RasaIntentExpression.cs index 6ab8d0a3..b3dfcd4c 100644 --- a/BotSharp.Core/Engines/Rasa/RasaIntentExpression.cs +++ b/BotSharp.Core/Engines/Rasa/RasaIntentExpression.cs @@ -1,4 +1,5 @@ -using System; +using Newtonsoft.Json; +using System; using System.Collections.Generic; using System.Text; @@ -12,7 +13,10 @@ namespace BotSharp.Core.Models public String Text { get; set; } public String Intent { get; set; } + + [JsonIgnore] public String ContextHash { get; set; } + public List Entities { get; set; } } } diff --git a/BotSharp.Core/Engines/Rasa/RasaTraningEntity.cs b/BotSharp.Core/Engines/Rasa/RasaTraningEntity.cs index 81fcf50a..67a38a28 100644 --- a/BotSharp.Core/Engines/Rasa/RasaTraningEntity.cs +++ b/BotSharp.Core/Engines/Rasa/RasaTraningEntity.cs @@ -7,6 +7,7 @@ namespace BotSharp.Core.Adapters.Rasa { public class RasaTraningEntity { + [JsonIgnore] public String EntityType { get; set; } [JsonProperty("value")] diff --git a/BotSharp.Core/Engines/RequestExtension.cs b/BotSharp.Core/Engines/RequestExtension.cs index 4266c5ae..e7bfcc68 100644 --- a/BotSharp.Core/Engines/RequestExtension.cs +++ b/BotSharp.Core/Engines/RequestExtension.cs @@ -30,7 +30,12 @@ namespace BotSharp.Core.Engines AIResponse aiResponse = new AIResponse(); Database dc = rasa.dc; +#if MODEL_PER_CONTEXTS + string model = GetModelPerContexts(rasa, request); + var result = CallRasa(rasa.agent.Id, request.Query.First(), model); +#else var result = CallRasa(rasa.agent.Id, request.Query.First(), rasa.agent.Id); +#endif RasaResponse response = result.Data; aiResponse.Id = Guid.NewGuid().ToString(); aiResponse.Lang = rasa.agent.Language; @@ -114,7 +119,7 @@ namespace BotSharp.Core.Engines }; } - response.IntentRanking = response.IntentRanking.Where(x => x.Confidence > decimal.Parse("0.1")).ToList(); + response.IntentRanking = response.IntentRanking.Where(x => x.Confidence > decimal.Parse("0.3")).ToList(); response.IntentRanking = response.IntentRanking.Where(x => intents.Select(i => i.Name).Contains(x.Name)).ToList(); // add Default Fallback Intent @@ -165,10 +170,14 @@ namespace BotSharp.Core.Engines // convert to Standard entity value if (!String.IsNullOrEmpty(p.Value) && !p.DataType.StartsWith("@sys.")) { - p.Value = agent.Entities.FirstOrDefault(x => x.Name == p.Name).Entries.FirstOrDefault((entry) => { - return entry.Value.ToLower() == p.Value.ToLower() || - entry.Synonyms.Select(synonym => synonym.Synonym.ToLower()).Contains(p.Value.ToLower()); - })?.Value; + p.Value = agent.Entities + .FirstOrDefault(x => x.Name == p.DataType.Substring(1)) + .Entries + .FirstOrDefault((entry) => + { + return entry.Value.ToLower() == p.Value.ToLower() || + entry.Synonyms.Select(synonym => synonym.Synonym.ToLower()).Contains(p.Value.ToLower()); + })?.Value; } // fixed entity per request @@ -202,11 +211,14 @@ namespace BotSharp.Core.Engines } else { - msg.Speech = msg.Speech.StartsWith("[") ? + if (msg.Speech != "[]") + { + msg.Speech = msg.Speech.StartsWith("[") ? ArrayHelper.GetRandom(msg.Speech.Substring(2, msg.Speech.Length - 4).Split("\",\"").ToList()) : msg.Speech; - msg.Speech = ReplaceParameters4Response(intentResponse.Parameters, msg.Speech); + msg.Speech = ReplaceParameters4Response(intentResponse.Parameters, msg.Speech); + } } }); } @@ -285,10 +297,8 @@ namespace BotSharp.Core.Engines return client.Execute(rest); } - public static AIResponse TextRequestPerContexts(this RasaAi rasa, AIRequest request) + private static string GetModelPerContexts(RasaAi rasa, AIRequest request) { - AIResponse aiResponse = new AIResponse(); - RasaResponse response = null; Database dc = rasa.dc; // Merge input contexts @@ -316,138 +326,9 @@ namespace BotSharp.Core.Engines }).OrderByDescending(x => x.Contexts.Count).ToList(); // query per request contexts - { - string contextId = $"{String.Join(',', contexts.Select(x => x.Name))}".GetMd5Hash(); - string modelName = dc.Table().FirstOrDefault(x => x.ContextId == contextId)?.ModelName; - var result = CallRasa(rasa.agent.Id, request.Query.First(), modelName); + var contextHashs = intents.Select(x => x.ContextHash).Distinct().ToList(); - if (result.Data.Intent != null) - { - response = result.Data; - } - } - - // Max contexts match - if (response == null) - { - foreach (var it in intents) - { - request.Contexts = it.Contexts.Select(x => new AIContext { Name = x.Name.ToLower() }) - .OrderBy(x => x.Name) - .ToList(); - string contextId = $"{String.Join(',', request.Contexts.Select(x => x.Name))}".GetMd5Hash(); - - string modelName = dc.Table().FirstOrDefault(x => x.ContextId == contextId)?.ModelName; - - var result = CallRasa(rasa.agent.Id, request.Query.First(), modelName); - - if (result.Data.Intent != null) - { - response = result.Data; - break; - } - }; - } - - var intent = (dc.Table().Where(x => x.Name == response.Intent.Name) - .Include(x => x.Responses).ThenInclude(x => x.Contexts) - .Include(x => x.Responses).ThenInclude(x => x.Parameters) - .Include(x => x.Responses).ThenInclude(x => x.Messages)).First(); - - var intentResponse = ArrayHelper.GetRandom(intent.Responses); - aiResponse.Id = Guid.NewGuid().ToString(); - aiResponse.Lang = rasa.agent.Language; - aiResponse.Status = new AIResponseStatus { }; - aiResponse.SessionId = rasa.AiConfig.SessionId; - aiResponse.Timestamp = DateTime.UtcNow; - intentResponse.Messages = intentResponse.Messages.OrderBy(x => x.UpdatedTime).ToList(); - intentResponse.Messages.ToList() - .ForEach(msg => - { - if (msg.Type == AIResponseMessageType.Custom) - { - - } - else - { - msg.Speech = msg.Speech.StartsWith("[") ? - ArrayHelper.GetRandom(msg.Speech.Substring(2, msg.Speech.Length - 4).Split("\",\"").ToList()) : - msg.Speech; - } - }); - - aiResponse.Result = new AIResponseResult - { - Source = "agent", - ResolvedQuery = request.Query.First(), - Action = intentResponse.Action, - Parameters = new Dictionary(), - Score = response.Intent.Confidence, - Metadata = new AIResponseMetadata { IntentId = intent.Id, IntentName = intent.Name }, - Fulfillment = new AIResponseFulfillment - { - Messages = intentResponse.Messages.Select(x => { - if (x.Type == AIResponseMessageType.Custom) - { - return (new - { - x.Type, - x.Payload - }) as Object; - } - else - { - return (new { x.Type, x.Speech }) as Object; - } - - }).ToList() - } - }; - - // Merge context lifespan - // override if exists, otherwise add, delete if lifespan is zero - dc.DbTran(() => - { - var sessionContexts = dc.Table().Where(x => x.ConversationId == rasa.AiConfig.SessionId).ToList(); - - // minus 1 round - sessionContexts.Where(x => !intentResponse.Contexts.Select(ctx => ctx.Name).Contains(x.Context)) - .ToList() - .ForEach(ctx => ctx.Lifespan = ctx.Lifespan - 1); - - intentResponse.Contexts.ForEach(ctx => - { - var session1 = sessionContexts.FirstOrDefault(x => x.Context == ctx.Name); - - if (session1 != null) - { - if (ctx.Lifespan == 0) - { - dc.Table().Remove(session1); - } - else - { - session1.Lifespan = ctx.Lifespan; - } - } - else - { - dc.Table().Add(new ConversationContext - { - ConversationId = rasa.AiConfig.SessionId, - Context = ctx.Name, - Lifespan = ctx.Lifespan - }); - } - }); - }); - - aiResponse.Result.Contexts = dc.Table() - .Where(x => x.ConversationId == rasa.AiConfig.SessionId) - .Select(x => new AIContext { Name = x.Context.ToLower(), Lifespan = x.Lifespan }) - .ToArray(); - - return aiResponse; + return contextHashs.FirstOrDefault(); } } } diff --git a/BotSharp.Core/Intents/ContextModelMapping.cs b/BotSharp.Core/Intents/ContextModelMapping.cs deleted file mode 100644 index 0d7cb37e..00000000 --- a/BotSharp.Core/Intents/ContextModelMapping.cs +++ /dev/null @@ -1,25 +0,0 @@ -using EntityFrameworkCore.BootKit; -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using System.Text; - -namespace BotSharp.Core.Intents -{ - [Table("Bot_ContextModelMapping")] - public class ContextModelMapping : DbRecord, IDbRecord - { - [Required] - [StringLength(36)] - public String AgentId { get; set; } - - [Required] - [StringLength(32)] - public string ContextId { get; set; } - - [Required] - [StringLength(21)] - public string ModelName { get; set; } - } -} diff --git a/BotSharp.Core/Intents/Intent.cs b/BotSharp.Core/Intents/Intent.cs index 25ee198c..162caa5d 100644 --- a/BotSharp.Core/Intents/Intent.cs +++ b/BotSharp.Core/Intents/Intent.cs @@ -36,7 +36,9 @@ namespace BotSharp.Core.Intents { get { - return $"{String.Join(',', Contexts.OrderBy(x => x.Name).Select(x => x.Name))}".GetMd5Hash(); + return Contexts == null || Contexts.Count == 0 + ? Guid.Empty.ToString("N") + : $"{String.Join(',', Contexts.OrderBy(x => x.Name).Select(x => x.Name))}".GetMd5Hash(); } } diff --git a/BotSharp.UnitTest/AgentTest.cs b/BotSharp.UnitTest/AgentTest.cs index 7c616554..766f0723 100644 --- a/BotSharp.UnitTest/AgentTest.cs +++ b/BotSharp.UnitTest/AgentTest.cs @@ -82,9 +82,7 @@ namespace BotSharp.UnitTest var rasa = new RasaAi(dc, config); - string msg = rasa.TrainWithContexts(); - - Assert.IsTrue(!String.IsNullOrEmpty(msg)); + rasa.TrainWithContexts(); } } } diff --git a/BotSharp.UnitTest/BotSharp.UnitTest.csproj b/BotSharp.UnitTest/BotSharp.UnitTest.csproj index 57854ba7..aaa14a74 100644 --- a/BotSharp.UnitTest/BotSharp.UnitTest.csproj +++ b/BotSharp.UnitTest/BotSharp.UnitTest.csproj @@ -7,11 +7,8 @@ - - - diff --git a/BotSharp.UnitTest/IntentTest.cs b/BotSharp.UnitTest/IntentTest.cs index d2c2bc83..436ccdd4 100644 --- a/BotSharp.UnitTest/IntentTest.cs +++ b/BotSharp.UnitTest/IntentTest.cs @@ -22,6 +22,29 @@ namespace BotSharp.UnitTest // Round 1 var response = rasa.TextRequest(new AIRequest { Query = new String[] { "Can you play country music?" } }); Assert.AreEqual(response.Result.Metadata.IntentName, "music.play"); + Assert.AreEqual(response.Result.Contexts.First(x => x.Name == "music-player-control").Lifespan, 3); + Assert.AreEqual(response.Result.Contexts.First(x => x.Name == "play-music").Lifespan, 5); + Assert.AreEqual(response.Result.Parameters.First(x => x.Key == "genre").Value, "country"); + + // Round 2 + response = rasa.TextRequest(new AIRequest { Query = new String[] { "pause it" } }); + Assert.AreEqual(response.Result.Metadata.IntentName, "music_player_control.pause"); + Assert.AreEqual(response.Result.Contexts.First(x => x.Name == "music-player-control").Lifespan, 3); + Assert.AreEqual(response.Result.Contexts.First(x => x.Name == "play-music").Lifespan, 4); + + // Round 3 + response = rasa.TextRequest(new AIRequest { Query = new String[] { "continue" } }); + Assert.AreEqual(response.Result.Metadata.IntentName, "music_player_control.resume"); + Assert.AreEqual(response.Result.Contexts.First(x => x.Name == "music-player-control").Lifespan, 3); + Assert.AreEqual(response.Result.Contexts.First(x => x.Name == "play-music").Lifespan, 3); + + // Round 4 + response = rasa.TextRequest(new AIRequest { Query = new String[] { "play Hard Times by David Newman" } }); + Assert.AreEqual(response.Result.Metadata.IntentName, "music.play"); + Assert.AreEqual(response.Result.Contexts.First(x => x.Name == "music-player-control").Lifespan, 3); + Assert.AreEqual(response.Result.Contexts.First(x => x.Name == "play-music").Lifespan, 5); + Assert.AreEqual(response.Result.Parameters.First(x => x.Key == "song").Value, "Hard Times"); + Assert.AreEqual(response.Result.Parameters.First(x => x.Key == "artist").Value, "David Newman"); } } } diff --git a/BotSharp.UnitTest/Settings/settings.bot.json b/BotSharp.UnitTest/Settings/settings.bot.json index 1e115890..596c6c28 100644 --- a/BotSharp.UnitTest/Settings/settings.bot.json +++ b/BotSharp.UnitTest/Settings/settings.bot.json @@ -1,6 +1,6 @@ { "Rasa": { - "Nlu": "http://localhost:5000" + "Nlu": "http://gtx.local:5000" }, "BotSharpAi": { From cc36b8bd01be453651829b41b0f6b407260ff137 Mon Sep 17 00:00:00 2001 From: Oceania2018 Date: Tue, 19 Jun 2018 07:25:19 -0500 Subject: [PATCH 4/5] fix resposne message parameter --- BotSharp.Core/Engines/RequestExtension.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/BotSharp.Core/Engines/RequestExtension.cs b/BotSharp.Core/Engines/RequestExtension.cs index e7bfcc68..b271f9ea 100644 --- a/BotSharp.Core/Engines/RequestExtension.cs +++ b/BotSharp.Core/Engines/RequestExtension.cs @@ -228,7 +228,11 @@ namespace BotSharp.Core.Engines var reg = new Regex(@"\$\w+"); reg.Matches(text).ToList().ForEach(token => { - text = text.Replace(token.Value, parameters.FirstOrDefault(x => x.Name == token.Value.Substring(1))?.Value.ToString()); + var parameter = parameters.FirstOrDefault(x => x.Name == token.Value.Substring(1)); + if(parameter != null) + { + text = text.Replace(token.Value, parameter?.Value?.ToString()); + } }); return text; From e4fe4b2a1e00c499ff370cefb6663b46af248755 Mon Sep 17 00:00:00 2001 From: "haiping008@gmail.com" Date: Thu, 21 Jun 2018 14:14:06 -0500 Subject: [PATCH 5/5] fix missing parameter promote --- BotSharp.Core/Engines/Rasa/RasaAi.cs | 20 ++++++++++++--- BotSharp.Core/Engines/RequestExtension.cs | 30 +++++++++++++++++------ 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/BotSharp.Core/Engines/Rasa/RasaAi.cs b/BotSharp.Core/Engines/Rasa/RasaAi.cs index 9856e5e6..42d23ab2 100644 --- a/BotSharp.Core/Engines/Rasa/RasaAi.cs +++ b/BotSharp.Core/Engines/Rasa/RasaAi.cs @@ -85,7 +85,6 @@ namespace BotSharp.Core.Engines public void TrainWithContexts() { var corpus = agent.GrabCorpus(dc); - var client = new RestClient($"{Database.Configuration.GetSection("Rasa:Nlu").Value}"); var contextHashs = corpus.UserSays @@ -95,10 +94,25 @@ namespace BotSharp.Core.Engines contextHashs.ForEach(ctx => { + var common_examples = corpus.UserSays.Where(x => x.ContextHash == ctx || x.ContextHash == Guid.Empty.ToString("N")).ToList(); + + // assemble entity and synonyms + var usedEntities = new List(); + common_examples.ForEach(x => + { + if (x.Entities != null) + { + usedEntities.AddRange(x.Entities.Select(y => y.Entity)); + } + }); + usedEntities = usedEntities.Distinct().ToList(); + + var entity_synonyms = corpus.Entities.Where(x => usedEntities.Contains(x.EntityType)).ToList(); + var data = new RasaTrainingData { - Entities = corpus.Entities, - UserSays = corpus.UserSays.Where(x => x.ContextHash == ctx).ToList() + Entities = entity_synonyms, + UserSays = common_examples }; // meet minimal requirement diff --git a/BotSharp.Core/Engines/RequestExtension.cs b/BotSharp.Core/Engines/RequestExtension.cs index b271f9ea..7ca82f5e 100644 --- a/BotSharp.Core/Engines/RequestExtension.cs +++ b/BotSharp.Core/Engines/RequestExtension.cs @@ -44,10 +44,10 @@ namespace BotSharp.Core.Engines aiResponse.Timestamp = DateTime.UtcNow; var intentResponse = HandleIntentPerContextIn(rasa, request, result.Data); - bool missedRequiredField = HandleParameter(rasa.agent, intentResponse, response, request); + HandleParameter(rasa.agent, intentResponse, response, request); HandleMessage(intentResponse); - + aiResponse.Result = new AIResponseResult { Source = "agent", @@ -137,7 +137,7 @@ namespace BotSharp.Core.Engines var intent = (dc.Table().Where(x => x.AgentId == rasa.agent.Id && x.Name == response.Intent.Name) .Include(x => x.Responses).ThenInclude(x => x.Contexts) - .Include(x => x.Responses).ThenInclude(x => x.Parameters) + .Include(x => x.Responses).ThenInclude(x => x.Parameters).ThenInclude(x => x.Prompts) .Include(x => x.Responses).ThenInclude(x => x.Messages)).First(); var intentResponse = ArrayHelper.GetRandom(intent.Responses); @@ -155,9 +155,9 @@ namespace BotSharp.Core.Engines /// /// /// Required field is missed - private static bool HandleParameter(Agent agent, IntentResponse intentResponse, RasaResponse response, AIRequest request) + private static void HandleParameter(Agent agent, IntentResponse intentResponse, RasaResponse response, AIRequest request) { - if (intentResponse == null) return false; + if (intentResponse == null) return; intentResponse.Parameters.ForEach(p => { string query = request.Query.First(); @@ -193,15 +193,29 @@ namespace BotSharp.Core.Engines } } }); - - return intentResponse.Parameters.Any(x => x.Required && String.IsNullOrEmpty(x.Value)); } private static void HandleMessage(IntentResponse intentResponse) { if (intentResponse == null) return; - intentResponse.Messages = intentResponse.Messages.OrderBy(x => x.UpdatedTime).ToList(); + var missingRequiredParameter = intentResponse.Parameters.FirstOrDefault(x => x.Required && String.IsNullOrEmpty(x.Value)); + if (missingRequiredParameter != null) + { + intentResponse.Messages = new List { + new IntentResponseMessage { + Type = AIResponseMessageType.Text, + Speech = ArrayHelper.GetRandom(missingRequiredParameter.Prompts).Prompt, + IntentResponseId = intentResponse.Id, + UpdatedTime = DateTime.UtcNow + } + }; + } + else + { + intentResponse.Messages = intentResponse.Messages.OrderBy(x => x.UpdatedTime).ToList(); + } + intentResponse.Messages.ToList() .ForEach(msg => {