This is the user guide for Nora AI (toweringmedia/module-nora-ai): an AI-powered storefront chat assistant for Magento 2. Nora answers product and policy questions instantly, gives signed-in customers read-only order help, and hands off to your support team via desktop Live Chat or the Agent Hunter mobile PWA when a human is needed.
Nora AI requires Toweringmedia AI Core — AI provider credentials, model selection, and call budgets are configured in AI Core, not here.
Nora AI adds a floating chat widget to your storefront. It is not a rules-based chatbot — it reads live Magento data (catalog, CMS, config, customer orders) and routes questions through Toweringmedia AI Core's agent runtime to generate accurate, context-aware replies.
| Requirement | Notes |
|---|---|
| Magento 2.4.x | Same baseline as your Toweringmedia stack |
toweringmedia/module-base | Shared Toweringmedia admin tab and conventions |
toweringmedia/module-ai-core | Required — AI provider, model, dry-run/live gates, budgets |
| PHP 8.1+ | Per composer.json |
composer require toweringmedia/module-nora-ai:^0.7 toweringmedia/module-ai-core:^2.1 bin/magento setup:upgrade bin/magento cache:flush
Grant admin roles access under System → Permissions → User Roles → Toweringmedia → Chatbot (view logs, manage escalations, use Live Chat).
Stores → Configuration → Towering Media → Nora AI
| Setting | Purpose |
|---|---|
| Enable Chatbot | Master switch for widget and message endpoints on this store view |
| Widget Title | Panel header (shown in chat dialog) |
| Launcher Button Label | Text on the floating launcher button |
| Welcome Message | First message shown when there is no saved transcript yet |
| Help Notice | Optional hint below the message area (e.g., guest vs signed-in capabilities) |
| Empty Input Hint | Shown when a shopper tries to send a blank message |
| Unavailable Message | Shown when the chat endpoint is disabled or returns an error |
| Service Error Message | Shown when the browser cannot reach the chat service |
| Empty Message Reply | Server-side reply for blank input |
| Fallback Reply | Server-side reply when AI or tools cannot answer |
| Remember Chat in Browser | Restores transcript from browser storage on the same device (server history remains) |
Set primary color, header subtitle, launcher style, and unread badge behavior. Values are stored in Magento configuration — upgrading the module does not reset your branding.
Developers can override appearance with CSS variables in theme:
.tm-chatbot { --tm-chatbot-primary: #0ea5e9; --tm-chatbot-primary-end: #0284c7; }
Available tokens: –tm-chatbot-primary, –tm-chatbot-primary-end, –tm-chatbot-primary-foreground, –tm-chatbot-bot-avatar-bg, –tm-chatbot-messages-bg, –tm-chatbot-card, –tm-chatbot-muted-foreground, –tm-chatbot-border, –tm-chatbot-input-bg, –tm-chatbot-radius, –tm-chatbot-launcher-size.
Requires Whisper STT and OpenAI TTS enabled in AI Core. When enabled, shoppers can click the mic button to speak their message and optionally receive spoken replies. Both features can be toggled independently.
| Setting | Purpose |
|---|---|
| Enable Human Escalation | When off, no escalation queue and no human handoff tool routing |
| Support Email Override | Override for the email sent when an escalation goes unanswered; falls back to Magento store email |
| Additional Handoff Trigger Phrases | One phrase per line — always forces handoff when matched |
| Handoff Unavailable Message | Shown if shopper asks for a human but escalation is disabled |
| Unanswered contact timeout (seconds) | If no agent sends a human reply within this window (default 30, range 10–300), the widget asks for name + email and sends a notification email to the store inbox |
Human workflow:
| Setting | Purpose |
|---|---|
| Allow Guest Chat | When off, only signed-in customers can send messages |
| Maximum Message Length | Enforced in widget and server (100–8000 characters) |
| Message Too Long / Guest Disabled replies | Server responses for those edge cases |
Agent Hunter is a mobile PWA for support staff away from their desk.
| Step | Action |
|---|---|
| 1 | Customer Experience → Agent Hunter → Generate API token (copy immediately; shown once) |
| 2 | Open Agent Hunter app on phone at /tm_chatbot/agent/app and add to home screen |
| 3 | Paste the token, enable On duty |
| 4 | When escalation arrives, claim from queue, reply, mark resolved |
Web Push (VAPID) keys are required for background phone alerts. Generate via the same screen after agents install the PWA and enable notifications.
| Area | Menu | Use | |
|---|---|---|---|
| Live Chat | Customer Experience → Live Chat | Operator inbox — claim open chats, reply, resolve | |
| Conversations | Customer Experience → Conversations | Review all storefront transcripts with bot-only / human / escalated filters | |
| Knowledge Base | Customer Experience → Knowledge Base | Approve AI-screened FAQ drafts generated from resolved human chats | |
| Agent Hunter | Customer Experience → Agent Hunter | Generate mobile API tokens and VAPID keys | |
GET /tm_chatbot/message/dryrun — chat turns (route name is historical; uses LLM when AI Core allows live calls)GET /tm_chatbot/message/sessionMessages — delivers human agent messages during takeoverGET /tm_chatbot/message/submitEscalationContact — shopper submits name/email when escalation is unanswered past timeoutDisable Enable Chatbot to hide the widget and return inactive behavior on all endpoints.
toweringmedia/module-nora-aiToweringmedia_NoraAitoweringmedia/module-base ^1.1.23, toweringmedia/module-ai-core ^2.1Widget does not appear on storefront
bin/magento cache:clean full_page.Nora replies with fallback copy instead of AI responses
Shopper asked for a human but no escalation appeared in Live Chat
Human escalation email was not received
var/log/exception.log for mail transport errors.Agent Hunter token not working