From 9344fae1b90e36caf20eef9ac8b3ca9aa30430c2 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Tue, 22 Nov 2022 10:50:38 +0800 Subject: [PATCH] Add title and image url in notification --- .../api/src/services/save_newsletter_email.ts | 28 +++++++++---------- packages/rule-handler/src/index.ts | 3 +- packages/rule-handler/src/rule.ts | 18 ++++++++++-- packages/rule-handler/src/sendNotification.ts | 6 +++- 4 files changed, 35 insertions(+), 20 deletions(-) diff --git a/packages/api/src/services/save_newsletter_email.ts b/packages/api/src/services/save_newsletter_email.ts index 0f505c53b..365877d08 100644 --- a/packages/api/src/services/save_newsletter_email.ts +++ b/packages/api/src/services/save_newsletter_email.ts @@ -4,10 +4,8 @@ import { UserDeviceToken } from '../entity/user_device_tokens' import { env } from '../env' import { ContentReader } from '../generated/graphql' import { analytics } from '../utils/analytics' -import { sendMulticastPushNotifications } from '../utils/sendNotification' import { getNewsletterEmail } from './newsletters' import { SaveContext, saveEmail, SaveEmailInput } from './save_email' -import { getDeviceTokensByUserId } from './user_device_tokens' import { Page } from '../elastic/types' import { addLabelToPage } from './labels' import { saveSubscription } from './subscriptions' @@ -97,19 +95,19 @@ export const saveNewsletterEmail = async ( }) console.log('newsletter label added:', result) - // sends push notification - const deviceTokens = await getDeviceTokensByUserId(newsletterEmail.user.id) - if (!deviceTokens) { - console.log('Device tokens not set:', newsletterEmail.user.id) - return true - } - - const multicastMessage = messageForLink(page, deviceTokens) - await sendMulticastPushNotifications( - newsletterEmail.user.id, - multicastMessage, - 'newsletter' - ) + // // sends push notification + // const deviceTokens = await getDeviceTokensByUserId(newsletterEmail.user.id) + // if (!deviceTokens) { + // console.log('Device tokens not set:', newsletterEmail.user.id) + // return true + // } + // + // const multicastMessage = messageForLink(page, deviceTokens) + // await sendMulticastPushNotifications( + // newsletterEmail.user.id, + // multicastMessage, + // 'newsletter' + // ) return true } diff --git a/packages/rule-handler/src/index.ts b/packages/rule-handler/src/index.ts index 6914ce6dd..16e800d2f 100644 --- a/packages/rule-handler/src/index.ts +++ b/packages/rule-handler/src/index.ts @@ -19,9 +19,10 @@ interface PubSubRequestBody { } export interface PubSubData { - subscription: string userId: string type: EntityType + subscription?: string + image?: string } enum EntityType { diff --git a/packages/rule-handler/src/rule.ts b/packages/rule-handler/src/rule.ts index 7343fcdfc..2e57f1a88 100644 --- a/packages/rule-handler/src/rule.ts +++ b/packages/rule-handler/src/rule.ts @@ -94,7 +94,14 @@ export const triggerActions = async ( console.log('No notification messages provided') continue } - await sendNotification(userId, action.params, apiEndpoint, jwtSecret) + await sendNotification( + userId, + data.subscription, + action.params, + apiEndpoint, + jwtSecret, + data.image + ) } } } @@ -102,16 +109,21 @@ export const triggerActions = async ( export const sendNotification = async ( userId: string, + subscription: string, messages: string[], apiEndpoint: string, - jwtSecret: string + jwtSecret: string, + image?: string ) => { + const title = `📫 - ${subscription} has published a new article` // get device tokens by calling api const tokens = await getDeviceTokens(userId, apiEndpoint, jwtSecret) const batchMessages = getBatchMessages( + title, messages, - tokens.map((t) => t.token) + tokens.map((t) => t.token), + image ) return sendBatchPushNotifications(batchMessages) diff --git a/packages/rule-handler/src/sendNotification.ts b/packages/rule-handler/src/sendNotification.ts index 684f858e6..c7cad5abc 100644 --- a/packages/rule-handler/src/sendNotification.ts +++ b/packages/rule-handler/src/sendNotification.ts @@ -56,8 +56,10 @@ export const getDeviceTokens = async ( } export const getBatchMessages = ( + title: string, messages: string[], - tokens: string[] + tokens: string[], + imageUrl?: string ): Message[] => { const batchMessages: Message[] = [] messages.forEach((message) => { @@ -65,7 +67,9 @@ export const getBatchMessages = ( batchMessages.push({ token, notification: { + title, body: message, + imageUrl, }, }) })