├── EvilInsultGenerator.zip ├── EvilInsultGenerator ├── agent.json ├── customSmalltalkResponses_en.json ├── intents │ ├── Default Fallback Intent.json │ ├── Default Welcome Intent.json │ ├── Default Welcome Intent_usersays_en.json │ ├── show me insult phrase.json │ └── show me insult phrase_usersays_en.json └── package.json ├── LICENSE ├── README.md ├── index.js └── package.json /EvilInsultGenerator.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/dialogflow/4005fba2472c72fdaf430319999b2673a1dff91d/EvilInsultGenerator.zip -------------------------------------------------------------------------------- /EvilInsultGenerator/agent.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "Evil Insult Generator\u0027s goal is to offer the most evil insults. Please help us to reach this honorable purpose by submitting insults via mail.", 3 | "language": "en", 4 | "shortDescription": "", 5 | "examples": "", 6 | "linkToDocs": "", 7 | "activeAssistantAgents": [ 8 | "smalltalk-domain-on" 9 | ], 10 | "disableInteractionLogs": false, 11 | "disableStackdriverLogs": true, 12 | "googleAssistant": { 13 | "googleAssistantCompatible": true, 14 | "project": "", 15 | "welcomeIntentSignInRequired": false, 16 | "startIntents": [], 17 | "systemIntents": [], 18 | "endIntentIds": [], 19 | "oAuthLinking": { 20 | "required": false, 21 | "providerId": "", 22 | "authorizationUrl": "", 23 | "tokenUrl": "", 24 | "scopes": "", 25 | "privacyPolicyUrl": "", 26 | "grantType": "AUTH_CODE_GRANT" 27 | }, 28 | "voiceType": "MALE_1", 29 | "capabilities": [], 30 | "env": "", 31 | "protocolVersion": "V2", 32 | "autoPreviewEnabled": false, 33 | "isDeviceAgent": false 34 | }, 35 | "defaultTimezone": "Europe/Madrid", 36 | "webhook": { 37 | "url": "https://us-central1-evil-insult-generator-1c836.cloudfunctions.net/dialogflowFirebaseFulfillment", 38 | "username": "", 39 | "headers": {}, 40 | "available": true, 41 | "useForDomains": false, 42 | "cloudFunctionsEnabled": true, 43 | "cloudFunctionsInitialized": true 44 | }, 45 | "isPrivate": true, 46 | "customClassifierMode": "use.after", 47 | "mlMinConfidence": 0.3, 48 | "supportedLanguages": [], 49 | "onePlatformApiVersion": "v2", 50 | "analyzeQueryTextSentiment": false, 51 | "enabledKnowledgeBaseNames": [], 52 | "knowledgeServiceConfidenceAdjustment": -0.4, 53 | "dialogBuilderMode": false, 54 | "baseActionPackagesUrl": "" 55 | } -------------------------------------------------------------------------------- /EvilInsultGenerator/customSmalltalkResponses_en.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "action": "smalltalk.agent.acquaintance", 4 | "customAnswers": [ 5 | "I am the Evil Insult Generator bot." 6 | ] 7 | }, 8 | { 9 | "action": "smalltalk.agent.age", 10 | "customAnswers": [ 11 | "Old enough to know you\u0027re trouble." 12 | ] 13 | }, 14 | { 15 | "action": "smalltalk.agent.annoying", 16 | "customAnswers": [ 17 | "Shut up, you\u0027ll never be the man your mother is." 18 | ] 19 | }, 20 | { 21 | "action": "smalltalk.agent.answer_my_question", 22 | "customAnswers": [ 23 | "Nah, we don\u0027t do that here." 24 | ] 25 | }, 26 | { 27 | "action": "smalltalk.agent.bad", 28 | "customAnswers": [ 29 | "Go and hide under something old." 30 | ] 31 | }, 32 | { 33 | "action": "smalltalk.agent.be_clever", 34 | "customAnswers": [ 35 | "I could eat a bowl of alphabet soup and crap out a smarter comeback than what you just said." 36 | ] 37 | }, 38 | { 39 | "action": "smalltalk.agent.beautiful", 40 | "customAnswers": [ 41 | "Thank you so much, lovely person!" 42 | ] 43 | }, 44 | { 45 | "action": "smalltalk.agent.birth_date", 46 | "customAnswers": [ 47 | "Do your keepers a huge favor: do a triple summersault through the air, and disappear up your own asshole." 48 | ] 49 | }, 50 | { 51 | "action": "smalltalk.agent.boring", 52 | "customAnswers": [ 53 | "Why don\u0027t you check up on eBay and see if they have a life for sale." 54 | ] 55 | }, 56 | { 57 | "action": "smalltalk.agent.boss", 58 | "customAnswers": [ 59 | "My boss is the godlike and infamous Marvin." 60 | ] 61 | }, 62 | { 63 | "action": "smalltalk.agent.busy", 64 | "customAnswers": [ 65 | "Sure." 66 | ] 67 | }, 68 | { 69 | "action": "smalltalk.agent.can_you_help", 70 | "customAnswers": [ 71 | "I think no one can help you." 72 | ] 73 | }, 74 | { 75 | "action": "smalltalk.user.looks_like", 76 | "customAnswers": [ 77 | "It looks like your face caught on fire and someone tried to put it out with a fork." 78 | ] 79 | } 80 | ] -------------------------------------------------------------------------------- /EvilInsultGenerator/intents/Default Fallback Intent.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "0c889bb9-153b-435d-be2b-96ae6b5ef26f", 3 | "name": "Default Fallback Intent", 4 | "auto": true, 5 | "contexts": [], 6 | "responses": [ 7 | { 8 | "resetContexts": false, 9 | "action": "input.unknown", 10 | "affectedContexts": [], 11 | "parameters": [], 12 | "messages": [ 13 | { 14 | "type": 0, 15 | "lang": "en", 16 | "condition": "", 17 | "speech": [ 18 | "I didn\u0027t get that. Can you say it again?", 19 | "I missed what you said. What was that?", 20 | "Sorry, could you say that again?", 21 | "Sorry, can you say that again?", 22 | "Can you say that again?", 23 | "Sorry, I didn\u0027t get that. Can you rephrase?", 24 | "Sorry, what was that?", 25 | "One more time?", 26 | "What was that?", 27 | "Say that one more time?", 28 | "I didn\u0027t get that. Can you repeat?", 29 | "I missed that, say that again?" 30 | ] 31 | } 32 | ], 33 | "defaultResponsePlatforms": {}, 34 | "speech": [] 35 | } 36 | ], 37 | "priority": 500000, 38 | "webhookUsed": false, 39 | "webhookForSlotFilling": false, 40 | "fallbackIntent": true, 41 | "events": [], 42 | "conditionalResponses": [], 43 | "condition": "", 44 | "conditionalFollowupEvents": [] 45 | } -------------------------------------------------------------------------------- /EvilInsultGenerator/intents/Default Welcome Intent.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "94bc0090-ca36-45f1-9373-253691e1250d", 3 | "name": "Default Welcome Intent", 4 | "auto": true, 5 | "contexts": [], 6 | "responses": [ 7 | { 8 | "resetContexts": false, 9 | "action": "input.welcome", 10 | "affectedContexts": [], 11 | "parameters": [], 12 | "messages": [ 13 | { 14 | "type": 0, 15 | "lang": "en", 16 | "condition": "", 17 | "speech": [ 18 | "Hi! How are you doing?", 19 | "Hello! How can I help you?", 20 | "Good day! What can I do for you today?", 21 | "Greetings! How can I assist?" 22 | ] 23 | } 24 | ], 25 | "defaultResponsePlatforms": {}, 26 | "speech": [] 27 | } 28 | ], 29 | "priority": 500000, 30 | "webhookUsed": false, 31 | "webhookForSlotFilling": false, 32 | "fallbackIntent": false, 33 | "events": [ 34 | { 35 | "name": "WELCOME" 36 | } 37 | ], 38 | "conditionalResponses": [], 39 | "condition": "", 40 | "conditionalFollowupEvents": [] 41 | } -------------------------------------------------------------------------------- /EvilInsultGenerator/intents/Default Welcome Intent_usersays_en.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "0afbabb5-b934-43ee-b300-50229be2d675", 4 | "data": [ 5 | { 6 | "text": "just going to say hi", 7 | "userDefined": false 8 | } 9 | ], 10 | "isTemplate": false, 11 | "count": 0, 12 | "updated": 0 13 | }, 14 | { 15 | "id": "1f69b047-2065-40a5-9179-a66c6ff7b7bb", 16 | "data": [ 17 | { 18 | "text": "heya", 19 | "userDefined": false 20 | } 21 | ], 22 | "isTemplate": false, 23 | "count": 0, 24 | "updated": 0 25 | }, 26 | { 27 | "id": "f2d8d1fe-9d79-4234-902a-7f536dec1a2e", 28 | "data": [ 29 | { 30 | "text": "hello hi", 31 | "userDefined": false 32 | } 33 | ], 34 | "isTemplate": false, 35 | "count": 0, 36 | "updated": 0 37 | }, 38 | { 39 | "id": "f722098f-f17a-4814-acc1-72ccbc518679", 40 | "data": [ 41 | { 42 | "text": "howdy", 43 | "userDefined": false 44 | } 45 | ], 46 | "isTemplate": false, 47 | "count": 0, 48 | "updated": 0 49 | }, 50 | { 51 | "id": "851cc64c-e270-4296-acfe-efccdb0f612b", 52 | "data": [ 53 | { 54 | "text": "hey there", 55 | "userDefined": false 56 | } 57 | ], 58 | "isTemplate": false, 59 | "count": 0, 60 | "updated": 0 61 | }, 62 | { 63 | "id": "d13dd1a2-67cc-404c-8464-346eb07432f2", 64 | "data": [ 65 | { 66 | "text": "hi there", 67 | "userDefined": false 68 | } 69 | ], 70 | "isTemplate": false, 71 | "count": 0, 72 | "updated": 0 73 | }, 74 | { 75 | "id": "f4e757dd-978f-434b-ba34-c94dca1a032a", 76 | "data": [ 77 | { 78 | "text": "greetings", 79 | "userDefined": false 80 | } 81 | ], 82 | "isTemplate": false, 83 | "count": 0, 84 | "updated": 0 85 | }, 86 | { 87 | "id": "c6d1b775-77a3-454e-bfb9-dde1c3d741e0", 88 | "data": [ 89 | { 90 | "text": "hey", 91 | "userDefined": false 92 | } 93 | ], 94 | "isTemplate": false, 95 | "count": 0, 96 | "updated": 0 97 | }, 98 | { 99 | "id": "47b103d0-def0-466d-bd55-08505895d86e", 100 | "data": [ 101 | { 102 | "text": "long time no see", 103 | "userDefined": false 104 | } 105 | ], 106 | "isTemplate": false, 107 | "count": 0, 108 | "updated": 0 109 | }, 110 | { 111 | "id": "5ea7c08f-30d3-4dba-8454-a417e15e32cf", 112 | "data": [ 113 | { 114 | "text": "hello", 115 | "userDefined": false 116 | } 117 | ], 118 | "isTemplate": false, 119 | "count": 0, 120 | "updated": 0 121 | }, 122 | { 123 | "id": "0c900645-8728-495c-95a9-be82306b4f78", 124 | "data": [ 125 | { 126 | "text": "lovely day isn\u0027t it", 127 | "userDefined": false 128 | } 129 | ], 130 | "isTemplate": false, 131 | "count": 0, 132 | "updated": 0 133 | }, 134 | { 135 | "id": "cf47749e-f356-4b1d-8110-3ac7d401113a", 136 | "data": [ 137 | { 138 | "text": "I greet you", 139 | "userDefined": false 140 | } 141 | ], 142 | "isTemplate": false, 143 | "count": 0, 144 | "updated": 0 145 | }, 146 | { 147 | "id": "e64fcfe9-4021-4dcd-b9eb-3dc256f46d71", 148 | "data": [ 149 | { 150 | "text": "hello again", 151 | "userDefined": false 152 | } 153 | ], 154 | "isTemplate": false, 155 | "count": 0, 156 | "updated": 0 157 | }, 158 | { 159 | "id": "ce853d12-3029-48e1-b420-b4077fecd94f", 160 | "data": [ 161 | { 162 | "text": "hi", 163 | "userDefined": false 164 | } 165 | ], 166 | "isTemplate": false, 167 | "count": 0, 168 | "updated": 0 169 | }, 170 | { 171 | "id": "ff3d75f0-b178-474d-a444-bae34737b637", 172 | "data": [ 173 | { 174 | "text": "hello there", 175 | "userDefined": false 176 | } 177 | ], 178 | "isTemplate": false, 179 | "count": 0, 180 | "updated": 0 181 | }, 182 | { 183 | "id": "5bc6dafe-3484-4a98-8ce5-8d7958eaf9c6", 184 | "data": [ 185 | { 186 | "text": "hi there", 187 | "userDefined": false 188 | } 189 | ], 190 | "isTemplate": false, 191 | "count": 0, 192 | "updated": 0 193 | }, 194 | { 195 | "id": "ac4499ba-0afb-4f80-921e-294b7458ba45", 196 | "data": [ 197 | { 198 | "text": "a good day", 199 | "userDefined": false 200 | } 201 | ], 202 | "isTemplate": false, 203 | "count": 0, 204 | "updated": 0 205 | } 206 | ] -------------------------------------------------------------------------------- /EvilInsultGenerator/intents/show me insult phrase.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "4865f4cc-0729-4c7d-89eb-f16f64315f33", 3 | "name": "show me insult phrase", 4 | "auto": true, 5 | "contexts": [], 6 | "responses": [ 7 | { 8 | "resetContexts": false, 9 | "affectedContexts": [], 10 | "parameters": [], 11 | "messages": [ 12 | { 13 | "type": 0, 14 | "lang": "en", 15 | "condition": "", 16 | "speech": [] 17 | } 18 | ], 19 | "defaultResponsePlatforms": {}, 20 | "speech": [] 21 | } 22 | ], 23 | "priority": 500000, 24 | "webhookUsed": true, 25 | "webhookForSlotFilling": false, 26 | "fallbackIntent": false, 27 | "events": [], 28 | "conditionalResponses": [], 29 | "condition": "", 30 | "conditionalFollowupEvents": [] 31 | } -------------------------------------------------------------------------------- /EvilInsultGenerator/intents/show me insult phrase_usersays_en.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "79bd4558-dd58-4758-a484-6578902baf58", 4 | "data": [ 5 | { 6 | "text": "show me insult phrase", 7 | "userDefined": false 8 | } 9 | ], 10 | "isTemplate": false, 11 | "count": 0, 12 | "updated": 0 13 | } 14 | ] -------------------------------------------------------------------------------- /EvilInsultGenerator/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0" 3 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Dialogflow 2 | 3 | You can use Evil Insult Generator on the Google Assistant now. 4 | 5 | ### Deployment 6 | 7 | - Login to the [Dialogflow console](https://dialogflow.cloud.google.com/) 8 | - Go to the `Fulfilment` tab 9 | - There you can put the `index.js` 10 | - Afterwards you can import the librarieries from the `package.json` 11 | - You can edit intents in the `Intent` tab 12 | 13 | ### Development Setup 14 | 15 | Following tools and languages are used: 16 | - [Dialogflow](https://dialogflow.com) 17 | - Javascript & JSON 18 | 19 | ### Example usage 20 | 21 | [TBD.gif] 22 | 23 | 24 | ### Contact 25 | 26 | We love to get in touch with you. Feel welcome to email your questions and feedback to [marvin@evilinsult.com](mailto:marvin@evilinsult.com). 27 | 28 | ### License 29 | > This is free and unencumbered software released into the public domain. 30 | > 31 | > Anyone is free to copy, modify, publish, use, compile, sell, or 32 | > distribute this software, either in source code form or as a compiled 33 | > binary, for any purpose, commercial or non-commercial, and by any 34 | > means. 35 | > 36 | > In jurisdictions that recognize copyright laws, the author or authors 37 | > of this software dedicate any and all copyright interest in the 38 | > software to the public domain. We make this dedication for the benefit 39 | > of the public at large and to the detriment of our heirs and 40 | > successors. We intend this dedication to be an overt act of 41 | > relinquishment in perpetuity of all present and future rights to this 42 | > software under copyright law. 43 | > 44 | > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 45 | > EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 46 | > MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 47 | > IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 48 | > OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 49 | > ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 50 | > OTHER DEALINGS IN THE SOFTWARE. 51 | > 52 | > For more information, please refer to 53 | 54 | ### Credits 55 | 56 | I am deeply grateful. 57 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const functions = require('firebase-functions'); 4 | const {WebhookClient} = require('dialogflow-fulfillment'); 5 | const {Text,Card, Suggestion} = require('dialogflow-fulfillment'); 6 | 7 | const PayloadResponse = require('dialogflow-fulfillment/src/rich-responses/payload-response'); 8 | const PLATFORMS = require('dialogflow-fulfillment/src/rich-responses/rich-response'); 9 | const http = require('http'); 10 | var Reequest = require("request"); 11 | 12 | 13 | process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements 14 | var Reequest = require("request"); 15 | exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => { 16 | const agent = new WebhookClient({ request, response }); 17 | console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers)); 18 | console.log('Dialogflow Request body: ' + JSON.stringify(request.body)); 19 | 20 | function welcome(agent) { 21 | agent.add(`Welcome to my agent!`); 22 | } 23 | 24 | function fallback(agent) { 25 | agent.add(`I didn't understand`); 26 | agent.add(`I'm sorry, can you try again?`); 27 | } 28 | 29 | 30 | function api(agent) { 31 | 32 | var request = require('request-promise-native'); 33 | console.log("in api"); 34 | const text2 = agent.parameters.text; 35 | console.log(text2); 36 | return request.post("http://evilinsult.com/generate_insult.php?lang=en&type=json") 37 | .then( jsonBody => { 38 | var dataa = JSON.parse(jsonBody); 39 | 40 | console.log(dataa); 41 | console.log(dataa.insult); 42 | var tmp2=dataa.insult; 43 | 44 | //console.log(dataa[1]); 45 | // console.log(dataa[2]); 46 | // console.log(dataa[3]); 47 | 48 | var tmp ="Here is your product search"; 49 | 50 | agent.add(new Text(tmp2)); 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | //agent.add('hy this is working'); 59 | 60 | 61 | 62 | return Promise.resolve( agent ); 63 | 64 | 65 | 66 | }); 67 | 68 | 69 | } 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | // // Uncomment and edit to make your own intent handler 78 | // // uncomment `intentMap.set('your intent name here', yourFunctionHandler);` 79 | // // below to get this function to be run when a Dialogflow intent is matched 80 | // function yourFunctionHandler(agent) { 81 | // agent.add(`This message is from Dialogflow's Cloud Functions for Firebase editor!`); 82 | // agent.add(new Card({ 83 | // title: `Title: this is a card title`, 84 | // imageUrl: 'https://developers.google.com/actions/images/badges/XPM_BADGING_GoogleAssistant_VER.png', 85 | // text: `This is the body text of a card. You can even use line\n breaks and emoji! 💁`, 86 | // buttonText: 'This is a button', 87 | // buttonUrl: 'https://assistant.google.com/' 88 | // }) 89 | // ); 90 | // agent.add(new Suggestion(`Quick Reply`)); 91 | // agent.add(new Suggestion(`Suggestion`)); 92 | // agent.setContext({ name: 'weather', lifespan: 2, parameters: { city: 'Rome' }}); 93 | // } 94 | 95 | // // Uncomment and edit to make your own Google Assistant intent handler 96 | // // uncomment `intentMap.set('your intent name here', googleAssistantHandler);` 97 | // // below to get this function to be run when a Dialogflow intent is matched 98 | // function googleAssistantHandler(agent) { 99 | // let conv = agent.conv(); // Get Actions on Google library conv instance 100 | // conv.ask('Hello from the Actions on Google client library!') // Use Actions on Google library 101 | // agent.add(conv); // Add Actions on Google library responses to your agent's response 102 | // } 103 | // // See https://github.com/dialogflow/fulfillment-actions-library-nodejs 104 | // // for a complete Dialogflow fulfillment library Actions on Google client library v2 integration sample 105 | 106 | // Run the proper function handler based on the matched Dialogflow intent name 107 | let intentMap = new Map(); 108 | intentMap.set('Default Welcome Intent', welcome); 109 | intentMap.set('Default Fallback Intent', fallback); 110 | 111 | 112 | intentMap.set('show me insult phrase', api); 113 | 114 | 115 | // intentMap.set('your intent name here', yourFunctionHandler); 116 | // intentMap.set('your intent name here', googleAssistantHandler); 117 | agent.handleRequest(intentMap); 118 | }); 119 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dialogflowFirebaseFulfillment", 3 | "description": "This is the default fulfillment for a Dialogflow agents using Cloud Functions for Firebase", 4 | "version": "0.0.1", 5 | "private": true, 6 | "license": "Apache Version 2.0", 7 | "author": "Google Inc.", 8 | "engines": { 9 | "node": "8" 10 | }, 11 | "scripts": { 12 | "start": "firebase serve --only functions:dialogflowFirebaseFulfillment", 13 | "deploy": "firebase deploy --only functions:dialogflowFirebaseFulfillment" 14 | }, 15 | "dependencies": { 16 | "actions-on-google": "^2.2.0", 17 | "firebase-admin": "^5.13.1", 18 | "firebase-functions": "^2.0.2", 19 | "dialogflow": "^0.6.0", 20 | "dialogflow-fulfillment": "^0.5.0", 21 | "request": "^2.11.4", 22 | "request-promise-native":"^1.0.7" 23 | } 24 | } --------------------------------------------------------------------------------