51 min readAmbient capture

Implementation Guide: Transcribe parent-teacher conferences and generate meeting notes for record keeping

Step-by-step implementation guide for deploying AI to transcribe parent-teacher conferences and generate meeting notes for record keeping for Education clients.

Hardware Procurement

Jabra Speak2 75 USB-C Speakerphone

Jabra (GN Audio)2775-419 (UC variant, USB-C + Bluetooth dongle)Qty: 5

$200-$250 per unit MSP cost / $260-$290 suggested resale

Primary audio capture device for conference rooms. Features 4 beamforming microphones with 360-degree pickup optimized for rooms of 2-6 people — ideal for parent-teacher conference settings. Certified for Teams, Zoom, and Google Meet. USB-C connection to the room laptop plus Bluetooth for wireless flexibility. One unit per conference room.

Anker PowerConf S330 USB Speakerphone

AnkerA3308011Qty: 10

$55-$70 per unit MSP cost / $75-$85 suggested resale

Budget audio capture device for individual classrooms where teachers hold conferences at their desk. Features 4 high-sensitivity microphones with 3-meter radius pickup and automatic gain control. USB-A connection. Deployed one per participating teacher's classroom as a supplemental capture point beyond the dedicated conference rooms.

Zoom H1n Handy Recorder

Zoom CorporationH1nQty: 2

$99-$120 per unit MSP cost / $135-$150 suggested resale

Offline backup audio recorder for situations where network connectivity is unreliable or for conference rooms without a laptop. Records WAV/MP3 at up to 24-bit/96kHz via X/Y stereo microphones. Files are transferred via USB to the transcription workflow after the conference. Also serves as disaster recovery if the primary cloud transcription system is down during conference week.

Dell Latitude 3440 Laptop (or equivalent)

Dell TechnologiesLatitude 3440 (i5-1335U, 8GB RAM, 256GB SSD)Qty: 2

$500-$650 per unit MSP cost / $700-$850 suggested resale

Dedicated conference room laptops stationed in the two highest-volume conference rooms. Runs the Teams/Zoom/Meet client and Otter.ai desktop app for real-time transcription. Pre-configured with transcription software, auto-login, and simplified desktop with only conference-related shortcuts. Avoids teachers needing to bring and configure their personal devices.

Kensington Universal Laptop Docking Station

KensingtonSD4780P USB-C/USB-A Dual 4K Docking StationQty: 2

$120-$150 per unit MSP cost / $165-$200 suggested resale

Docking station for conference room laptops providing single-cable connectivity to the speakerphone, power, and optional external display. Ensures clean cable management and reliable USB connection to the Jabra Speak2 75 in the dedicated conference rooms.

Software Procurement

Otter.ai Business

Otter.aiBusiness (per-seat SaaS)Qty: 20 teacher seats

$20/seat/month billed annually ($240/seat/year). For 20 teacher seats = $400/month or $4,800/year. MSP can negotiate 10-15% volume discount for 20+ seats.

Primary AI transcription and meeting notes platform. Provides real-time transcription with speaker identification, automated meeting summaries, keyword extraction, and action item detection. Works with both virtual meetings (Teams, Zoom, Meet integration) and in-person meetings via the Otter desktop/mobile app with the USB speakerphone. Searchable transcript archive enables staff to find past conference discussions. Education discount of 20% available for .edu email addresses on Pro tier.

OpenAI API (GPT-5.4 + Whisper)

OpenAIGPT-5.4 + Whisper

Whisper transcription: $0.006/min ($0.36/hr). GPT-5.4 summarization: ~$0.01-$0.03 per conference summary (approx. 2,000 input tokens + 500 output tokens per 30-min conference). Estimated total: $50-$150/year for a school with 500 conferences.

Powers the custom post-processing pipeline that takes raw Otter.ai transcripts and generates structured meeting notes in a standardized school format. The GPT-5.4 model extracts attendees, key discussion points, student progress indicators, action items with owners, follow-up dates, and flags any concerns requiring administrative attention. Also serves as the backup transcription engine via Whisper API if Otter.ai is unavailable.

Microsoft 365 Education A3 (upgrade from A1)

MicrosoftMicrosoft 365 Education A3Qty: 20 teacher users

$3.25/user/month ($65/month or $780/year for 20 users)

Provides enhanced Microsoft Teams transcription with Intelligent Recap, advanced meeting recording with automatic transcription saved to OneDrive, and improved compliance features including retention policies and eDiscovery for conference transcripts. Required for Teams Premium transcription features. MSP resells through CSP program. License type: per-user SaaS, annual subscription via CSP. Many schools already have A1 (free); this is an incremental upgrade.

No additional cost if already licensed. If not, approximately $2-$4/student/year for district licensing.

Distribution platform for sharing meeting note summaries with parents post-conference. Integration via email/webhook to automatically send the AI-generated meeting summary to the parent's preferred communication channel. Most districts already use ParentSquare or similar (Remind, ClassDojo) for parent communication.

$0 additional (included in M365 A3 license)

Workflow automation engine that orchestrates the post-conference pipeline: triggers when a Teams meeting recording completes, calls the OpenAI API for structured summarization, saves formatted notes to SharePoint, and optionally sends parent notification via email or ParentSquare webhook.

Prerequisites

  • Microsoft 365 Education tenant (A1 minimum, A3 recommended) with Teams enabled for all participating teachers — verify at https://admin.microsoft.com under Licensing
  • Reliable Wi-Fi coverage in all conference rooms with minimum 5 Mbps upload speed per room — run speed tests from each conference location using speedtest.net and document results
  • School/district IT administrator access to Microsoft 365 Admin Center, Azure AD (Entra ID), and SharePoint Admin Center
  • OpenAI API account with billing configured and API key generated — sign up at https://platform.openai.com if not already available
  • Otter.ai Business account provisioned with admin access — contact Otter.ai sales for education volume pricing at sales@otter.ai
  • FERPA-compliant Data Processing Agreement (DPA) executed between the school district and Otter.ai — Otter provides a standard Student Data Privacy Agreement at https://otter.ai/privacy-policy
  • FERPA-compliant DPA executed between the school district and OpenAI — use OpenAI's DPA template at https://openai.com/policies/data-processing-addendum
  • Written recording consent form approved by district legal counsel — must comply with state two-party consent laws (mandatory in CA, CT, DE, FL, IL, MD, MA, MI, MT, NH, OR, PA, WA)
  • District records retention policy documented and shared with MSP team — transcripts will follow the same retention schedule as other educational records (typically 5-7 years minimum)
  • SharePoint site or document library designated for conference transcript storage with appropriate permissions structure aligned to school organizational hierarchy
  • PowerSchool, Infinite Campus, or other Student Information System (SIS) admin credentials if SIS integration is in scope — verify API availability
  • A minimum of 3-5 volunteer teachers identified for the pilot phase, ideally including at least one special education teacher
  • Network firewall rules verified to allow outbound HTTPS traffic to: otter.ai, api.openai.com, graph.microsoft.com, login.microsoftonline.com
  • Conference room inventory completed: list all rooms used for parent-teacher conferences with their current AV equipment, network connectivity status, and available USB/power outlets

Installation Steps

...

Step 1: Configure SharePoint Document Library for Transcript Storage

Create a dedicated SharePoint site and document library structure to store all conference transcripts and meeting notes. This becomes the centralized, access-controlled repository for FERPA-compliant record keeping. The library structure should mirror the school's organizational hierarchy: School > Grade Level > Teacher > Academic Year > Individual Conference Notes.

Connect to SharePoint Online and provision the Conference Notes document library with required metadata columns
powershell
# Connect to SharePoint Online via PowerShell
Install-Module -Name PnP.PowerShell -Scope CurrentUser
Connect-PnPOnline -Url https://TENANT.sharepoint.com/sites/admin -Interactive

# Create the Conference Notes site
New-PnPSite -Type TeamSite -Title 'Conference Notes Archive' -Alias 'conferencenotes' -Description 'FERPA-protected parent-teacher conference transcripts and meeting notes'

# Connect to the new site
Connect-PnPOnline -Url https://TENANT.sharepoint.com/sites/conferencenotes -Interactive

