Skip to content

Commit 0715a00

Browse files
committed
Replaced old setup with email
1 parent 34510a4 commit 0715a00

12 files changed

Lines changed: 167 additions & 9 deletions

package-lock.json

Lines changed: 64 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"cors": "^2.8.5",
1919
"express": "^4.18.1",
2020
"mysql2": "^2.3.3",
21+
"node-mailjet": "^5.1.1",
2122
"typeorm": "^0.3.10"
2223
},
2324
"devDependencies": {

src/helper/SetupHelper.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,25 @@
11
import { Response } from 'ask-sdk-model';
22
import { getLocale, HandlerInput } from 'ask-sdk-core';
33

4-
export function getSetupMessage(input: HandlerInput, code: number | null | undefined): Response {
4+
export function getSetupMessage(input: HandlerInput): Response {
55
const messages: any = require(`../languages/${getLocale(input.requestEnvelope)}.json`);
66

77
return input
88
.responseBuilder
9-
.speak(messages['setup']['setup_speak'])
10-
.withSimpleCard(messages['setup']['card']['title'], messages['setup']['card']['message'].replace('%code%', code))
9+
.speak(messages['setup']['email_setup_speak'])
10+
.addDirective({
11+
'type': 'Connections.StartConnection',
12+
'uri': 'connection://AMAZON.AskForPermissionsConsent/2',
13+
'input': {
14+
'@type': 'AskForPermissionsConsentRequest',
15+
'@version': '2',
16+
'permissionScopes': [
17+
{
18+
'permissionScope': 'alexa::profile:email:read',
19+
'consentLevel': 'ACCOUNT'
20+
}
21+
]
22+
}
23+
})
1124
.getResponse();
1225
}

src/intents/ChannelStatsIntentHandler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export const ChannelStatsIntentHandler: RequestHandler = {
1818
}
1919
});
2020
if (!user?.channelId) {
21-
return getSetupMessage(input, user?.code);
21+
return getSetupMessage(input);
2222
}
2323

2424
try {

src/intents/LastCommentIntentHandler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export const LastCommentIntentHandler: RequestHandler = {
1919
const messages: any = require(`../languages/${getLocale(input.requestEnvelope)}.json`);
2020

2121
if (!user?.channelId) {
22-
return getSetupMessage(input, user?.code);
22+
return getSetupMessage(input);
2323
}
2424

2525
try {

src/intents/LastVideoIntentHandler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export const LastVideoIntentHandler: RequestHandler = {
2121
const messages: any = require(`../languages/${getLocale(input.requestEnvelope)}.json`);
2222

2323
if (!user?.channelId) {
24-
return getSetupMessage(input, user?.code);
24+
return getSetupMessage(input);
2525
}
2626

2727
try {

src/intents/LaunchRequestHandler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export const LaunchRequestHandler: RequestHandler = {
1818
}
1919
});
2020
if (!user?.channelId) {
21-
return getSetupMessage(input, user?.code);
21+
return getSetupMessage(input);
2222
}
2323

2424
try {
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import { getApiAccessToken, getLocale, getRequestType, getUserId, HandlerInput, RequestHandler } from 'ask-sdk-core';
2+
import { Response, SessionResumedRequest } from 'ask-sdk-model';
3+
import { User } from '../entities/User';
4+
import { appDataSource } from '../helper/DatabaseHelper';
5+
import axios, { AxiosResponse } from 'axios';
6+
const Mailjet = require('node-mailjet');
7+
8+
export const SessionResumedRequestHandler: RequestHandler = {
9+
canHandle(input: HandlerInput): Promise<boolean> | boolean {
10+
return getRequestType(input.requestEnvelope) === 'SessionResumedRequest';
11+
},
12+
async handle(input: HandlerInput): Promise<Response> {
13+
const event: SessionResumedRequest = input.requestEnvelope.request as SessionResumedRequest;
14+
const permissionState: string = event.cause?.result.status;
15+
const messages: any = require(`../languages/${getLocale(input.requestEnvelope)}.json`);
16+
const user: User | null = await appDataSource.getRepository(User).findOne({
17+
where: {
18+
id: getUserId(input.requestEnvelope)
19+
}
20+
});
21+
22+
if (permissionState === 'DENIED') {
23+
input
24+
.responseBuilder
25+
.withSimpleCard(messages['setup']['card']['title'], messages['setup']['card']['message'].replace('%code%', user?.code));
26+
}
27+
28+
if (permissionState === 'ACCEPTED') {
29+
const mailjet = new Mailjet({
30+
apiKey: process.env.MJ_APIKEY_PUBLIC,
31+
apiSecret: process.env.MJ_APIKEY_PRIVATE
32+
});
33+
34+
try {
35+
const emailResponse: AxiosResponse = await axios.get(
36+
`${input.requestEnvelope.context.System.apiEndpoint}/v2/accounts/~current/settings/Profile.email`,
37+
{
38+
headers: {
39+
Authorization: `Bearer ${getApiAccessToken(input.requestEnvelope)}`
40+
}
41+
}
42+
);
43+
44+
await mailjet
45+
.post('send')
46+
.request({
47+
FromEmail: 'no-reply@pricenotify.app',
48+
FromName: 'PriceNotify',
49+
Subject: 'My channel',
50+
'Text-Part': `https://skills.manuelschuler.dev/select-channel/${user?.code}`,
51+
'HTML-Part': `https://skills.manuelschuler.dev/select-channel/${user?.code}`,
52+
Recipients: [
53+
{
54+
Email: emailResponse.data
55+
},
56+
],
57+
});
58+
} catch (error: any) {}
59+
}
60+
61+
return input
62+
.responseBuilder
63+
.speak(messages['setup']['email_permissions_status'][permissionState])
64+
.getResponse();
65+
}
66+
}

src/intents/SubscriberIntentHandler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export const SubscriberIntentHandler: RequestHandler = {
1919
const messages: any = require(`../languages/${getLocale(input.requestEnvelope)}.json`);
2020

2121
if (!user?.channelId) {
22-
return getSetupMessage(input, user?.code);
22+
return getSetupMessage(input);
2323
}
2424

2525
try {

src/languages/de-DE.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
"card": {
55
"title": "Skilleinrichtung benötigt",
66
"message": "Öffne https://skills.manuelschuler.dev und gebe deinen Code %code% ein"
7+
},
8+
"email_setup_speak": "Um den Skill einzurichten sende ich dir eine Email mit dem Link.",
9+
"email_permissions_status": {
10+
"ACCEPTED": "Ich habe dir eine Email gesendet. Folge dem Link um den Skill einzurichten.",
11+
"DENIED": "Der Skill muss noch über eine Webseite eingerichtet werden, öffne dazu die Alexa App und dann unter dem Reiter Mehr die Aktivitäten und folge den Anweisungen.",
12+
"REDIRECT_TO_APP": "Bitte gehe in die Alexa App um die Berechtigung zu erteilen."
713
}
814
},
915
"last_video": {

0 commit comments

Comments
 (0)