Max Glenister

Data & Experiments • 5 min read Plain text

My phone's AI is screening your AI

I’ve been using Google’s Call Screening feature for a while now. I turned it on mostly to filter out calls from numbers I don’t recognise (I’ve signed up with TPS and reported numbers to the ICO, and neither has made much difference), but in practice it’s doing something I didn’t quite expect: it’s almost exclusively screening other AIs.

The vast majority of calls that trigger it aren’t real people. They’re robocalls and AI diallers, automated systems ringing numbers en masse hoping someone picks up. The calls aren’t really for me. They’re scanning for any human who’ll answer, and what they find instead is Google’s screener. It intercepts them, announces itself, asks who’s calling and why. What follows is two AI systems running through a scripted exchange while I sit there watching the transcript scroll past on my screen.

It’s oddly compelling. The caller’s AI will introduce itself (sometimes with a name, sometimes just a company) and try to pitch. Google’s screener follows its script, politely firm. The caller can’t adapt. Neither can the screener, really. They talk past each other for a few exchanges until one gives up or the call gets marked as spam.

Hi, I'm a Google Virtual Calling Assistant recording this call for the person you're trying to reach.Google
Hello, how are you?Caller
Can you say what you're calling about?Google
Hi, I'm a Google Virtual Calling Assistant recording this call for the person you're trying to reach.Google
Thanks for calling.Caller
Can you say what you're calling about?Google
Please hold while we connect you.Caller
[block spam call]Me
Please remove this number from your mailing and contact list. Thanks, and goodbye.Google
The person you have called is not available. Please leave a message after the tone.Google
For promotional purposes.Caller
If you want to opt out, press 9. Thank you.Caller
Hi, I'm a Google Virtual Calling Assistant recording this call for the person you're trying to reach.Google
Hi, this call is for promotional purposes.Caller
Can you say what you're calling about?Google
If you want to opt out, press 9.Caller

The “press 9 to opt out” in the last two is good. The opt-out assumes a human who can comply. That branch never executes. The robocall was written for a world where a human picks up. No human did. The “Hello, how are you?” in the first clip is just the robocall trying to sound like a real person. Google’s screener doesn’t take the bait.

There’s something absurd about the whole thing. The call was never meant for a human to answer. My phone was never going to hand it off to me. The entire exchange plays out in a layer I never touch, two scripts running against each other, and I’m just an observer watching the transcript. Occasionally I’ll tap “block spam call”, which triggers Dobby to add a polite “please remove this number from your mailing and contact list” before hanging up. That’s the full extent of my involvement: a single button press.

How I transcribed these

The recordings are stereo: Google’s screener on the right channel, the caller on the left. The files are named dobby_audio_*, which is apparently Google’s internal codename for the Call Screen feature. Whisper handles the transcription. So: an AI transcribing two AIs talking to each other. It’s AIs all the way down. Every system in that chain is optimising an objective. None of them experience the exchange as anything. I’m the only one present for the joke.

A short Python script splits the channels, runs each through the model, then merges the segments back in timestamp order:

import wave, struct, whisper, tempfile, os

model = whisper.load_model("base")

def extract_channel(path, channel):
    with wave.open(path) as w:
        params = w.getparams()
        frames = w.readframes(w.getnframes())
    samples = struct.unpack(f"<{len(frames)//2}h", frames)
    mono = samples[channel::2]
    tmp = tempfile.NamedTemporaryFile(suffix=".mp3", delete=False)
    with wave.open(tmp.name, "w") as out:
        out.setnchannels(1)
        out.setsampwidth(params.sampwidth)
        out.setframerate(params.framerate)
        out.writeframes(struct.pack(f"<{len(mono)}h", *mono))
    return tmp.name

for path in sorted(os.listdir("recordings/")):
    left = extract_channel(path, 0)   # caller
    right = extract_channel(path, 1)  # Google

    segs = []
    for seg in whisper.transcribe(model, left)["segments"]:
        segs.append(("Caller", seg["start"], seg["text"].strip()))
    for seg in whisper.transcribe(model, right)["segments"]:
        segs.append(("Google", seg["start"], seg["text"].strip()))

    for speaker, _, text in sorted(segs, key=lambda x: x[1]):
        print(f"[{speaker}] {text}")

Call Screen works, but it’s quite locked down. The messaging the screener uses is fixed. There’s no way to adjust what it asks or how it phrases things. The voice is whatever Google decided on. It’s acting on my behalf, answering in my place, but the representation is entirely theirs to design. It’s a centralised proxy, built for a generalised user, standing in for me. I’d like to tweak it a bit (maybe make it sound less corporate, or change what it actually says to callers). It feels like it should be configurable, but it isn’t.

It’s a small gripe, and it still catches the AIs. I’m just entertained watching them at it. Dobby, quietly handling the world’s nonsense so I don’t have to.

  • Tinkering · shares #android
    Android's 24 hour sideloading wall

    I was showing a friend the Pokémon gen1recomp project on my phone the other day, and he wanted it on his. Easy enough. Hand over the APK and the files it needs, walk him through the setup, ten minutes while we’re sat in the same room.

    September 2026 • 4 min read
  • Reviews · shares #android
    The Anbernic RG DS

    Anbernic sent me an RG DS to review. It’s a clamshell Android handheld designed to evoke the Nintendo DS, running Android 14 on a Rockchip RK3568 with dual 4-inch screens. At around $95 (roughly £75), it sits in the same budget bracket as the Mangmi Air X I reviewed last year, but where that was a capable general-purpose handheld, this one has a much narrower brief.

    June 2026 • 14 min read
  • Tinkering · shares #android
    Using emoji to bypass FRP on a decade-old tablet

    I recently picked up two Pixel C tablets from a seller on eBay, along with the magnetic keyboard. One tablet had a cracked screen but worked fine and wasn’t locked. The other was cosmetically perfect but the display was completely black. I figured between the two I could end up with at least one working tablet.

    February 2026 • 8 min read

Discussion

No interactions yet

Join the conversation

Comment on the GitHub issue, or reply from your own site with a Webmention (how?).

Comment on GitHub

Webmentions last fetched 13 November 2026, 07:47