@@ -41,6 +41,7 @@ redisClient.on('error', (err) => logger.error('Redis Client Error', err));
4141
4242await redisClient . connect ( ) ;
4343
44+ app . use ( bodyParser . text ( { type : 'application/json' } ) ) ;
4445app . use ( bodyParser . json ( ) ) ;
4546app . use ( bodyParser . urlencoded ( { extended : true } ) ) ;
4647
@@ -197,6 +198,7 @@ app.post('/feedback/webhook', async (req, res) => {
197198 const userData = {
198199 name : user . name ,
199200 id : user [ 'internal-user-id' ] ,
201+ external_id : user [ 'external-user-id' ] ,
200202 role : user . role ,
201203 } ;
202204
@@ -233,7 +235,23 @@ app.post('/feedback/webhook', async (req, res) => {
233235} ) ;
234236
235237app . post ( '/feedback/submit' , async ( req , res ) => {
236- const { session, user, feedback, device, rating } = req . body ;
238+ let body = req . body ;
239+ if ( typeof req . body === 'string' ) {
240+ try {
241+ body = JSON . parse ( req . body ) ;
242+ } catch ( e ) {
243+ logger . error ( 'Error parsing feedback body:' , e ) ;
244+ return res . status ( 400 ) . send ( ) ;
245+ }
246+ }
247+
248+ const { session, user, feedback, device, rating } = body ;
249+
250+ if ( ! session || ! user ) {
251+ logger . warn ( 'Received feedback submission with missing session or user.' , body ) ;
252+ return res . status ( 400 ) . json ( { status : 'error' , message : 'Missing session or user information' } ) ;
253+ }
254+
237255 try {
238256 const feedbackKey = `${ KEY_PREFIX } :${ session . sessionId } :${ user . userId } ` ;
239257 const existingFeedback = await redisClient . get ( feedbackKey ) ;
@@ -243,7 +261,7 @@ app.post('/feedback/submit', async (req, res) => {
243261 // User redirect URL takes precedence over session redirect URL
244262 const redirectUrl = userData . redirect_url || sessionData . redirect_url ;
245263
246- const isFeedbackEmpty = Object . keys ( feedback ) . length === 0 && ! rating ;
264+ const isFeedbackEmpty = ( ! feedback || Object . keys ( feedback ) . length === 0 ) && ( rating === undefined || rating === null ) ;
247265 const essentialData = {
248266 session : { redirect_url : redirectUrl } ,
249267 }
@@ -259,7 +277,7 @@ app.post('/feedback/submit', async (req, res) => {
259277 return res . status ( 400 ) . json ( { status : 'error' , message : 'Feedback already submitted' } ) ;
260278 }
261279
262- logger . info ( `Submitting feedback for userID: ${ userData . id } meetingID: ${ sessionData . session_id } ` ) ;
280+ logger . info ( `Submitting feedback for userID: ${ userData . id || user . userId } meetingID: ${ sessionData . session_id || session . sessionId } ` ) ;
263281
264282 const completeFeedback = {
265283 rating,
@@ -274,6 +292,7 @@ app.post('/feedback/submit', async (req, res) => {
274292 user : {
275293 name : userData . name ,
276294 id : userData . id ,
295+ external_id : userData . external_id ,
277296 role : userData . role ,
278297 email : user . email
279298 } ,
@@ -283,7 +302,7 @@ app.post('/feedback/submit', async (req, res) => {
283302 const cleanFeedback = JSON . parse ( JSON . stringify ( completeFeedback , ( key , value ) => value === undefined ? undefined : value ) ) ;
284303 const logLevel = logger . level ;
285304
286- if ( cleanFeedback . rating ) {
305+ if ( cleanFeedback . rating !== undefined && cleanFeedback . rating !== null ) {
287306 console . log ( `${ new Date ( ) . toISOString ( ) } custom-feedback [${ logLevel } ] : CUSTOM FEEDBACK LOG: ${ JSON . stringify ( cleanFeedback ) } ` ) ;
288307 } else {
289308 return logger . info ( `Not logging feedback without rating` ) ;
0 commit comments