# Testing ThirdEye with Actual Google Meet & Telegram

This guide walks you through testing the full Meet + Telegram integration end-to-end.

---

## Prerequisites

1. **Chrome browser** with Developer mode enabled
2. **Google account** for Google Meet
3. **Telegram account** and bot token (already configured)
4. **ThirdEye backend + bot** both running

---

## Step 1: Start Your Services

Open **two terminals** and run both services:

### Terminal 1: FastAPI Backend
```bash
cd c:\Projects\binary_hack
python run_api.py
```

You should see:
```
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8000
```

### Terminal 2: Telegram Bot
```bash
cd c:\Projects\binary_hack
python -m backend.bot.bot
```

You should see:
```
INFO:thirdeye.bot:ThirdEye bot starting...
```

**Keep both running throughout the test.**

---

## Step 2: Verify Services Are Running

### Check API Health
```bash
curl http://localhost:8000/health
```

Expected response:
```json
{"status":"ok","service":"thirdeye"}
```

### Check Telegram Bot
Send `/start` to your bot in Telegram. You should see the welcome message with all available commands including:
- `/meetsum [id]` — Summarize a meeting
- `/meetask [id] [q]` — Ask about a meeting  
- `/meetmatch [id]` — Match meeting to team chats

---

## Step 3: Load the Chrome Extension

1. Open Chrome and navigate to `chrome://extensions/`
2. Enable **Developer mode** (toggle in top-right corner)
3. Click **Load unpacked**
4. Navigate to `c:\Projects\binary_hack\meet_extension\`
5. Click **Select Folder**

You should see "ThirdEye Meet Recorder" in your extensions list.

---

## Step 4: Configure the Extension

1. Click the ThirdEye extension icon in Chrome toolbar
2. In the popup, scroll to the bottom section
3. Enter these settings:
   - **Backend URL**: `http://localhost:8000`
   - **Group ID**: `meet_sessions`
   - **Ingest Secret**: `thirdeye_meet_secret_change_me`
4. Click **Save Settings**

You should see "✓ Saved" confirmation.

---

## Step 5: Start a Test Google Meet

### 5.1 Create or Join a Meeting

Go to https://meet.google.com and either:
- Create a new meeting (click "New meeting" → "Start an instant meeting")
- Join an existing meeting using a code

### 5.2 Start Recording

1. Once in the meeting, click the ThirdEye extension icon
2. You should see the popup UI with "▶ Start Recording" button
3. Click **Start Recording**
4. Chrome will prompt for microphone access - click **Allow**

### 5.3 Verify Recording Started

The extension popup should show:
- A pulsing **red dot** next to "Recording..."
- The **Meeting ID** (e.g., `abc-defg-hij`)
- **"0 chunks sent"** (this will increment)

### 5.4 Speak Some Test Content

Say things like:
- "We decided to use PostgreSQL for the database"
- "Alex will complete the migration by Friday"
- "The API timeout is blocking us from deploying"
- "Should we move the deadline? I'm not sure."

The extension will capture this and transcribe it using Chrome's Web Speech API.

---

## Step 6: Check Backend is Receiving Data

### 6.1 Watch FastAPI Logs

In Terminal 1 (where `run_api.py` is running), you should see:
```
INFO:     127.0.0.1:xxxxx - "POST /api/meet/start HTTP/1.1" 200 OK
INFO:     127.0.0.1:xxxxx - "POST /api/meet/ingest HTTP/1.1" 200 OK
INFO:thirdeye.agents.meet_ingestor:Processing meet chunk 0 for meeting abc-defg-hij (245 chars)
INFO:thirdeye.agents.meet_ingestor:Stored 5 signals for meeting abc-defg-hij chunk 0
```

### 6.2 Check API Endpoint

While recording or after:
```bash
curl http://localhost:8000/api/meet/meetings
```

Expected response:
```json
{
  "meetings": [
    {
      "meeting_id": "abc-defg-hij",
      "signal_count": 8,
      "types": {
        "meet_chunk_raw": 2,
        "meet_decision": 2,
        "meet_action_item": 2,
        "meet_blocker": 1,
        "meet_started": 1
      }
    }
  ]
}
```

### 6.3 Run Diagnostic Script

```bash
python scripts/debug_meet.py
```

This shows all meet signals in ChromaDB and which meetings have been recorded.

---

## Step 7: Stop Recording & Generate Summary

1. Click the extension icon
2. Click **■ Stop Recording**
3. This sends the final chunk with `is_final=True`, which triggers full meeting summary generation