# Create document library
New-PnPList -Title 'Conference Transcripts' -Template DocumentLibrary

# Add custom metadata columns for organization
Add-PnPField -List 'Conference Transcripts' -DisplayName 'Teacher Name' -InternalName 'TeacherName' -Type Text -Required
Add-PnPField -List 'Conference Transcripts' -DisplayName 'Student Name' -InternalName 'StudentName' -Type Text -Required
Add-PnPField -List 'Conference Transcripts' -DisplayName 'Conference Date' -InternalName 'ConferenceDate' -Type DateTime -Required
Add-PnPField -List 'Conference Transcripts' -DisplayName 'Grade Level' -InternalName 'GradeLevel' -Type Choice -Choices 'K','1','2','3','4','5','6','7','8','9','10','11','12'
Add-PnPField -List 'Conference Transcripts' -DisplayName 'Conference Type' -InternalName 'ConferenceType' -Type Choice -Choices 'Regular P-T Conference','IEP Meeting','Behavioral','Academic Concern','Other'
Add-PnPField -List 'Conference Transcripts' -DisplayName 'Consent Obtained' -InternalName 'ConsentObtained' -Type Boolean -Required

# Apply retention label (requires M365 compliance center setup)
# Navigate to Microsoft Purview > Records Management > File Plan
# Create retention label 'Education Record - 7 Year' with 7-year retention period
# Publish label to the Conference Transcripts library
Note

Replace TENANT with the school's actual Microsoft 365 tenant name. The retention label step requires Microsoft Purview compliance center access, which is available in M365 A3/A5. If using A1, implement manual retention tracking via a SharePoint column 'Retention Expiry Date' instead. Ensure the site permissions are restricted: only teachers can see their own folders, principals/admins can see all. Use SharePoint permission inheritance breaking at the teacher folder level.

Step 2: Configure Access Controls and Security Groups

Set up Azure AD (Entra ID) security groups and SharePoint permission levels to enforce FERPA-compliant access controls. Only staff with legitimate educational interest should access specific student conference records. Create groups for each role level and apply them to the SharePoint library.

powershell
# Connect to Microsoft Graph / Azure AD
Connect-MgGraph -Scopes 'Group.ReadWrite.All','User.Read.All'

# Create security groups
New-MgGroup -DisplayName 'Conference Notes - Teachers' -MailEnabled:$false -MailNickname 'conf-teachers' -SecurityEnabled:$true -Description 'All teachers who conduct parent-teacher conferences'

New-MgGroup -DisplayName 'Conference Notes - Administrators' -MailEnabled:$false -MailNickname 'conf-admins' -SecurityEnabled:$true -Description 'Principals and assistant principals with full access to all conference notes'

New-MgGroup -DisplayName 'Conference Notes - Special Education' -MailEnabled:$false -MailNickname 'conf-sped' -SecurityEnabled:$true -Description 'Special education staff with access to IEP-related conference notes'

# Add users to groups (repeat for each user)
$teacherGroupId = (Get-MgGroup -Filter "displayName eq 'Conference Notes - Teachers'").Id
$userId = (Get-MgUser -Filter "userPrincipalName eq 'teacher@school.edu'").Id
New-MgGroupMember -GroupId $teacherGroupId -DirectoryObjectId $userId

# Apply permissions in SharePoint
Connect-PnPOnline -Url https://TENANT.sharepoint.com/sites/conferencenotes -Interactive

# Break inheritance on the document library
Set-PnPList -Identity 'Conference Transcripts' -BreakRoleInheritance -CopyRoleAssignments:$false

# Grant Administrators full control
Set-PnPGroupPermissions -Identity 'Conference Notes - Administrators' -List 'Conference Transcripts' -AddRole 'Full Control'

# Grant Teachers contribute access (they will be further restricted to their own folders via folder-level permissions)
Set-PnPGroupPermissions -Identity 'Conference Notes - Teachers' -List 'Conference Transcripts' -AddRole 'Contribute'
Note

For larger districts, consider using Azure AD dynamic groups that auto-populate based on job title or department attributes synced from the HR system. Each teacher should only see their own conference folders — use folder-level permission breaking or consider using SharePoint content types with audience targeting. Document all permission assignments in the handoff documentation for annual access reviews.

Step 3: Deploy and Configure Speakerphone Hardware in Conference Rooms

Physically install the Jabra Speak2 75 speakerphones in each dedicated conference room and the Anker PowerConf S330 units for teacher classrooms. Configure firmware, verify audio quality, and label each device with room assignment.

1
Unbox each Jabra Speak2 75 and connect via USB-C to the conference room laptop
2
Download and install Jabra Direct for firmware management — Download URL: https://www.jabra.com/software-and-services/jabra-direct
3
Update firmware via Jabra Direct: Open Jabra Direct > Device tab > Check for Updates > Install
4
For Anker PowerConf S330 units: Connect via USB-A to teacher laptop/desktop. No driver installation required on Windows 10/11 or macOS. Verify device appears as audio input in system Sound Settings
5
Test audio capture quality from each device: On Windows, open Sound Recorder (Win+S > type 'Sound Recorder'). Record a 30-second test with two people speaking at normal conference volume. Play back and verify both speakers are clearly audible
6
Set the speakerphone as default audio input in Teams: Open Teams > Settings (gear icon) > Devices. Set 'Audio devices' to 'Jabra Speak2 75' or 'Anker PowerConf S330'. Test with 'Make a test call' button
7
For Otter.ai desktop app audio routing: Open Otter.ai desktop app > Settings > Audio. Select the USB speakerphone as the microphone input. Verify the audio level meter responds to speech
Note

Place the Jabra Speak2 75 in the center of the conference table, approximately equidistant from all seating positions. For the Anker S330 in classrooms, mount or place it on the teacher's desk facing the parent seating area. Avoid placement near HVAC vents, windows with traffic noise, or fluorescent light ballasts that may introduce electrical hum. Label each device with an asset tag and room number. Keep the original packaging for warranty purposes — Jabra has a 2-year warranty, Anker has 18 months. Configure the Zoom H1n backup recorders: set recording format to MP3 128kbps (conserves storage while maintaining quality), enable auto-level, and insert a 32GB microSD card (provides ~370 hours of recording at MP3 128kbps).

Step 4: Provision and Configure Otter.ai Business Accounts

Set up the Otter.ai Business workspace for the school, provision teacher accounts, configure organization-wide settings for education use, and establish the integration with Microsoft Teams and calendar systems.

