diff --git a/src/messaging/messaging.controller.ts b/src/messaging/messaging.controller.ts index 26c6dc3..b3e4738 100644 --- a/src/messaging/messaging.controller.ts +++ b/src/messaging/messaging.controller.ts @@ -13,7 +13,7 @@ export class MessagingController { @Post('webhook') async webhook(@Body() body: any) { - this.logger.log(`[WA-WEBHOOK] Received: ${JSON.stringify(body).substring(0, 300)}`); + this.logger.log(`[WA-WEBHOOK] Received: ${JSON.stringify(body).substring(0, 500)}`); if (!this.provider.validateWebhook(body)) { this.logger.warn('[WA-WEBHOOK] Validation failed — ignoring'); diff --git a/src/messaging/messaging.service.ts b/src/messaging/messaging.service.ts index 3041239..9904640 100644 --- a/src/messaging/messaging.service.ts +++ b/src/messaging/messaging.service.ts @@ -72,9 +72,15 @@ export class MessagingService { // 3. Load conversation history const history = await this.conversation.getHistory(phone); + // For interactive replies, include the selection ID so the AI can + // extract structured data (e.g. "doc:{uuid}:{name}" → doctorId) + let userContent = text; + if (message.type === 'interactive_reply' && message.interactiveReply?.id) { + userContent = `[Selected: ${message.interactiveReply.title}] (selection_id: ${message.interactiveReply.id})`; + } const messages = [ ...history.map(h => ({ role: h.role as 'user' | 'assistant', content: h.content })), - { role: 'user' as const, content: text }, + { role: 'user' as const, content: userContent }, ]; // 4. Build system prompt diff --git a/src/messaging/providers/gupshup.provider.ts b/src/messaging/providers/gupshup.provider.ts index dbab47e..a8020ac 100644 --- a/src/messaging/providers/gupshup.provider.ts +++ b/src/messaging/providers/gupshup.provider.ts @@ -47,12 +47,14 @@ export class GupshupProvider extends MessagingProvider { } if (msgType === 'button_reply' || msgType === 'list_reply') { + // Gupshup sends postbackText (our ID), id can be empty string + const replyId = payload.payload?.postbackText || payload.payload?.id || payload.payload?.reply || ''; return { phone, name, text: payload.payload?.title ?? '', type: 'interactive_reply', interactiveReply: { - id: payload.payload?.id ?? payload.payload?.postbackText ?? '', + id: replyId, title: payload.payload?.title ?? '', }, rawPayload: body,