On Day 4, we’ll send transcribed sales meeting notes to GPT-4 and generate structured CRM entries, including summaries, key points, and action items.
1. Why Use GPT for CRM Note Generation?
✅ Summarizes Long Conversations → Extracts key talking points from transcriptions.
✅ Auto-Formats CRM Entries → Creates structured notes for HubSpot or Salesforce.
✅ Identifies Follow-Ups & Action Items → Ensures no important details are lost.
2. Installing OpenAI GPT API
Ensure you have Axios & dotenv installed:
npm install axios react-native-dotenv
3. Setting Up GPT API Request
✅ Step 1: Create gptService.js
Create src/api/gptService.js
:
import axios from 'axios';
import { OPENAI_API_KEY } from '@env';
const GPT_API_URL = 'https://api.openai.com/v1/chat/completions';
export const generateCRMNotes = async (transcriptionText) => {
try {
const response = await axios.post(
GPT_API_URL,
{
model: 'gpt-4',
messages: [
{
role: 'system',
content: "You are an AI assistant that formats sales meeting transcripts into structured CRM notes.",
},
{
role: 'user',
content: `Summarize this sales meeting: ${transcriptionText} \n\n Provide:
- Summary (2 sentences)
- Key discussion points
- Follow-up actions
- Next meeting suggestions`,
},
],
},
{
headers: { Authorization: `Bearer ${OPENAI_API_KEY}` },
}
);
return response.data.choices[0].message.content;
} catch (error) {
console.error('GPT API Error:', error);
return 'Error generating CRM notes. Please try again.';
}
};
4. Updating Home Screen to Trigger GPT Processing
✅ Step 1: Modify HomeScreen.js
import React, { useState } from 'react';
import { View, Text, Button, StyleSheet, ActivityIndicator, Alert } from 'react-native';
import VoiceRecorder from '../components/VoiceRecorder';
import { uploadAudio, transcribeAudio, getTranscriptionResult } from '../api/transcriptionService';
import { generateCRMNotes } from '../api/gptService';
export default function HomeScreen() {
const [recordingUri, setRecordingUri] = useState(null);
const [transcription, setTranscription] = useState('');
const [crmNotes, setCrmNotes] = useState('');
const [isLoading, setIsLoading] = useState(false);
const handleRecordingComplete = (uri) => {
setRecordingUri(uri);
Alert.alert('Recording Saved', `Saved to: ${uri}`);
};
const handleTranscribe = async () => {
try {
setIsLoading(true);
const audioUrl = await uploadAudio(recordingUri);
const transcriptId = await transcribeAudio(audioUrl);
let status = 'processing';
let transcriptData = null;
while (status === 'processing' || status === 'queued') {
transcriptData = await getTranscriptionResult(transcriptId);
status = transcriptData.status;
if (status === 'completed') {
setTranscription(transcriptData.text);
break;
} else if (status === 'failed') {
Alert.alert('Transcription Failed');
break;
}
await new Promise((resolve) => setTimeout(resolve, 3000)); // Poll every 3s
}
} catch (error) {
console.error('Transcription Error:', error);
Alert.alert('Error', 'Failed to transcribe audio');
} finally {
setIsLoading(false);
}
};
const handleGenerateCRMNotes = async () => {
if (!transcription) {
Alert.alert('No Transcription', 'Please transcribe a voice memo first.');
return;
}
try {
setIsLoading(true);
const formattedNotes = await generateCRMNotes(transcription);
setCrmNotes(formattedNotes);
} catch (error) {
Alert.alert('Error', 'Failed to generate CRM notes');
} finally {
setIsLoading(false);
}
};
return (
<View style={styles.container}>
<Text style={styles.title}>AI Sales Assistant</Text>
<VoiceRecorder onRecordingComplete={handleRecordingComplete} />
{recordingUri && <Button title="Transcribe Memo" onPress={handleTranscribe} />}
{transcription && <Button title="Generate CRM Notes" onPress={handleGenerateCRMNotes} />}
{isLoading && <ActivityIndicator size="large" color="#0000ff" />}
{transcription ? <Text style={styles.text}>Transcription: {transcription}</Text> : null}
{crmNotes ? <Text style={styles.text}>CRM Notes: {crmNotes}</Text> : null}
</View>
);
}
const styles = StyleSheet.create({
container: { flex: 1, justifyContent: 'center', alignItems: 'center', padding: 10 },
title: { fontSize: 24, fontWeight: 'bold', marginBottom: 20 },
text: { marginTop: 10, fontSize: 16 },
});
5. Running the AI-Powered CRM Assistant
✅ Step 1: Start the App
npx expo start
✅ Step 2: Test the GPT CRM Note Generation
Action | Expected Result |
---|---|
Record a memo | Memo recorded and URI displayed. |
Tap Transcribe Memo | Transcription text appears. |
Tap Generate CRM Notes | AI generates structured meeting notes. |
6. Example GPT Output
🔹 User Memo (Spoken Text):
“Had a great call with John Doe from ABC Corp. They’re interested in our SaaS solution, but they need a customized integration. They’ll discuss with their IT team and get back next week.”
🔹 GPT-Generated CRM Notes:
📌 **Summary:**
Discussed potential SaaS integration with ABC Corp. Awaiting IT team approval.
📌 **Key Points:**
- Interest in SaaS solution
- Needs a custom integration
- IT team to review
📌 **Follow-up Actions:**
- Check back in one week
- Send integration details
📌 **Next Meeting Suggestion:**
- Schedule a call with ABC Corp’s IT team next Tuesday.
7. Preparing for Tomorrow: CRM API Integration
Tomorrow, we’ll:
- Push GPT-generated notes to HubSpot or Salesforce API.
- Automate CRM data entry from AI output.
8. Key Concepts Covered
✅ Connected GPT-4 to React Native app.
✅ Formatted AI-generated sales notes for CRM.
✅ Linked voice memo transcriptions to AI-driven insights.
9. Next Steps: Syncing AI Notes to HubSpot & Salesforce
Tomorrow, we’ll:
- Authenticate with HubSpot/Salesforce API.
- Automatically sync AI-generated notes.
10. References & Learning Resources
11. SEO Keywords:
GPT sales meeting notes, AI-powered CRM automation, OpenAI GPT for HubSpot, sales AI assistant, GPT-4 CRM integration.