1
Navigate to https://otter.ai/signup and create the organization admin account. Use the school's IT admin email (admin@school.edu). Select 'Business' plan during signup. Apply education discount code if available (contact sales@otter.ai).
2
In Otter.ai Admin Console (https://otter.ai/admin): Organization Settings > Organization Name: [School Name] | Security > Enable SSO via Azure AD (if available on Business plan) | Security > Enable 2FA for all accounts.
3
Provision teacher accounts via bulk invite: Go to Admin > Members > Invite Members. Upload CSV with columns: email, first_name, last_name, role. Set role as 'Member' for teachers, 'Admin' for IT staff.
4
Configure meeting integration: Each teacher logs into otter.ai and connects their calendar: Settings > Calendar > Connect Microsoft 365 / Google Workspace | Settings > Meeting apps > Enable 'Auto-join Microsoft Teams meetings' | Settings > Meeting apps > Enable 'Auto-join Zoom meetings' (if used).
5
Configure in-person recording defaults: Settings > Recording > Default language: English (US) | Settings > Recording > Enable speaker identification | Settings > Recording > Auto-detect speakers: ON.
6
Configure sharing and privacy defaults (critical for FERPA): Admin > Workspace Settings > Default sharing: 'Only me' (private by default) | Admin > Workspace Settings > Disable 'Share with workspace' by default | Admin > Workspace Settings > Enable audit log.
7
Test the integration: Schedule a test Teams meeting. Verify Otter.ai bot joins automatically. Confirm transcript appears in teacher's Otter.ai workspace after meeting.
Critical

Ensure the FERPA Data Processing Agreement is fully executed with Otter.ai BEFORE provisioning any accounts or processing any student data. The DPA must designate Otter.ai as a 'school official' with 'legitimate educational interest' under the school official exception to FERPA. Keep default sharing set to 'Only me' to prevent accidental disclosure of student information between teachers. Teachers should be trained to NEVER share Otter transcripts via public links. If SSO is not available on the Business plan, enforce strong password requirements (12+ characters, no reuse) and mandatory 2FA.

Step 5: Configure OpenAI API for Custom Meeting Notes Generation

Set up the OpenAI API account, configure API keys with appropriate usage limits, and deploy the custom meeting notes generation prompt that transforms raw transcripts into structured school-format meeting notes. This is the core AI post-processing component that adds education-specific value beyond basic transcription.

1
Sign up / log in at https://platform.openai.com
2
Navigate to Settings > Billing > Add payment method
3
Set monthly usage limit: $25/month (sufficient for ~500 conferences/month)
4
Set email alerts at $10 and $20
5
Navigate to API Keys > Create new secret key
6
Name: 'conference-notes-production'
7
Permissions: 'All' (or restrict to 'Model capabilities: write' if granular permissions available)
8
Copy the key immediately — it will not be shown again
Store the API key securely
bash
# Azure Key Vault (recommended) or .env file

# Store the API key in Azure Key Vault (recommended for M365 environments):
az keyvault create --name school-conference-kv --resource-group school-rg --location eastus
az keyvault secret set --vault-name school-conference-kv --name openai-api-key --value 'sk-...'

# OR in a .env file on the automation server (less secure, for simpler setups):
echo 'OPENAI_API_KEY=sk-...' >> /opt/conference-notes/.env
chmod 600 /opt/conference-notes/.env
Test the API connection and verify a valid completion is returned with no errors
bash
# Test the API connection:
curl https://api.openai.com/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer sk-...' \
  -d '{
    "model": "gpt-5.4",
    "messages": [{"role": "user", "content": "Say hello"}],
    "max_tokens": 50
  }'
Note

IMPORTANT: The OpenAI API key grants access to a billable service. Store it in Azure Key Vault for production deployments — never commit it to source control or share it via email. The $25/month budget limit provides a safety net; typical usage for a school of 500 students will be $5-$15/month. If the school district has concerns about student data being processed by OpenAI, review OpenAI's data usage policy: as of 2024, API data is NOT used for model training. The DPA with OpenAI should explicitly confirm this. For maximum data sovereignty, consider the self-hosted Whisper alternative described in the alternatives section.

Step 6: Build the Post-Conference Notes Processing Pipeline

Deploy the custom Python-based automation script that takes an Otter.ai transcript export (or raw transcript text), sends it to GPT-5.4 with an education-specific system prompt, and generates structured meeting notes in the school's standardized format. This script can be triggered manually, via cron job, or via Power Automate webhook.

Set up processing environment (Option A: Local server or Option B: Azure Function)
bash
# 1. Set up the processing environment on the automation server or Azure Function
# Option A: Local server
sudo apt update && sudo apt install -y python3.11 python3.11-venv
python3.11 -m venv /opt/conference-notes/venv
source /opt/conference-notes/venv/bin/activate
pip install openai python-docx requests python-dotenv

# Option B: Azure Function (recommended for M365 environments)
# Install Azure Functions Core Tools
npm install -g azure-functions-core-tools@4 --unsafe-perm true
func init ConferenceNotesProcessor --python
cd ConferenceNotesProcessor
pip install openai python-docx
Create the main processing script (process_transcript.py)
bash
cat > /opt/conference-notes/process_transcript.py << 'PYTHON_SCRIPT'
import os
import json
import sys
from datetime import datetime
from openai import OpenAI
from docx import Document
from dotenv import load_dotenv

load_dotenv()
client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'))

SYSTEM_PROMPT = '''You are an AI assistant that converts parent-teacher conference transcripts into structured meeting notes for K-12 school record keeping. You must:

1. Extract and format the following sections:
   - MEETING INFORMATION: Date, time, duration, location, teacher name, parent/guardian name(s), student name, grade level
   - ACADEMIC PROGRESS: Summary of academic performance discussed, specific subjects mentioned, grades or assessment results referenced
   - BEHAVIORAL/SOCIAL-EMOTIONAL: Any behavioral observations, social skills discussion, peer relationships
   - STRENGTHS & ACCOMPLISHMENTS: Positive observations and achievements discussed
   - AREAS FOR IMPROVEMENT: Specific areas where growth is needed, with context from the discussion
   - ACTION ITEMS: Numbered list with responsible party (teacher/parent/student) and target date for each
   - FOLLOW-UP: Next meeting date if scheduled, preferred communication method, any referrals discussed
   - ADDITIONAL NOTES: Any other relevant points from the conference

2. Rules:
   - Use professional, neutral language appropriate for educational records
   - Do NOT include verbatim quotes unless they are critical (e.g., a parent\'s specific request)
   - Do NOT include off-topic conversation, pleasantries, or small talk
   - Flag any mentions of bullying, abuse, self-harm, or safety concerns with [ADMINISTRATOR ATTENTION REQUIRED]
   - If IEP, 504 plan, or special education services are mentioned, flag with [SPECIAL EDUCATION REFERENCE]
   - Maintain factual accuracy — do not infer or fabricate details not present in the transcript
   - If the transcript is unclear or inaudible in sections, note [INAUDIBLE SECTION] rather than guessing
   - Output in clean Markdown format
'''

def process_transcript(transcript_text, metadata=None):
    if metadata is None:
        metadata = {}
    
    user_message = f"""Please process the following parent-teacher conference transcript into structured meeting notes.

Known metadata:
- School: {metadata.get('school_name', 'Not specified')}
- Teacher: {metadata.get('teacher_name', 'Extract from transcript')}
- Date: {metadata.get('conference_date', 'Extract from transcript')}
- Student: {metadata.get('student_name', 'Extract from transcript')}
- Grade: {metadata.get('grade_level', 'Extract from transcript')}
- Conference Type: {metadata.get('conference_type', 'Regular Parent-Teacher Conference')}

TRANSCRIPT:
---
{transcript_text}
---

Generate the structured meeting notes now."""
    
    response = client.chat.completions.create(
        model='gpt-5.4',
        messages=[
            {'role': 'system', 'content': SYSTEM_PROMPT},
            {'role': 'user', 'content': user_message}
        ],
        temperature=0.2,
        max_tokens=3000
    )
    
    return response.choices[0].message.content

def save_as_docx(notes_markdown, output_path, metadata):
    doc = Document()
    doc.add_heading('Parent-Teacher Conference Notes', level=0)
    doc.add_paragraph(f"Generated: {datetime.now().strftime('%Y-%m-%d %H:%M')} | AI-Assisted Transcription")
    doc.add_paragraph('---')
    
    for line in notes_markdown.split('\n'):
        if line.startswith('# '):
            doc.add_heading(line[2:], level=1)
        elif line.startswith('## '):
            doc.add_heading(line[3:], level=2)
        elif line.startswith('### '):
            doc.add_heading(line[4:], level=3)
        elif line.startswith('- '):
            doc.add_paragraph(line[2:], style='List Bullet')
        elif line.strip().startswith('[ADMINISTRATOR ATTENTION REQUIRED]'):
            p = doc.add_paragraph()
            run = p.add_run(line)
            run.bold = True
            run.font.color.rgb = None  # Will appear in default color; style as needed
        else:
            if line.strip():
                doc.add_paragraph(line)
    
    doc.add_paragraph('---')
    doc.add_paragraph('DISCLAIMER: These notes were generated by AI from an audio transcription. They should be reviewed by the teacher for accuracy before being filed as official records. The original audio recording is retained per district retention policy.')
    
    doc.save(output_path)
    return output_path

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print('Usage: python process_transcript.py <transcript_file.txt> [metadata.json]')
        sys.exit(1)
    
    with open(sys.argv[1], 'r') as f:
        transcript = f.read()
    
    metadata = {}
    if len(sys.argv) > 2:
        with open(sys.argv[2], 'r') as f:
            metadata = json.load(f)
    
    notes = process_transcript(transcript, metadata)
    print(notes)
    
    output_file = sys.argv[1].replace('.txt', '_notes.docx')
    save_as_docx(notes, output_file, metadata)
    print(f'\nWord document saved to: {output_file}')