Watch the backend logs - you should see:
```
INFO:thirdeye.agents.meet_ingestor:Processing meet chunk N for meeting abc-defg-hij (final)
```

---

## Step 8: Query the Meeting in Telegram

Now go to your Telegram bot chat:

### 8.1 Get Meeting Summary
```
/meetsum
```

or with specific meeting ID:
```
/meetsum abc-defg-hij
```

Expected response:
```
📋 Meeting Summary
ID: abc-defg-hij

Overview: Sprint planning meeting to finalize database choice and assign action items.

Key Decisions:
• PostgreSQL selected for primary database
• ...

Action Items:
• Alex: Complete migration by Friday
• ...

Blockers:
• API timeout blocking deployment
• ...
```

### 8.2 Ask Questions About the Meeting
```
/meetask abc-defg-hij What did we decide about the database?
```

Expected response:
```
🎙️ Meet Q&A — abc-defg-hij

Q: What did we decide about the database?

A: The team decided to use PostgreSQL for the primary database...
```

### 8.3 Cross-Reference with Chat History

First, make sure you have some Telegram chat messages in a monitored group. Then:

```
/meetmatch abc-defg-hij
```

Expected response:
```
🔗 Meet ↔ Chat Cross-Reference
Meeting: abc-defg-hij

⚡ Contradictions (1) — ACTION NEEDED
🔴 Meeting decided: We will use PostgreSQL for the database
   BUT [your_dev_group] says: We should use MySQL, it's simpler
   Impact: Database choice inconsistency may cause confusion

✅ Confirmations (1)
🟡 Meeting: API timeout blocking deployment
   Matches [your_dev_group]: API timeout still happening

🔦 Blind Spots (1) — Teams may not know
🟠 OAuth refactor marked as high risk in meeting discussion
   → Consider notifying product team about deployment risks
```

---

## Step 9: Debugging Common Issues

### Issue 1: Extension Shows "Not on Google Meet"

**Cause**: You're not on a `meet.google.com` URL

**Fix**: Navigate to https://meet.google.com and join/start a meeting

### Issue 2: Extension Recording But No Chunks Sent

**Symptoms**: 
- Popup shows "Recording..." with red dot
- But "chunks sent" stays at 0

**Debugging**:
1. Open Chrome DevTools (F12) on the Meet page
2. Go to Console tab
3. Look for `[ThirdEye]` messages
4. You should see: `[ThirdEye] Content script loaded` and `[ThirdEye] Speech recognition started`

**Common causes**:
- Microphone permission denied - check Chrome settings
- Backend URL incorrect in extension settings - verify it's `http://localhost:8000`
- Backend not running - check Terminal 1

### Issue 3: Backend Returning 403 Forbidden

**Cause**: Secret mismatch

**Fix**: 
1. Check your `.env` file: `MEET_INGEST_SECRET=thirdeye_meet_secret_change_me`
2. Check extension settings (click icon → scroll down) - secret must match exactly
3. Save settings and try recording again

### Issue 4: Telegram Commands Say "No meetings found"

**Debugging steps**:

1. Run the diagnostic script:
```bash
python scripts/debug_meet.py
```

2. Check if signals exist but in wrong group:
```python
from backend.db.chroma import get_group_ids, get_all_signals

for group in get_group_ids():
    signals = get_all_signals(group)
    meet_sigs = [s for s in signals if s.get("metadata", {}).get("lens") == "meet"]
    if meet_sigs:
        print(f"{group}: {len(meet_sigs)} meet signals")
```

3. Check if meeting_id is stored in metadata:
```python
from backend.db.chroma import get_all_signals

signals = get_all_signals("meet_sessions")
for s in signals[:5]:
    meta = s.get("metadata", {})
    print(f"Type: {meta.get('type')}, MeetingID: {meta.get('meeting_id')}")
```

### Issue 5: /meetmatch Returns No Connections

**Cause**: No cross-reference groups configured or no signals in those groups

**Fix**:
1. Check `.env`: `MEET_CROSS_REF_GROUPS=your_telegram_group_id`
2. Make sure you have actual Telegram chat signals in those groups
3. Send some test messages in your Telegram group and wait 30s for processing
4. Verify with `/digest` in Telegram that signals exist

---

## Step 10: Full Integration Test Scenario

Here's a complete test scenario to verify everything works:

### Day 1: Seed Telegram Chat History

In your Telegram group, send these messages:
```
Alex: I think we should use MySQL for the new database
Sam: The checkout endpoint is timing out again
Priya: Let's just push OAuth changes directly to main
```

