Go to file
Tanuja Pansare cb3d977d10 Revert unintended avatar asset changes 2026-10-19 14:21:33 +05:30
public Revert unintended avatar asset changes 2026-10-19 14:21:33 +05:30
scripts first commit 2026-08-31 16:28:31 +05:30
src Update Concierge integration 2026-10-19 12:51:48 +05:30
.env.example Add env example, gitignore, and Node version pin. 2026-09-30 09:39:46 +05:30
.gitignore Add env example, gitignore, and Node version pin. 2026-09-30 09:39:46 +05:30
.nvmrc Add env example, gitignore, and Node version pin. 2026-09-30 09:39:46 +05:30
README.md Changes 2026-09-21 10:52:06 +05:30
ecosystem.config.cjs Changes 2026-09-21 10:52:06 +05:30
eventbuzz-concierge-implementation-plan.md Changes 2026-09-21 10:52:06 +05:30
package-lock.json Changes 2026-09-21 10:52:06 +05:30
package.json Changes 2026-09-21 10:52:06 +05:30
server.js first commit 2026-08-31 16:28:31 +05:30

README.md

EventBuzz Concierge

Independent Node.js service for the EventBuzz Virtual Concierge chatbot. Uses Amazon Bedrock tool calling (router + synthesis). Connects to the same MongoDB as the main EventBuzz backend.

Setup

cp .env.example .env
# Set MONGODB_URI and AWS / Bedrock credentials
npm install
npm run dev

Server defaults to http://localhost:3010.

Production deploy (same server as backend)

From the repo root (EventBuzz_Dashboard_V4/):

./deploy.sh concierge
# or full stack:
./deploy.sh all

Deploys to /var/www/concierge on the backend host, reloads PM2 app concierge-api, and syncs public/embed to the backend so dashboard embed snippets stay current.

First time on the server: create /var/www/concierge/.env (copy from .env.example), set MONGODB_URI, AWS/Bedrock, and mail vars, then run deploy. If package.json / lockfile changed, run npm ci --omit=dev on the server and deploy again.

Embed demo

  1. Start the server.
  2. Open http://localhost:3010/embed/demo for the floating widget, or http://localhost:3010/embed/avatar for the SIMLI avatar + chat page.
  3. Set botId in the page script to a real ConciergeBot document _id from MongoDB. The avatar page also needs SIMLI_API_KEY and SIMLI_FACE_ID in .env, plus LiveKit voice.

API

Method Path Purpose
GET /api/public/concierge/{botId}/config Widget greeting / config
POST /api/public/concierge/{botId}/chat Send a chat turn (tool-calling agent)
GET /api/public/concierge/{botId}/session/{sessionRef} Resume session
POST /api/public/concierge/{botId}/voice/token LiveKit visitor token
POST /api/public/concierge/{botId}/simli/token SIMLI session token (API key stays on the server)
GET /webhook/whatsapp Meta webhook verification
POST /webhook/whatsapp Inbound WhatsApp (reception + follow-up)

Agent

One Bedrock model (BEDROCK_AGENT_MODEL_ID, defaulting to Claude Haiku 4.5) chooses EventBuzz tools, the service executes them against Mongo (identity injected from the chat session), then the same model writes the visitor-facing reply.

Default model: global.anthropic.claude-haiku-4-5-20251001-v1:0 (global inference profile — required in ap-south-1). Prompt caching is on by default (BEDROCK_PROMPT_CACHE=true): tools, the system prompt, and the static EVENT brief are marked with cachePoint (1-hour TTL). Haiku 4.5 only records a cache hit after ~4096 tokens in that prefix; check cacheReadInputTokens / cacheWriteInputTokens in Bedrock logs. Claude 3 Haiku (20240307) cannot use cachePoint.

Tools: get_my_tickets, get_my_agenda, email_my_ticket, get_agenda, get_speakers, get_exhibitors, get_venue, get_local, get_tech_help, search_faqs, save_session, remove_saved_session, contact_organizer.

Personal tools and mutations require email OTP (identity.service). Widget, WhatsApp, and LiveKit voice all share this runner.

Set BEDROCK_AGENT_MODEL_ID or BEDROCK_CALL2_MODEL_ID, OTP_PEPPER, and SMTP/MAIL_* vars in .env (see .env.example). Without SMTP, OTP codes are logged to the server console.

Reception WhatsApp: point the Meta webhook at GET/POST /webhook/whatsapp on this service (verify token META_WHATSAPP_WEBHOOK_VERIFY_TOKEN). Configure copy and drips in the dashboard WhatsApp Chatbots → Reception tab. WABA credentials come from Organisation WhatsApp settings.