PYTHON_SCRIPT

Education Conference Notes — System Prompt (embedded in process_transcript.py)

You are an AI assistant that converts parent-teacher conference transcripts into structured meeting notes for K-12 school record keeping. You must: 1. Extract and format the following sections: - MEETING INFORMATION: Date, time, duration, location, teacher name, parent/guardian name(s), student name, grade level - ACADEMIC PROGRESS: Summary of academic performance discussed, specific subjects mentioned, grades or assessment results referenced - BEHAVIORAL/SOCIAL-EMOTIONAL: Any behavioral observations, social skills discussion, peer relationships - STRENGTHS & ACCOMPLISHMENTS: Positive observations and achievements discussed - AREAS FOR IMPROVEMENT: Specific areas where growth is needed, with context from the discussion - ACTION ITEMS: Numbered list with responsible party (teacher/parent/student) and target date for each - FOLLOW-UP: Next meeting date if scheduled, preferred communication method, any referrals discussed - ADDITIONAL NOTES: Any other relevant points from the conference 2. Rules: - Use professional, neutral language appropriate for educational records - Do NOT include verbatim quotes unless they are critical (e.g., a parent's specific request) - Do NOT include off-topic conversation, pleasantries, or small talk - Flag any mentions of bullying, abuse, self-harm, or safety concerns with [ADMINISTRATOR ATTENTION REQUIRED] - If IEP, 504 plan, or special education services are mentioned, flag with [SPECIAL EDUCATION REFERENCE] - Maintain factual accuracy — do not infer or fabricate details not present in the transcript - If the transcript is unclear or inaudible in sections, note [INAUDIBLE SECTION] rather than guessing - Output in clean Markdown format
Sonnet 4.6
Create sample test transcript and run the processing script
bash
cat > /opt/conference-notes/test_transcript.txt << 'EOF'
Teacher: Good evening, thank you for coming in tonight. I'm Ms. Johnson, Tommy's 4th grade teacher.
Parent: Hi, thanks for having us. I'm Sarah, Tommy's mom, and this is my husband Dave.
Teacher: Great to meet you both. So Tommy has been doing really well in reading this quarter. He's reading at a 5th grade level now, which is above grade level.
Parent: Oh that's wonderful to hear!
Teacher: Yes, he really loves the chapter books we've been reading. Math is a bit of a different story though. He's struggling with multiplication facts, especially the 7s and 8s tables. He's currently at a C+ in math.
Parent: We've noticed that at home too. He gets frustrated with homework.
Teacher: I'd recommend 10 minutes of practice each night with flashcards or an app like Reflex Math. I can send home some resources.
Parent: That would be great.
Teacher: Behaviorally, Tommy is a great kid. He's kind to his classmates and participates well. Sometimes he talks a bit too much during independent work time, but it's not a major issue.
Parent: We'll talk to him about that.
Teacher: One more thing - I'd like to have him tested for the gifted program in reading. Would you be open to that?
Parent: Absolutely, what do we need to do?
Teacher: I'll send home the consent form next week. Let's plan to check in again in January to see how the math practice is going. You can always email me at jjohnson@school.edu.
Parent: Sounds good, thank you so much!
EOF

python3 /opt/conference-notes/process_transcript.py /opt/conference-notes/test_transcript.txt

# Verify output: should produce structured meeting notes and a .docx file
Note

The process_transcript.py script is the core custom AI component. It should be deployed either as a standalone script on a Linux server/VM, or ideally as an Azure Function that can be triggered by Power Automate when a new transcript file appears in the SharePoint library. The temperature is set to 0.2 for factual, consistent output — do not increase this. The safety flagging for administrator attention (bullying, abuse, self-harm) is critical and should be tested thoroughly during the pilot phase. Review the DISCLAIMER paragraph with the school's legal counsel and modify as needed.

Step 7: Configure Power Automate Workflow for End-to-End Automation

Create a Power Automate flow that orchestrates the complete post-conference pipeline: detects when a new transcript is uploaded to SharePoint, calls the OpenAI API to generate structured notes, saves the formatted notes back to SharePoint with proper metadata, and optionally notifies the teacher for review.

  • Flow Name: 'Conference Transcript to Meeting Notes' | Type: Automated Cloud Flow | Configure via: https://make.powerautomate.com
  • TRIGGER — Connector: SharePoint | Action: 'When a file is created (properties only)' | Site Address: https://TENANT.sharepoint.com/sites/conferencenotes | Library Name: Conference Transcripts | Folder: /Transcripts/Raw
  • STEP 1: Get file content — Action: SharePoint > Get file content | Site Address: [same as trigger] | File Identifier: [File Identifier from trigger]
  • STEP 2: Compose transcript text — Action: Data Operations > Compose | Input: base64ToString(body('Get_file_content')['$content'])
  • STEP 3: Call OpenAI API — Action: HTTP | Method: POST | URI: https://api.openai.com/v1/chat/completions | Headers: Content-Type: application/json, Authorization: Bearer [API Key from Azure Key Vault]
  • STEP 4: Parse JSON response — Action: Data Operations > Parse JSON | Content: body('HTTP') | Schema: use 'Generate from sample' with a sample OpenAI API response
  • STEP 5: Create the notes file in SharePoint — Action: SharePoint > Create file | Site Address: [same] | Folder Path: /Transcripts/Processed | File Name: @{triggerBody()?['{FilenameWithExtension}']}_notes.md | File Content: @{body('Parse_JSON')?['choices'][0]?['message']?['content']}
  • STEP 6: Update file metadata — Action: SharePoint > Update file properties | Set TeacherName, StudentName, ConferenceDate, GradeLevel from trigger metadata | Set ConsentObtained: Yes
  • STEP 7: Send review notification to teacher — Action: Send an email (V2) - Office 365 Outlook | To: [Teacher email from metadata] | Subject: 'Conference Notes Ready for Review - @{triggerBody()?["StudentName"]}' | Body: 'Your parent-teacher conference notes have been generated and are ready for review. Please review for accuracy within 48 hours and mark as "Reviewed" in the document library. [Link to file]'
  • STEP 8: (Optional) Send summary to parent — Condition: If metadata field 'SendToParent' = true | Action: Send email with summarized notes (action items only, not full transcript)
STEP 3: OpenAI API request body for the HTTP action in Power Automate
json
{
  "model": "gpt-5.4",
  "messages": [
    {"role": "system", "content": "[PASTE SYSTEM_PROMPT FROM STEP 6]"},
    {"role": "user", "content": "Process this transcript: @{outputs('Compose')}"}
  ],
  "temperature": 0.2,
  "max_tokens": 3000
}
Note

This Power Automate flow is the recommended automation approach for M365-based schools. For Google Workspace schools, use Google Apps Script with similar logic triggering on new files in Google Drive. The HTTP action calling OpenAI may require a Power Automate Premium license ($15/user/month) for the HTTP connector — verify this with the school's current M365 licensing. Alternative: use the OpenAI connector available in the Power Platform connectors gallery if available in your region. Always ensure the API key is retrieved from Azure Key Vault rather than hardcoded in the flow. For the parent notification step, consult with the school about what information is appropriate to include — typically only action items and follow-up dates, NOT the full transcript.

Set up a digital consent collection system integrated with the school's existing parent communication platform. This ensures no recording begins without documented parental consent, which is legally mandatory in two-party consent states and a FERPA best practice everywhere.

  • Option A: Microsoft Forms consent workflow
  • 1. Create a Microsoft Form: Navigate to https://forms.office.com | Title: 'Parent-Teacher Conference Recording Consent' | Add fields: Student Full Name (required, text), Student Grade (required, choice), Teacher Name (required, choice), Parent/Guardian Full Name (required, text), 'I consent to audio recording and AI transcription of the parent-teacher conference' (required, choice: Yes/No), 'I understand that the transcript will be used for educational record keeping' (required, choice: Yes/No), 'I would like to receive a copy of the meeting summary' (optional, choice: Yes/No), Digital Signature (required, text), Date (required, date)
  • 2. Create Power Automate flow: 'When a new response is submitted' — Trigger: Microsoft Forms > When a new response is submitted | Action: Get response details | Condition: If consent = 'Yes' on both required consent fields → Yes: Update SharePoint list 'Consent Records' with student name, date, consent status → No: Send email to teacher noting parent declined recording
  • Option B: ParentSquare integration — If the school uses ParentSquare, create a permission slip:
  • 1. Log into ParentSquare admin
  • 2. Navigate to Forms > Create New Form
  • 3. Create 'Conference Recording Consent' form with equivalent fields
  • 4. Set distribution to go out 2 weeks before conference dates
  • 5. Export responses as CSV for record keeping
Create SharePoint list for consent tracking
powershell
Connect-PnPOnline -Url https://TENANT.sharepoint.com/sites/conferencenotes -Interactive
New-PnPList -Title 'Conference Consent Records' -Template GenericList
Add-PnPField -List 'Conference Consent Records' -DisplayName 'Student Name' -InternalName 'StudentName' -Type Text -Required
Add-PnPField -List 'Conference Consent Records' -DisplayName 'Parent Name' -InternalName 'ParentName' -Type Text -Required
Add-PnPField -List 'Conference Consent Records' -DisplayName 'Consent Given' -InternalName 'ConsentGiven' -Type Boolean -Required
Add-PnPField -List 'Conference Consent Records' -DisplayName 'Consent Date' -InternalName 'ConsentDate' -Type DateTime -Required
Add-PnPField -List 'Conference Consent Records' -DisplayName 'Academic Year' -InternalName 'AcademicYear' -Type Text
Add-PnPField -List 'Conference Consent Records' -DisplayName 'Teacher' -InternalName 'Teacher' -Type Text
Note

The consent form MUST be reviewed and approved by the school district's legal counsel before deployment. Language should be adapted based on the state's specific recording consent requirements. In two-party consent states (CA, CT, DE, FL, IL, MD, MA, MI, MT, NH, OR, PA, WA), all parties must affirmatively consent — a form that allows 'No' must result in the conference NOT being recorded. Create a clear visual indicator (e.g., a green/red card or desk tent) that teachers place during conferences to indicate whether recording is active. Teachers must be trained to check consent status BEFORE starting any recording. Consider making consent opt-in at the annual level (covering all conferences that school year) rather than per-conference to reduce administrative burden.

Step 9: Conduct Pilot Testing with Volunteer Teachers

Run a controlled pilot with 3-5 volunteer teachers over a 2-week period to validate the entire workflow end-to-end: audio capture quality, transcription accuracy, AI summarization quality, storage/access controls, and teacher satisfaction. Use actual parent-teacher conferences (with consent) or simulated conferences with staff role-playing.

1
Teacher verifies consent status in SharePoint list
2
Teacher starts Otter.ai recording (in-person) or enables Teams transcription (virtual)
3
Conference proceeds normally
4
After conference, teacher exports transcript from Otter.ai: Otter.ai > Conversation > Export > .txt format — then upload to SharePoint > Conference Transcripts > Transcripts > Raw > [TeacherFolder]
5
Power Automate triggers and generates meeting notes
6
Teacher receives email notification to review notes
7
Teacher reviews, makes corrections, marks as 'Reviewed'
  • Audio quality rating (1–5)
  • Transcription accuracy rating (1–5)
  • Meeting notes quality/usefulness rating (1–5)
  • Time saved compared to manual notes (estimated minutes)
  • Issues encountered (free text)
  • Suggestions for improvement (free text)
  • Would you recommend this to colleagues? (Yes/No)
  • Manually compare 3 transcripts against the audio for Word Error Rate (WER)
  • Target: <10% WER for clear audio in quiet rooms
  • Document results for the handoff report
Note

The pilot phase is CRITICAL — do not skip it. Schedule the pilot to coincide with an actual parent-teacher conference week if possible. If not, conduct simulated conferences with staff volunteers role-playing parents and teachers discussing fictional students. Ensure at least one pilot conference tests a challenging scenario: a noisy room, multiple speakers talking over each other, or a parent speaking accented English. This will reveal the real-world accuracy limitations. Common issues found during pilot: (1) speakerphone placed too far from a soft-spoken parent — solution: move the mic closer or add a second unit, (2) crosstalk from adjacent rooms — solution: close doors, use directional mic mode if available, (3) transcript attributes wrong speaker — solution: have Otter learn speaker profiles before the actual conferences.

Step 10: Train Staff and Roll Out to All Teachers

Conduct training sessions for all participating teachers, provide documentation, configure remaining accounts, and execute full school rollout. Training should cover the technology, the consent workflow, the review process, and FERPA responsibilities.

1
Schedule two 45-minute training sessions (cover all teachers across both). Recommended agenda: 5 min: Overview of the system and benefits | 10 min: Live demo of recording a conference (speakerphone + Otter.ai) | 5 min: Consent process walkthrough | 10 min: Reviewing and approving AI-generated meeting notes | 5 min: FERPA responsibilities and data handling | 5 min: Troubleshooting common issues | 5 min: Q&A
2
Create quick-reference guides: A. One-page 'How to Record a Conference' card (laminated, placed in each conference room) | B. One-page 'How to Review Meeting Notes' email-friendly PDF | C. FAQ document addressing common concerns: 'What if a parent says no to recording?' | 'What if the transcript has errors?' | 'Who can see my conference notes?' | 'What if I forget to start the recording?' | 'Can I delete a recording?'
3
Provision remaining Otter.ai accounts for all teachers (Repeat Step 4 commands for each teacher)
4
Create shared Teams channel: 'Conference Notes Support' — Pin quick-reference guides | Teachers can post questions | MSP monitors channel for support requests during first conference cycle
5
Configure monitoring dashboard: In SharePoint, create a view showing: Total conferences recorded this period | Notes pending teacher review (status != 'Reviewed') | Consent status by teacher/grade level | Any flagged items requiring administrator attention
Note

Schedule training 1-2 weeks before the next parent-teacher conference event for maximum relevance. Provide both in-person and recorded (video) training to accommodate absent teachers. The laminated quick-reference card for conference rooms is the single most impactful training artifact — invest time in making it clear and visual with screenshots. Designate one 'champion teacher' per grade level who received extra training and can assist peers. During the first full conference cycle, have the MSP technician on-site or on-call for real-time support. Expect 10-15% of teachers to have technical difficulties during their first recorded conference; this is normal and should decrease to <2% by the second cycle.

Custom AI Components

Conference Notes Generator System Prompt

Type: prompt The core GPT-5.4 system prompt that transforms raw parent-teacher conference transcripts into structured, FERPA-aware meeting notes suitable for educational record keeping. This prompt is engineered for consistency, safety flagging, and professional educational language. It is used by both the Python processing script and the Power Automate HTTP action.

Conference Notes Generator System Prompt

You are an AI assistant that converts parent-teacher conference transcripts into structured meeting notes for K-12 school record keeping. You must produce notes in the following exact format: # PARENT-TEACHER CONFERENCE NOTES ## MEETING INFORMATION - **Date:** [Extract from transcript or metadata] - **Duration:** [Estimate from transcript length] - **Location:** [Extract or state 'Not specified'] - **Teacher:** [Name] - **Parent/Guardian(s):** [Name(s)] - **Student:** [Name] - **Grade Level:** [Grade] - **Conference Type:** [Regular / IEP / Behavioral / Academic Concern] ## ACADEMIC PROGRESS [Summarize academic performance discussed. Include specific subjects, grades, assessment results, reading levels, or test scores mentioned. Use bullet points for clarity.] ## BEHAVIORAL & SOCIAL-EMOTIONAL [Summarize any behavioral observations, social skills, peer relationships, classroom conduct, or emotional well-being discussed. If not discussed, state 'Not addressed in this conference.'] ## STRENGTHS & ACCOMPLISHMENTS [List positive observations, achievements, improvements, and areas where the student excels.] ## AREAS FOR IMPROVEMENT [List specific areas needing growth with context from the discussion. Be factual and constructive.] ## ACTION ITEMS | # | Action Item | Responsible Party | Target Date | |---|---|---|---| | 1 | [Specific action] | [Teacher/Parent/Student] | [Date or timeframe] | ## FOLLOW-UP - **Next Meeting:** [Date if scheduled, or 'To be determined'] - **Preferred Communication:** [Email/phone/app mentioned] - **Referrals:** [Any referrals to specialists, counselors, gifted programs, etc.] ## ADDITIONAL NOTES [Any other relevant points not captured above.] ## FLAGS [Only include this section if applicable] - [ADMINISTRATOR ATTENTION REQUIRED]: [Description of concern — include this flag if ANY of the following are mentioned: bullying, harassment, abuse, neglect, self-harm, suicidal ideation, threats of violence, substance abuse, or any child safety concern] - [SPECIAL EDUCATION REFERENCE]: [Description — include this flag if IEP, 504 plan, special education evaluation, related services, accommodations, or modifications are discussed] - [PARENT REQUEST]: [Description — include this flag if the parent makes a specific formal request such as testing, program placement, schedule change, or meeting with administration] --- RULES YOU MUST FOLLOW: 1. Use professional, neutral, educational language appropriate for official school records 2. Do NOT include verbatim quotes unless they represent a specific formal request or critical statement 3. Do NOT include off-topic conversation, pleasantries, greetings, goodbyes, or small talk 4. NEVER fabricate, infer, or assume information not explicitly stated in the transcript 5. If a section of the transcript is unclear or marked [inaudible], note it as [Transcript unclear] rather than guessing 6. Keep the notes concise — aim for 300-600 words total 7. Always include the FLAGS section if any flags are triggered, even if the rest of the conference was routine 8. Format dates consistently as Month DD, YYYY 9. If the student's name is mentioned, use first name only in the body text (full name in header) 10. Do not include the parent's personal contact information (phone, address) in the notes — only communication preferences
Sonnet 4.6

Transcript Accuracy Validator

Type: skill A secondary AI call that validates the generated meeting notes against the original transcript to catch hallucinations, omissions, or misattributions. This acts as a quality assurance layer before the notes are saved to the official record. It compares key facts between the transcript and notes and reports discrepancies.

Implementation

Validation System Prompt

You are a quality assurance reviewer for AI-generated parent-teacher conference notes. Compare the generated notes against the original transcript and check for: 1. HALLUCINATIONS: Any facts, grades, names, dates, or action items in the notes that are NOT in the transcript 2. OMISSIONS: Any important topics, decisions, or action items from the transcript that are MISSING from the notes 3. MISATTRIBUTIONS: Any statements attributed to the wrong speaker 4. ACCURACY: Verify all grades, scores, dates, and specific claims match the transcript exactly Output a JSON object with this structure: { "validation_passed": true/false, "confidence_score": 0.0-1.0, "hallucinations": ["list of any fabricated details"], "omissions": ["list of any missing important details"], "misattributions": ["list of any speaker attribution errors"], "accuracy_issues": ["list of any factual mismatches"], "recommendation": "APPROVE" or "FLAG_FOR_REVIEW" or "REGENERATE" } Be strict — err on the side of flagging potential issues rather than missing them.
Sonnet 4.6
validate_notes() function — add to process_transcript.py
python
def validate_notes(transcript_text, generated_notes):
    """Validate generated meeting notes against original transcript for accuracy."""
    
    validation_prompt = '''You are a quality assurance reviewer for AI-generated parent-teacher conference notes. Compare the generated notes against the original transcript and check for:

1. HALLUCINATIONS: Any facts, grades, names, dates, or action items in the notes that are NOT in the transcript
2. OMISSIONS: Any important topics, decisions, or action items from the transcript that are MISSING from the notes
3. MISATTRIBUTIONS: Any statements attributed to the wrong speaker
4. ACCURACY: Verify all grades, scores, dates, and specific claims match the transcript exactly

Output a JSON object with this structure:
{
  "validation_passed": true/false,
  "confidence_score": 0.0-1.0,
  "hallucinations": ["list of any fabricated details"],
  "omissions": ["list of any missing important details"],
  "misattributions": ["list of any speaker attribution errors"],
  "accuracy_issues": ["list of any factual mismatches"],
  "recommendation": "APPROVE" or "FLAG_FOR_REVIEW" or "REGENERATE"
}

Be strict — err on the side of flagging potential issues rather than missing them.'''

    response = client.chat.completions.create(
        model='gpt-5.4',
        messages=[
            {'role': 'system', 'content': validation_prompt},
            {'role': 'user', 'content': f'ORIGINAL TRANSCRIPT:\n---\n{transcript_text}\n---\n\nGENERATED NOTES:\n---\n{generated_notes}\n---\n\nValidate the notes against the transcript.'}
        ],
        temperature=0.1,
        max_tokens=1000,
        response_format={'type': 'json_object'}
    )
    
    validation_result = json.loads(response.choices[0].message.content)
    
    if validation_result.get('recommendation') == 'REGENERATE':
        print('WARNING: Validation failed - notes should be regenerated')
        print(f'Issues: {json.dumps(validation_result, indent=2)}')
    elif validation_result.get('recommendation') == 'FLAG_FOR_REVIEW':
        print('NOTICE: Notes flagged for manual teacher review')
        print(f'Potential issues: {json.dumps(validation_result, indent=2)}')
    else:
        print(f'Validation passed with confidence: {validation_result.get("confidence_score", "N/A")}')
    
    return validation_result
Note

Integrate into the main workflow by calling validate_notes(transcript, notes) after process_transcript() returns. If recommendation is REGENERATE, retry up to 2 times. If still failing, save with a 'Requires Manual Review' flag in SharePoint metadata.

Parent Summary Email Generator

Type: prompt A separate, more concise prompt that generates a parent-friendly summary email from the full meeting notes. This version excludes internal school commentary, administrative flags, and sensitive observations — providing parents only with the agreed-upon action items, next steps, and positive highlights appropriate for direct parent communication.

Implementation:

Parent Summary Email Generator

SYSTEM PROMPT FOR PARENT SUMMARY: You are an AI assistant that creates a friendly, concise email summary for parents after a parent-teacher conference. You will receive the full internal meeting notes. Your job is to create a warm, professional email that includes ONLY: 1. A brief thank-you for attending 2. 2-3 highlight points about the student's strengths/progress (keep positive) 3. Agreed-upon action items with responsible parties and dates 4. Next steps and follow-up plan 5. Teacher's contact information for questions RULES: - DO NOT include any [ADMINISTRATOR ATTENTION REQUIRED] flagged content - DO NOT include any [SPECIAL EDUCATION REFERENCE] content (these require separate formal communication) - DO NOT include specific grades or test scores (direct parents to the portal instead) - DO NOT include behavioral concerns unless they were explicitly agreed to be shared with the parent during the conference - Keep the tone warm, collaborative, and encouraging - Keep the email under 200 words - Use the student's first name - Format action items as a numbered list - End with an invitation to reach out with questions Format: Subject: Conference Follow-Up: [Student First Name] - [Date] Dear [Parent Name], [Body] Warm regards, [Teacher Name] [School Name] [Contact Information]
Sonnet 4.6
USAGE (add to process_transcript.py)
python
def generate_parent_email(meeting_notes, teacher_email, school_name):
    response = client.chat.completions.create(
        model='gpt-5.4',
        messages=[
            {'role': 'system', 'content': PARENT_SUMMARY_PROMPT},
            {'role': 'user', 'content': f'Generate a parent email summary from these meeting notes:\n\n{meeting_notes}\n\nTeacher email: {teacher_email}\nSchool: {school_name}'}
        ],
        temperature=0.3,
        max_tokens=500
    )
    return response.choices[0].message.content

Type: integration A lightweight integration component that checks the SharePoint consent records list before allowing a recording to proceed. This is implemented as a Power Automate flow that teachers trigger via a Teams Adaptive Card before each conference, ensuring no recording begins without verified consent.

Implementation:

json
POWER AUTOMATE FLOW SPECIFICATION:

Flow Name: 'Check Conference Consent'
Trigger Type: Manual trigger from Teams Adaptive Card

Adaptive Card JSON (deploy to Teams channel or personal app):
{
  "type": "AdaptiveCard",
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.5",
  "body": [
    {
      "type": "TextBlock",
      "text": "Conference Recording Consent Check",
      "weight": "Bolder",
      "size": "Large"
    },
    {
      "type": "Input.Text",
      "id": "studentName",
      "label": "Student Full Name",
      "isRequired": true,
      "placeholder": "Enter student name"
    },
    {
      "type": "Input.ChoiceSet",
      "id": "gradeLevel",
      "label": "Grade Level",
      "isRequired": true,
      "choices": [
        {"title": "K", "value": "K"},
        {"title": "1", "value": "1"},
        {"title": "2", "value": "2"},
        {"title": "3", "value": "3"},
        {"title": "4", "value": "4"},
        {"title": "5", "value": "5"},
        {"title": "6", "value": "6"},
        {"title": "7", "value": "7"},
        {"title": "8", "value": "8"}
      ]
    }
  ],
  "actions": [
    {
      "type": "Action.Submit",
      "title": "Check Consent Status",
      "data": {"action": "checkConsent"}
    }
  ]
}

Flow Logic:
1. Trigger: When Adaptive Card action is submitted
2. Get items from SharePoint list 'Conference Consent Records' where StudentName = input studentName AND AcademicYear = current year
3. Condition: If item found AND ConsentGiven = true
   - YES: Reply to Adaptive Card with green checkmark: '✅ CONSENT VERIFIED for [Student Name]. Recording may proceed. Consent given by [Parent Name] on [Date].'
   - NO (consent denied): Reply with red X: '❌ CONSENT DENIED for [Student Name]. DO NOT record this conference. Take manual notes instead.'
   - NO (no record found): Reply with warning: '⚠️ NO CONSENT RECORD for [Student Name]. Recording is NOT permitted. Send consent form to parent and take manual notes for this conference.'
4. Log the consent check to a SharePoint audit list with timestamp, teacher name, student name, and result

Otter.ai to SharePoint Transcript Sync

Type: workflow An automated workflow that periodically pulls completed transcripts from Otter.ai and uploads them to the SharePoint document library, triggering the downstream meeting notes generation pipeline. This eliminates the manual export step for teachers.

Implementation

IMPLEMENTATION OPTION A: Python script running as a scheduled task (cron/Task Scheduler)
python
import os
import json
import requests
from datetime import datetime, timedelta
from dotenv import load_dotenv

load_dotenv()

OTTER_API_BASE = 'https://otter.ai/forward/api/v1'  # Note: Otter.ai API access requires Business plan
OTTER_EMAIL = os.getenv('OTTER_EMAIL')
OTTER_PASSWORD = os.getenv('OTTER_PASSWORD')
SHAREPOINT_SITE_URL = os.getenv('SHAREPOINT_SITE_URL')  # e.g., https://tenant.sharepoint.com/sites/conferencenotes
SHAREPOINT_CLIENT_ID = os.getenv('SHAREPOINT_CLIENT_ID')
SHAREPOINT_CLIENT_SECRET = os.getenv('SHAREPOINT_CLIENT_SECRET')

def get_otter_speeches(since_hours=24):
    """Fetch recent Otter.ai transcripts.
    NOTE: Otter.ai does not have a public API as of July 2025.
    This implementation uses their internal API endpoints which may change.
    RECOMMENDED ALTERNATIVE: Use Otter.ai webhook notifications if available on Business plan,
    or instruct teachers to use the manual export workflow.
    """
    # Alternative approach using Otter.ai export:
    # 1. Teachers click Export > .txt in Otter.ai after each conference
    # 2. Save to a designated OneDrive/SharePoint sync folder
    # 3. Power Automate detects the new file and triggers processing
    pass

def upload_to_sharepoint(file_content, filename, metadata):
    """Upload transcript to SharePoint via Microsoft Graph API."""
    # Get access token
    token_url = f'https://login.microsoftonline.com/{os.getenv("TENANT_ID")}/oauth2/v2.0/token'
    token_response = requests.post(token_url, data={
        'grant_type': 'client_credentials',
        'client_id': SHAREPOINT_CLIENT_ID,
        'client_secret': SHAREPOINT_CLIENT_SECRET,
        'scope': 'https://graph.microsoft.com/.default'
    })
    access_token = token_response.json()['access_token']
    
    # Upload file
    site_id = os.getenv('SHAREPOINT_SITE_ID')
    drive_id = os.getenv('SHAREPOINT_DRIVE_ID')
    upload_url = f'https://graph.microsoft.com/v1.0/sites/{site_id}/drives/{drive_id}/root:/Transcripts/Raw/{filename}:/content'
    
    headers = {
        'Authorization': f'Bearer {access_token}',
        'Content-Type': 'text/plain'
    }
    
    response = requests.put(upload_url, headers=headers, data=file_content.encode('utf-8'))
    
    if response.status_code in [200, 201]:
        print(f'Successfully uploaded {filename} to SharePoint')
        return response.json()
    else:
        print(f'Failed to upload {filename}: {response.status_code} {response.text}')
        return None

if __name__ == '__main__':
    print('Transcript sync job running at', datetime.now().isoformat())
    # In practice, this script monitors the local sync folder for new .txt exports
    # and uploads them to SharePoint with appropriate metadata
Note

IMPLEMENTATION OPTION B (RECOMMENDED): Power Automate with OneDrive sync folder

1
Trigger: When a file is created in OneDrive folder '/Otter Exports/' (Teachers configure Otter.ai to auto-export to this folder, or manually save exports here)
2
Action: Copy file to SharePoint > Conference Transcripts > Transcripts > Raw
3
Action: Parse filename for teacher name and date (naming convention: YYYY-MM-DD_TeacherLastName_StudentLastName.txt)
4
Action: Update SharePoint metadata fields
5
Action: Delete original from OneDrive export folder (keep only the SharePoint copy)
6
This triggers the existing 'Conference Transcript to Meeting Notes' flow from Step 7

Testing & Validation

  • AUDIO QUALITY TEST: In each conference room, place the Jabra Speak2 75 at the center of the table with two people seated at opposite ends (4-6 feet apart). Record a 2-minute conversation via Otter.ai where both people speak at normal volume. Verify the transcript achieves >90% word accuracy and correctly identifies both speakers. Repeat with background noise (open door to hallway) and verify accuracy stays above 85%.
  • TRANSCRIPTION ACCURACY TEST: Record a 10-minute scripted conversation that includes education-specific vocabulary (IEP, 504, differentiated instruction, formative assessment, grade-level benchmarks, Lexile score). Compare the Otter.ai transcript word-by-word against the script. Calculate Word Error Rate (WER). Acceptance criteria: WER < 10% for clear audio conditions.
  • AI NOTES GENERATION TEST: Feed the test transcript from Step 6 through the process_transcript.py script. Verify the output contains all required sections (Meeting Information, Academic Progress, Behavioral/Social-Emotional, Strengths, Areas for Improvement, Action Items, Follow-Up, Additional Notes). Verify no hallucinated information is present. Verify the action items table correctly identifies responsible parties and dates.
  • SAFETY FLAGGING TEST: Create a test transcript that includes mentions of bullying, self-harm, and IEP evaluation. Run it through the AI notes generator. Verify that [ADMINISTRATOR ATTENTION REQUIRED] and [SPECIAL EDUCATION REFERENCE] flags appear in the output. This is a critical safety test — the system must NEVER miss these flags.
  • CONSENT WORKFLOW TEST: Submit the Adaptive Card consent check for three scenarios: (1) a student with verified consent — expect green checkmark, (2) a student whose parent declined — expect red denial, (3) a student with no consent record — expect yellow warning. Verify all three responses are correct and logged in the audit list.
  • POWER AUTOMATE PIPELINE TEST: Upload a .txt transcript file to the SharePoint 'Transcripts/Raw' folder. Verify within 5 minutes that: (1) the Power Automate flow triggers, (2) a processed notes file appears in 'Transcripts/Processed', (3) the teacher receives a review notification email, (4) all SharePoint metadata columns are populated correctly.
  • FERPA ACCESS CONTROL TEST: Log in as Teacher A and verify they can see only their own conference folders and transcripts. Log in as Teacher B and verify no access to Teacher A's documents. Log in as a Principal account and verify access to all teacher folders. Log in as a student or parent account (if applicable) and verify zero access to the Conference Notes site.
  • PARENT EMAIL SUMMARY TEST: Generate a parent summary email from a set of meeting notes that contain an [ADMINISTRATOR ATTENTION REQUIRED] flag and specific test scores. Verify the parent email does NOT contain the admin flag content and does NOT include specific scores. Verify the tone is warm and professional and the email is under 200 words.
  • BACKUP RECORDING TEST: Simulate a network outage by disconnecting the conference room laptop from Wi-Fi. Record a conference using the Zoom H1n backup recorder. After 'restoring' connectivity, transfer the audio file via USB, upload to Otter.ai for transcription, and verify the full pipeline completes successfully.
  • END-TO-END TIMING TEST: Record a 30-minute simulated conference from start to finish and measure: (1) time from conference end to transcript availability — target: <5 minutes, (2) time from transcript upload to AI notes generation — target: <3 minutes, (3) total time from conference end to teacher receiving review notification — target: <10 minutes.

Client Handoff

The client handoff should be conducted as a 90-minute on-site session with the school principal, IT coordinator, and 2-3 teacher representatives. Cover the following topics in order:

1
SYSTEM OVERVIEW (15 min): Walk through the complete workflow diagram — from speakerphone capture through final notes in SharePoint — so all stakeholders understand the data flow. Show where audio data goes and who can access it at each stage.
2
COMPLIANCE REVIEW (15 min): Review the consent form process, FERPA data handling procedures, and who has signed DPAs. Leave behind a printed Compliance Checklist with all items checked off. Confirm the records retention policy is documented and applied to the SharePoint library.
3
LIVE DEMONSTRATION (20 min): Conduct a live mock conference recording with the principal and a teacher volunteer. Walk through the entire process: check consent, start recording, conduct 5-minute mock conference, stop recording, show transcript appearing, show AI notes being generated, show teacher review process, show final notes in SharePoint.
4
TEACHER QUICK-START GUIDE REVIEW (10 min): Walk through the laminated quick-reference card placed in each conference room. Ensure teachers know the 4-step process: (1) Check consent, (2) Start recording, (3) Conduct conference normally, (4) Review AI notes within 48 hours.
5
TROUBLESHOOTING GUIDE (10 min): Review common issues and solutions: speakerphone not detected (unplug/replug USB), Otter.ai not recording (check microphone permissions), Power Automate not triggering (check file naming convention), poor transcription accuracy (move speakerphone closer to soft-spoken participant). Leave behind a printed troubleshooting guide.
6
ADMIN DASHBOARD WALKTHROUGH (10 min): Show the principal/IT coordinator the SharePoint views for monitoring: conferences recorded, notes pending review, flagged items requiring attention, consent coverage rates. Show how to run a basic report.
7
SUPPORT AND ESCALATION (10 min): Document and review: MSP support contact information, expected response times (4-hour for urgent during conference weeks, next business day for routine), how to submit a support ticket, quarterly review meeting schedule. Leave behind a laminated support card for the IT coordinator's office.

Documentation to Leave Behind

  • Laminated Conference Room Quick-Reference Cards (one per room)
  • Printed Teacher Quick-Start Guide (one per teacher)
  • Printed Troubleshooting Guide (IT coordinator + principal)
  • Compliance Checklist (signed by MSP and school admin)
  • DPA copies (Otter.ai, OpenAI)
  • System Architecture Diagram
  • Admin credential sheet (sealed envelope to IT coordinator)
  • Support contact card with MSP phone, email, and ticket portal URL

Success Criteria to Review Together

Maintenance

ONGOING MSP RESPONSIBILITIES:

Weekly (15 minutes)

  • Monitor Power Automate flow run history for failures — check https://make.powerautomate.com > Flow runs. Investigate any failed runs and reprocess if needed.
  • Check OpenAI API usage dashboard for unexpected cost spikes at https://platform.openai.com/usage
  • Review SharePoint 'Pending Review' view to identify any notes that teachers haven't reviewed within 7 days — send a reminder to the school IT coordinator

Monthly (1 hour)

  • Review Otter.ai usage metrics: active users, total minutes transcribed, storage consumption. Report to school administration.
  • Check speakerphone firmware updates via Jabra Direct. Schedule updates for non-conference periods.
  • Review and rotate API keys if security policy requires monthly rotation.
  • Check SharePoint storage consumption against the school's M365 storage quota.
  • Review consent tracking list for completeness — flag any students with upcoming conferences who lack consent records.

Quarterly (2-3 hours)

  • Conduct a 30-minute training refresher session for new teachers or teachers with low adoption.
  • Review transcription accuracy on a sample of 5 recent transcripts — compare against teacher corrections to identify systematic errors.
  • Update the GPT-5.4 system prompt if teachers report consistent issues (e.g., incorrect section formatting, missing flag triggers).
  • Review DPA expiration dates and renew as needed.
  • Generate a quarterly utilization report: conferences recorded, notes generated, teacher adoption rate, average accuracy rating, flagged items count.
  • Review and update the consent form language if state laws have changed.

Annually (4-6 hours)

  • Conduct full access control audit: verify SharePoint permissions match current staff roster, remove departed teachers, add new teachers.
  • Review and renew all vendor DPAs.
  • Update consent forms for the new academic year.
  • Review records retention: archive or delete transcripts past the retention period per district policy.
  • Evaluate software pricing changes: check if Otter.ai, OpenAI, or M365 pricing has changed and adjust client billing.
  • Assess whether newer AI models or features should be adopted (e.g., new GPT model with better accuracy, new Otter.ai features).
  • Present annual ROI report to school administration showing time saved, conferences documented, and system reliability metrics.

SLA Considerations

  • Response time during conference weeks (typically 2-3 weeks per semester): 4-hour response, same-day resolution for blocking issues
  • Response time during non-conference periods: Next business day response, 48-hour resolution
  • System uptime target: 99% during conference weeks (cloud services dependent)
  • Escalation path: Teacher → School IT Coordinator → MSP L1 Technician → MSP L2 Engineer → Vendor support (Otter.ai, Microsoft, OpenAI)

Model/Prompt Retraining Triggers

  • If teacher accuracy ratings drop below 3/5 on the feedback form, review and revise the GPT-5.4 system prompt
  • If OpenAI releases a new model (e.g., GPT-5), test on 10 sample transcripts before migrating
  • If school changes their meeting notes format, update the system prompt to match
  • If new compliance requirements emerge (new state law, updated FERPA guidance), update prompts and consent workflows immediately

Alternatives

Zero-Cost Microsoft Teams Built-in Transcription

Use only Microsoft Teams' native live transcription feature (available in M365 Education A1, which is free) without any additional software. Teachers start a Teams meeting for each conference (even in-person ones, by joining from the room laptop), enable live transcription, and receive an auto-generated transcript saved to OneDrive. The AI-generated meeting notes step would still use the OpenAI API, but the transcription layer is entirely free.

Self-Hosted Whisper Transcription for Maximum Privacy

Deploy OpenAI's Whisper model locally on a school- or district-owned server using Whisper.cpp or the Speaches self-hosted API. All audio processing occurs on-premises with zero data leaving the school network. Combined with a locally-hosted LLM (e.g., Llama 3 via Ollama) for summarization, this creates a fully air-gapped solution where no student data touches third-party cloud services.

Rev.com Hybrid AI + Human Transcription

Use Rev.com's AI transcription ($0.25/min) for routine conferences and their human transcription service ($1.99/min) for high-stakes meetings such as IEP conferences, disciplinary meetings, or any conference that may result in formal action. This provides 99%+ accuracy for legally sensitive records while keeping costs manageable for routine conferences.

Google Workspace + Google Meet Transcription

For Google-first school districts using Chromebooks and Google Workspace for Education, use Google Meet's built-in transcription feature instead of Teams. Transcripts auto-save to Google Drive as Google Docs. Combine with Google Apps Script (instead of Power Automate) to call the OpenAI API for meeting notes generation and save results to a shared Google Drive structure.

Fathom Free Tier for Budget-Constrained Pilots

Use Fathom's free unlimited transcription tier for individual teachers to pilot the concept at zero software cost. Each teacher installs Fathom and gets unlimited meeting transcription and AI summaries at no charge. The MSP provides only the hardware (speakerphones) and the custom post-processing pipeline.

Want early access to the full toolkit?