Wait 60 seconds for the bot to process these into signals.

### Day 2: Record a Google Meet

1. Start recording with extension
2. During meeting, say (or have participants say):
   - "We've decided - PostgreSQL is the database we're using"
   - "The checkout timeout is blocking the entire deploy"
   - "OAuth refactor is risky, we need a feature branch first"
3. Stop recording after 2-3 minutes

### Day 3: Query and Cross-Reference

In Telegram:
```
/meetsum
```
Should show summary with decisions, actions, blockers.

```
/meetask abc-defg-hij What database did we choose?
```
Should answer: PostgreSQL

```
/meetmatch
```
Should show:
- **Contradiction**: PostgreSQL (meet) vs MySQL (chat)
- **Confirmation**: Checkout timeout mentioned in both
- **Contradiction**: Feature branch (meet) vs direct push (chat)

---

## API Endpoints Reference

For debugging, you can also hit the API directly:

### List All Meetings
```bash
curl http://localhost:8000/api/meet/meetings
```

### Get Signals for Specific Meeting
```bash
curl http://localhost:8000/api/meet/meetings/abc-defg-hij/signals
```

### Manual Ingest Test (without extension)
```bash
curl -X POST http://localhost:8000/api/meet/ingest \
  -H "Content-Type: application/json" \
  -H "X-ThirdEye-Secret: thirdeye_meet_secret_change_me" \
  -d '{
    "meeting_id": "manual-test",
    "group_id": "meet_sessions",
    "chunk_index": 0,
    "text": "We decided to use PostgreSQL. Alex will set up the schema by Friday.",
    "speaker": "Test User",
    "timestamp": "2026-03-21T10:00:00Z",
    "is_final": false
  }'
```

Then check:
```bash
curl http://localhost:8000/api/meet/meetings
```

You should see `manual-test` in the list.

---

## Troubleshooting Checklist

Before asking for help, verify:

- [ ] Both services running (API on :8000, bot polling Telegram)
- [ ] Extension loaded in Chrome (check `chrome://extensions/`)
- [ ] Extension settings saved with correct backend URL and secret
- [ ] You're on `meet.google.com` (not hangouts)
- [ ] Microphone permission granted in Chrome
- [ ] Extension popup shows "Recording..." with red pulsing dot
- [ ] Backend logs show "Processing meet chunk..." messages
- [ ] `http://localhost:8000/api/meet/meetings` returns your meeting
- [ ] Telegram bot responds to `/start` command
- [ ] `.env` has `MEET_INGEST_SECRET` that matches extension

---

## Quick Smoke Test (No Meeting Required)

To test the backend without recording a real meeting:

```bash
# Terminal 1
python run_api.py

# Terminal 2 (new window)
python scripts/test_m14.py
```

This simulates the extension and verifies:
- API endpoints work
- Secret validation works
- Signals are stored correctly
- Meetings are queryable

If this passes, your backend is working. If Chrome extension still doesn't work, the issue is in the browser/extension setup.

---

## Expected Timeline

- **Chunk sent every**: 30 seconds while recording
- **Signal extraction**: 2-5 seconds after chunk received
- **Meeting summary**: Generated when you stop recording (takes 5-10 seconds)
- **Telegram query**: Instant (ChromaDB is fast)
- **Cross-reference**: 5-15 seconds (LLM analysis)

---

## Success Indicators

You'll know it's working when:

1. ✅ Extension popup shows incrementing "chunks sent" counter
2. ✅ Backend logs show "Stored N signals for meeting..."
3. ✅ `/api/meet/meetings` returns your meeting ID
4. ✅ `/meetsum` in Telegram shows your meeting summary
5. ✅ `/meetmatch` finds connections to your chat history

---

## Document Upload Best Practices

When uploading documents to Telegram:
- The bot will respond immediately with "📄 Processing..."
- Processing happens in the background (won't block other commands)
- You'll get a follow-up message when processing completes
- Large files (PDFs, DOCX) may take 30-60 seconds
- Maximum file size: 10 MB

If document processing fails, check:
- File format is supported (.pdf, .docx, .txt, .md, .csv, .json, .log)
- File is under 10 MB
- Backend API keys are configured (GROQ, CEREBRAS, etc.)

---

## Contact & Support

If you're stuck:
1. Run `python scripts/debug_meet.py` and share output
2. Check backend logs (Terminal 1) for errors
3. Check browser console (F12 on Meet page) for `[ThirdEye]` errors
4. Share the output of `curl http://localhost:8000/api/meet/meetings`
