This repository has been archived by the owner on Aug 16, 2023. It is now read-only.
/
index.js
129 lines (113 loc) · 3.7 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
// Copyright 2019, Google, Inc.
// Licensed under the Apache License, Version 2.0 (the 'License');
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an 'AS IS' BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
'use strict';
// [START imports_asdk]
const {
actionssdk,
UpdatePermission,
Suggestions,
} = require('actions-on-google');
// [END imports_asdk]
const functions = require('firebase-functions');
const app = actionssdk({debug: true});
const notification = (conv) => {
conv.close('You got a push notification!');
};
const subscribeToNotifications = (conv) => {
// [START subscribe_to_notifications_asdk]
conv.ask(new UpdatePermission({
intent: 'Notification',
}));
// [END subscribe_to_notifications_asdk]
};
app.intent('actions.intent.MAIN', (conv) => {
if (!conv.screen) {
return conv.close(`Hi! Welcome to Push Notifications! To learn ` +
`about push notifications you will need to switch to a screened device.`);
}
if (conv.user.verification !== 'VERIFIED') {
return conv.close('Hi! Welcome to Push Notifications! To learn ' +
`about push notifications you'll need to be a verified user.`);
}
conv.ask('Hi! Welcome to Push Notifications!');
// [START suggest_notifications_asdk]
conv.ask(' I can send you push notifications. Would you like that?');
conv.ask(new Suggestions('Send notifications'));
// [END suggest_notifications_asdk]
});
app.intent('actions.intent.TEXT', (conv, input) => {
if (input === 'Send notifications') {
return subscribeToNotifications(conv);
}
});
app.intent('Notification', (conv) => {
return notification;
});
// [START confirm_notifications_subscription_asdk]
app.intent('actions.intent.PERMISSION', (conv) => {
if (conv.arguments.get('PERMISSION')) {
const updatesUserId = conv.arguments.get('UPDATES_USER_ID');
// Store user ID in database for later use
conv.close(`Ok, I'll start alerting you.`);
} else {
conv.close(`Ok, I won't alert you.`);
}
});
// [END confirm_notifications_subscription_asdk]
// Paste your service account credentials here.
const serviceAccount = {
// "type": "",
// "project_id": "",
// "private_key_id": "",
// "private_key": "",
// "client_email": "",
// "client_id": "",
// "auth_uri": "",
// "token_uri": "",
// "auth_provider_x509_cert_url": "",
// "client_x509_cert_url": ""
};
// [START send_notification_asdk]
const {google} = require('googleapis');
const request = require('request');
const jwtClient = new google.auth.JWT(
serviceAccount.client_email, null, serviceAccount.private_key,
['https://www.googleapis.com/auth/actions.fulfillment.conversation'],
null
);
jwtClient.authorize((err, tokens) => {
if (!err) {
request.post('https://actions.googleapis.com/v2/conversations:send', {
auth: {
bearer: tokens.access_token,
},
json: true,
body: {
customPushMessage: {
userNotification: {
title: 'Push Notification Title',
},
target: {
userId: '<UPDATES_ORDER_ID>',
intent: 'Notification Intent',
},
},
isInSandbox: true,
},
}, (err, httpResponse, body) => {
console.log(`${httpResponse.statusCode}: ${httpResponse.statusMessage}`);
});
}
});
// [END send_notification_asdk]
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);