Wednesday, August 20, 2025

Google Meet Meets the Command Line

BLUF

Using googlemeetassist it's possible to say:

  $ googlemeetassist -a new | clipit

and a URL to a new Google Meet space will be stored on your clipboard. The meeting is pre-configured to be recorded, have Gemini take notes, and capture a transcript.

More Docs, Less Clicks

I've come to appreciate that recording Google Meet calls is an excellent source of 'free' documentation. Whether it's show and tell with a customer after I complete a new feature, or running through a complex process or feature requirements with another developer, the simple act of hitting record provides the team with a zero-effort capture of this information. What's more, with AI, it should be possible to convert these recordings into a format other than long-form video. I have yet to experiment with this, but I'm confident that the AI capabilities will only improve and the larger the library of source videos, the better.

Google tries to add additional value to recordings by having Gemini take notes. I still prefer capturing the full recording and transcript to the notes, but I have to admit, they're often a pretty impressive summary of the meeting. If nothing else, they showcase AI's burgeoning capabilities.

The process of starting a new meeting with recording enabled isn't hard, but it's enough clicks that it's a candidate for streamlining. Even more problematic is that it's possible to forget to record the meeting. Every so often I'll find myself partway through a record-worthy session, only to realize I never hit the record button. Oh, to have a time machine to fix this!

Fortunately, Google Meet's v2 REST API makes creating and configuring a meeting space for recording to be straightforward. A single curl request with this shape is all it takes:

  curl -s -X POST  https://meet.googleapis.com/v2/spaces \
       -H "Authorization: Bearer $auth_token" \
       -H 'Content-Type: application/json' \
       -d "{ \"config\": {
            \"artifactConfig\": {
              \"recordingConfig\": {
                \"autoRecordingGeneration\": \"ON\"
              },
              \"transcriptionConfig\": {
                \"autoTranscriptionGeneration\": \"ON\"
              },
              \"smartNotesConfig\": {
                \"autoSmartNotesGeneration\": \"ON\"
              }
            }
          } }"

I've wrapped this curl command in a bash script: googlemeetassist. Feel free to grab it, use it and improve it. I can now start a meeting effortlessly by running:

  $ googlemeetassist -a new | clipit

Below is a run-through of all of googlemeetassist's options.

Not Out of a Job Yet

Curiously, when I asked ChatGPT to help me with this project, it came back with the explanation that the script I wanted to create wasn't possible. ChatGPT seems to be relying on this five year-old stack overflow discussion, as one of its primary sources. In this discussion, someone mentions using Google Calendar to create a Google Meet link. ChatGPT echos this suggestion as gospel. That was a clever workaround--5 years ago.

The free version of ChatGPT hasn't processed the Google Meet v2 API yet, so it doesn't know that it's trivial to create a meeting from a web request.

Finding examples of AI missing the mark is hardly unusual. But it made me smile that a humble programmer reading docs still managed to win the day. All that's to say, I wasn't replaced by AI today. Tomorrow maybe, but not today, not today.

See It In Action

Here's a run through of all that googlemeetassist can do:

# Generate a help message
$ googlemeetassist -h
 Usage: googlemeetassist -a new [-p profile] [-v] [-N]
 Usage: googlemeetassist -a init-auth [-p profile]

# Create a new Google Meet meeting, print out the URL to visit
$ googlemeetassist -a new
 https://meet.google.com/nbq-zgid-pao

# Create a new meeting, but print out the full details of the meeting
$ googlemeetassist -a new -v
{
  "name": "spaces/cQCHMqHqLIcB",
  "meetingUri": "https://meet.google.com/btm-byvt-ucz",
  "meetingCode": "btm-byvt-ucz",
  "config": {
    "accessType": "TRUSTED",
    "entryPointAccess": "ALL",
    "moderation": "OFF",
    "attendanceReportGenerationType": "DO_NOT_GENERATE",
    "artifactConfig": {
      "recordingConfig": {
        "autoRecordingGeneration": "ON"
      },
      "transcriptionConfig": {
        "autoTranscriptionGeneration": "ON"
      },
      "smartNotesConfig": {
        "autoSmartNotesGeneration": "ON"
      }
    }
  }
}

# -N stands for 'no recording'
$ googlemeetassist -a new -N
 https://meet.google.com/hos-tnua-cim

# See that -N has set up a no-recording meeting
$ googlemeetassist -a new -N -v
{
  "name": "spaces/ahVuEZgUW_MB",
  "meetingUri": "https://meet.google.com/xcm-zrbw-jrz",
  "meetingCode": "xcm-zrbw-jrz",
  "config": {
    "accessType": "TRUSTED",
    "entryPointAccess": "ALL",
    "moderation": "OFF",
    "attendanceReportGenerationType": "DO_NOT_GENERATE",
    "artifactConfig": {
      "recordingConfig": {
        "autoRecordingGeneration": "OFF"
      },
      "transcriptionConfig": {
        "autoTranscriptionGeneration": "OFF"
      },
      "smartNotesConfig": {
        "autoSmartNotesGeneration": "OFF"
      }
    }
  }
}

# Typical usage: create a new meeting and store the URL
# in the clipboard for pasting into a mail message, slack, etc.
$ googlemeetassist -a new | clipit

No comments:

Post a Comment