|
|
||
|---|---|---|
| public | ||
| scripts | ||
| src | ||
| README.md | ||
| ecosystem.config.cjs | ||
| eventbuzz-concierge-implementation-plan.md | ||
| package-lock.json | ||
| package.json | ||
| server.js | ||
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
- Start the server.
- Open http://localhost:3010/embed/demo for the floating widget, or http://localhost:3010/embed/avatar for the SIMLI avatar + chat page.
- Set
botIdin the page script to a realConciergeBotdocument_idfrom MongoDB. The avatar page also needsSIMLI_API_KEYandSIMLI_FACE_IDin.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.