Skip to the page

Concepts

What BlueBot can and can't do

What a Mac running BlueBot can and can't do with Messages, the reason for each limit, and how to design around the gaps before you build.

BlueBot uses Messages only in the ways Apple allows any app to: it sends through AppleScript, and with your permission it reads Messages' database without changing it. It never uses Apple's private frameworks and never asks you to turn off System Integrity Protection, the Mac's protection against changes to the system. Your Mac stays as secure as it was before, and these choices decide what BlueBot can and can't do.

The list

WhatBlueBotHow
Send a text (iMessage or SMS, chosen or automatic)YesAppleScript
Send pictures, files, voice memos and a contact card (.vcf)YesAppleScript send POSIX file, staged into a folder Messages can read
Send into an existing group chatYesAppleScript by chat GUID
Start a new group chatNoMessages has no reliable scripting for it
Read every message, including ones typed by hand on the Mac or iPhoneYeschat.db
Delivered and read receipts on sent textsYes, where the recipient shares read receiptschat.db date_delivered, date_read
Tapbacks receivedYeschat.db associated_message_type 2000–2006 added, 3000–3006 removed
Edits and unsends receivedYes, on macOS 13 and laterchat.db date_edited, date_retracted
Send a tapback, a typing indicator, mark as read, edit or unsendNoNeeds System Integrity Protection turned off, and BlueBot won't ask that of anyone
Voice memo transcriptionYes, on the Mac, freeApple's Speech framework, on the device, if you turn it on
Is this number on iMessage?A best guess with its basis statedThe newest chat with that handle; unknown when there is none

What BlueBot can't do

Start a group chat

Messages has no reliable way for an app to start a new group. BlueBot can send into a group that already exists, with chat_id from GET/v1/chats, and it reads every group it copies.

Instead: start the group once by hand, in Messages on your iPhone or Mac. Send one text in it, and the Mac sees it (chat.created fires). From then on your code can send into it. Group chats

Send a tapback, show typing, mark as read, edit or unsend

All of these need System Integrity Protection turned off, and BlueBot won't ask anyone to do that.

Instead: BlueBot reads all of them when the other person does them. A tapback on your text fires reaction.added, and an edit or unsend fires message.edited or message.unsent. To answer a tapback, send a text.

Know for sure whether someone is on iMessage

Apple offers no way to ask about a stranger's number. GET/v1/lookup answers from your own history: what the newest chat with that person used, with basis: "history", or service: "unknown" with basis: "none" when you've never texted them.

Instead: send with service: "auto" and let the SMS fallback handle it. Services and SMS fallback

Send while your Mac is asleep or off

Every text leaves from Messages on your Mac, and SMS from your iPhone. A Mac that sleeps, loses power or loses its network sends nothing until it's back, and its texts wait with device_offline.

Instead: keep the Mac awake (the app does it for you), choose an expires_at that matches how long a text stays useful, and listen for device.offline. The Mac app

Give you a number

BlueBot sends from the number your Mac's Messages is signed in with, and provides none. You can't send from two numbers with one account, choose a sender name, or text from a number you don't own.

Send at volume

BlueBot sends one text at a time at your pace, 20 seconds apart by default, and at most 1,000 a day. BlueBot is for texting people who know you. Bulk sending, cold outreach and texting lists you bought are against the acceptable use policy, and they're also how a personal Apple account gets flagged, which no setting undoes. Limits

Work outside Messages

BlueBot doesn't make phone or FaceTime calls and doesn't work with WhatsApp or other apps. At launch it can't text numbers outside the US.

What it reads that hosted services can't

Because BlueBot reads your own Messages, it sees things a hosted iMessage service can't:

  • The whole conversation. Texts you type by hand on your Mac or iPhone come through as source: "mac", so your CRM and your AI assistant also see what you typed.
  • Your existing threads. Texts go into your existing conversations and come from your own number.
  • Receipts and reactions. Delivered and read times where the person shares them, tapbacks, edits and unsends.
  • Voice memo transcripts. When you turn on transcription, the Mac transcribes voice memos itself with Apple's speech recognition, at no extra cost.

The risk to your Apple account

Apple can flag an Apple account that messages many people who don't know it. The flag isn't public, Apple doesn't announce its rules, and BlueBot can lower the risk but never remove it. The sending rules (a pace between texts, a cap on new people a day, quiet hours and stop words) are there for this, and their defaults are set so your sending looks like a busy person's.