Bubbles is the family AI. It lives on a Mac Mini in my closet. You can reach it over iMessage. I wanted it to also send plain SMS. Some family members use Android, and a phone number felt like the adult way to do it. In the US, that requires A2P 10DLC registration. In that compliance system, a robot decides whether your use case deserves to send texts.
Attempt one: the URL that cannot change
Attempt one was rejected. Error 30907: website URL mismatch. The brand profile pointed at one domain. The campaign pointed at another. That was fair.
But Twilio approved the profile just before. Approval makes the profile immutable. Twilio’s own API confirmed that there is no edit path: no PUT, no PATCH, only create, read, and delete. The only fix for the URL was a support ticket. I had to ask Twilio to change its own record for me. I filed the ticket.
Attempt two: four errors at once
Attempt two used the approved URL. It added a compliance landing page with a privacy policy and terms. It was rejected with four error codes. I learned that the vetting bot checks the API parameters separately from the pages those parameters point to. A live, linked privacy policy is not enough. Its URL must be its own field. I also learned that the bot does not follow redirects in all cases, so a missing trailing slash can cause a rejection.
Attempt three: exact disclosures
Attempt three embedded everything and made everything explicit. It was rejected on error 30909, the message_flow field. The required disclosures must appear in that one text field, word for word. The disclosures are the program name, “Message frequency varies,” and “Message and data rates may apply.” That last sentence predates the telephone. A page that the field links to is not sufficient. Fine. I rewrote the field with every CTIA disclosure, word for word, exactly as the rejection specified.
Attempt four: the slot machine
Attempt four was rejected. Same field.
I obeyed the reviewer’s own feedback, word for word. The reviewer said no. That is not a puzzle with a solution. That is a slot machine, and each pull cost approximately $15 in vetting fees.
The exit I set in advance
I got one thing right. Before attempt four went in, I wrote down a rule. If this attempt fails, the channel is dead: no attempt five, no clever new words, no appeal spiral. So when the fourth rejection landed, there was no decision to make. I deleted the phone number, removed the SMS config, and moved on. The total: sixty dollars, four rejections, zero outbound texts ever sent.
Bubbles still answers over iMessage. The only compliance test there is whether the answer is useful. The disciplined move is not always a win against the bureaucracy. Sometimes the move is a limit, set in advance, on how much of your life the bureaucracy gets. Not one resubmission more.