Streamlined
  • Apps
  • Documentation
  • Roadmap
  • Contact
Install Now →
Streamlined Apps
Streamlined Apps

Automated Video Call Analysis

Related Apps
Advanced AI Analytics & AutomationsAdvanced AI Analytics & Automations
Description

It’s possible to automate sending the transcript from your note taker to Streamlined Analytics, here’s how.

Status
Completed

This guide assumes that you are using Read.ai as your meeting note taker. For other note takers, this process will vary.

For instance, Fathom doesn’t offer a direct webhook integration and would instead require using a Zapier account.

Create Webhook Integration

In your Read.ai integrations settings, configure a webhook endpoint.

image

Create Webhook Endpoint

This will be done in a HighLevel workflow.

image
  1. Add the “Inbound Webhook” trigger
  2. Copy the URL, and paste it into your Read.ai webhook destination
  3. Hit “Send test” in Read.ai to send a mapping reference to GHL
  4. You should end up with a mapping reference like so:
image

Workflow Structure

image

Custom Code: Extract Contact’s Email

image

Find Contact

image
image
image

Format Transcript

image

Save to Notes

image

Then, to make sure the system can find this note:

In your AI configuration:

image
image

Frequent Questions

‣

Do you offer custom development work?

‣

Should I install your app at the agency level or location level?

‣

What’s your support like?

‣

How do I install your app?

‣

Do you offer a free trial?

‣

Can I request a feature or product?

‣

Are there any usage limits on your apps?

‣

Can I use your app on multiple accounts?

‣

How do I uninstall the app?

💬

Need to Get in Touch?

If you have any questions, concerns, or ideas, I’d love to hear them!

Visit the page below to book a call or get in touch right away.

Get in Touch →
Streamlined

Apps

Documentation

Roadmap

Contact

Designed, developed, & maintained by Ardent Labs (ardently.so)

// Enter emails or domains that are for you or your team
// This will be filtered out, so we can find the contact's email
const team_emails = ["youremail@gmail.com", "@companydomain.com"];

output = { email: null };

for (const participant of inputData.participants) {
  if (!participant.email || team_emails.includes(participant.email)) {
    continue;
  } else {
	  // If this email doesn't contain one of the values from above,
	  // We know we found the contact's email so we'll search for it
    output = { email: participant.email };
  }
}

return;
const utterances = inputData.speaker_blocks || []

// Defensive checks
if (utterances.length === 0) {
  output = {
    transcript: null,
    duration: null,
    link: null
  }
  return
}

// Create full transcript
let transcript = ""
for (const utterance of utterances) {
  transcript += `${utterance.speaker.name}: "${utterance.words}"\n\n`
}

// Note must be less than 65,000 characters
if (transcript.length > 63000) {
  transcript = transcript.slice(0, 63000)
  transcript += "...\n\n Transcript truncated."
}

// Calculate total duration
const first_speaker_start_seconds = Number(utterances[0].start_time)
const total_utterances = utterances.length
const last_speaker_end_seconds = Number(utterances[total_utterances - 1].end_time)
const total_duration_seconds = last_speaker_end_seconds - first_speaker_start_seconds
const total_duration_minutes = total_duration_seconds / 60
const rounded_duration = Math.max(1, Math.round(total_duration_minutes))

// Return output
output = {
  transcript: transcript,
  duration: rounded_duration,
  link: inputData.recording_url
}