-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
186 lines (160 loc) · 9.83 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
'use strict';
process.env.DEBUG = 'actions-on-google:*';
const Assistant = require('actions-on-google').ApiAiAssistant;
const fs = require('fs')
const request = require('request');
const path = require('path')
const NAME_ACTION = 'build_phrase';
const chatbase_api_key = '****'
const verifier = require('alexa-verifier')
function generatePhrase(){
var words, wordTypes, phrase, wordCount, rand, wordType, wt;
words = {};
phrase = "";
wordTypes = [
'intros',
'adverbs',
'verbs',
'adjectives',
'nouns'
]; // Order matters
words['intros'] = {"data":["I don't want to derail the meeting but I think we need to", "If you ask me, I think we should", "The key take away here is that we need to", "Does this"]};
words['adverbs'] = {"data":["appropriately","assertively","authoritatively","collaboratively","compellingly","competently","completely","continually","conveniently","credibly","distinctively","dramatically","dynamically","efficiently","energistically","enthusiastically","globally","holisticly","interactively","intrinsicly","monotonectally","objectively","phosfluorescently","proactively","professionally","progressively","quickly","rapidiously","seamlessly","synergistically","uniquely"]};
words['verbs'] = {"data":["actualize","administrate","aggregate","architect","benchmark","brand","build","communicate","conceptualize","coordinate","create","cultivate","customize","deliver","deploy","develop","disintermediate","disseminate","drive","embrace","e-enable","empower","enable","engage","engineer","enhance","envisioneer","evisculate","evolve","expedite","exploit","extend","fabricate","facilitate","fashion","formulate","foster","generate","grow","harness","impact","implement","incentivize","incubate","initiate","innovate","integrate","iterate","leverage existing","leverage other's","maintain","matrix","maximize","mesh","monetize","morph","myocardinate","negotiate","network","optimize","orchestrate","parallel task","plagiarize","pontificate","predominate","procrastinate","productivate","productize","promote","provide access to","pursue","recaptiualize","reconceptualize","redefine","re-engineer","reintermediate","reinvent","repurpose","restore","revolutionize","scale","seize","simplify","strategize","streamline","supply","syndicate","synergize","synthesize","target","transform","transition","underwhelm","unleash","utilize","visualize","whiteboard"]};
words['adjectives'] = {"data":["24/7","24/365","accelerated","accurate","adaptive","alternative","an expanded array of","B2B","B2C","backend","backward-compatible","best-of-breed","bleeding-edge","bricks-and-clicks","business","clicks-and-mortar","client-based","client-centered","client-centric","client-focused","collaborative","compelling","competitive","cooperative","corporate","cost effective","covalent","cross functional","cross-media","cross-platform","cross-unit","customer directed","customized","cutting-edge","distinctive","distributed","diverse","dynamic","e-business","economically sound","effective","efficient","emerging","empowered","enabled","end-to-end","enterprise","enterprise-wide","equity invested","error-free","ethical","excellent","exceptional","extensible","extensive","flexible","focused","frictionless","front-end","fully researched","fully tested","functional","functionalized","future-proof","global","go forward","goal-oriented","granular","high standards in","high-payoff","high-quality","highly efficient","holistic","impactful","inexpensive","innovative","installed base","integrated","interactive","interdependent","intermandated","interoperable","intuitive","just in time","leading-edge","leveraged","long-term high-impact","low-risk high-yield","magnetic","maintainable","market positioning","market-driven","mission-critical","multidisciplinary","multifunctional","multimedia based","next-generation","one-to-one","open-source","optimal","orthogonal","out-of-the-box","pandemic","parallel","performance based","plug-and-play","premier","premium","principle-centered","proactive","process-centric","professional","progressive","prospective","quality","real-time","reliable","resource sucking","resource maximizing","resource-leveling","revolutionary","robust","scalable","seamless","stand-alone","standardized","standards compliant","state of the art","sticky","strategic","superior","sustainable","synergistic","tactical","team building","team driven","technically sound","timely","top-line","transparent","turnkey","ubiquitous","unique","user-centric","user friendly","value-added","vertical","viral","virtual","visionary","web-enabled","wireless","world-class","worldwide"]};
words['nouns'] = {"data":["action items","alignments","applications","architectures","bandwidth","benefits","best practices","blamestorming","cadence","catalysts for change","channels","collaboration and idea-sharing","communities","content","convergence","core competencies","creative","customer service","data","deliverables","e-business","e-commerce","e-markets","e-tailers","e-services","experiences","expertise","functionalities","growth strategies","human capital","ideas","imperatives","infomediaries","information","infrastructures","initiatives","innovation","intellectual capital","interfaces","internal or organic sources","leadership","leadership skills","manufactured products","markets","materials","meta-services","methodologies","methods of empowerment","metrics","mindshare","models","networks","niches","niche markets","offline","opportunities","outsidethebox thinking","outsourcing","paradigms","partnerships","platforms","portals","potentialities","process improvements","processes","products","quality vectors","relationships","resources","results","ROI","scenarios","schemas","services","solutions","sources","strategic theme areas","supply chains","synergy","systems","technologies","technology","testing procedures","total linkage","upshot","users","value","vortals","web-readiness","web services","win-win"]};
for (var i in wordTypes) {
wt = wordTypes[i];
wordCount = words[wt]['data'].length;
rand = Math.round(Math.random() * (wordCount - 1));
phrase = phrase + words[wt]['data'][rand] + " ";
}
return phrase;
}
// [START ActionsValueAdder]
exports.actionsValueAdder = (req, res) => {
const assistant = new Assistant({request: req, response: res});
var q = '';
try{
q = req.body.result.resolvedQuery;
}catch(e){
q = '';
}
var formData = {
api_key: chatbase_api_key,
type: "user",
user_id: req.body.originalRequest.data.user.user_id,
time_stamp: (new Date).getTime(),
platform: "Google-Home",
message: q,
not_handled: false
}
request.post('https://chatbase-area120.appspot.com/api/message').form(formData);
function makePhrase (assistant) {
assistant.tell('<speak>'
+ generatePhrase()
+ '<audio src="https://actions.google.com/sounds/v1/office/click_continuous.ogg"></audio>'
+ '</speak>');
}
let actionMap = new Map();
actionMap.set(NAME_ACTION, makePhrase);
actionMap.set('input.unknown', makePhrase);
assistant.handleRequest(actionMap);
};
// [END ActionsValueAdder]
// [START SlackValueAdder]
exports.slackValueAdder = (req, res) => {
return Promise.resolve()
.then(() => {
if (req.method !== 'POST') {
const error = new Error('Only POST requests are accepted');
error.code = 405;
throw error;
}
})
.then((response) => {
var formData = {
api_key: chatbase_api_key,
type: "user",
user_id: req.body.user_id,
time_stamp: (new Date).getTime(),
platform: "Slack",
message: req.body.text,
not_handled: false
}
// Send the formatted message back to Slack
if(req.body.text == 'help') {
res.json({
response_type: 'in_channel',
text: "It is as simple as typing `/addvalue`. Type that command in any DM or channel and I'll generate some random jargon for you to use in your next meeting.",
attachments: []
});
} else {
res.json({
response_type: 'in_channel',
text: generatePhrase(),
attachments: []
});
}
request.post('https://chatbase-area120.appspot.com/api/message').form(formData);
})
.catch((err) => {
console.error(err);
res.status(err.code || 500).send(err);
return Promise.reject(err);
});
};
// [END SlackValueAdder]
// [START AlexaValueAdder]
exports.alexaValueAdder = (req, res) => {
var formData = {
api_key: chatbase_api_key,
type: "user",
user_id: req.body.session.user.userId,
time_stamp: (new Date).getTime(),
platform: "Alexa",
message: "",
not_handled: false
}
request.post('https://chatbase-area120.appspot.com/api/message').form(formData);
// req.body.timestamp = 0;
verifier(req.headers.signaturecertchainurl, req.headers.signature, JSON.stringify(req.body), function(err) {
if (err) {
return Promise.resolve()
.then((response) => {
res.status(401).json({ status: 'failure', reason: err });
})
.catch((err) => {
res.status(err.code || 500).send(err);
return Promise.reject(err);
});
} else {
return Promise.resolve()
.then(() => {
if (req.method !== 'POST') {
const error = new Error('Only POST requests are accepted');
error.code = 405;
throw error;
}
})
.then((response) => {
res.json({
"version": "1.0",
"sessionAttributes": {},
"response": {
"outputSpeech": {
"type": "PlainText",
"text": generatePhrase()
},
"shouldEndSession": true
}
});
})
.catch((err) => {
res.status(err.code || 500).send(err);
return Promise.reject(err);
});
}
});
};
// [END AlexaValueAdder]