TL;DR: If an AI voice agent sends a text to a US number from a local business number, that text needs A2P 10DLC registration behind it, or carriers will filter it and nobody will tell you. Registration is two things: a brand (the legal business, matched to its EIN and website) and a campaign (what the texts are for, sample messages, how people opt in, how they opt out). Most rejections come from the same few gaps: a website that does not match the brand, no privacy policy line about mobile numbers, an opt-in story that does not explain how consent is collected, and sample messages that do not look like the real ones. For voice agents the tricky part is consent, because it is given out loud on a call. Ask for it in the conversation, log it as data, describe that flow in the campaign, and start the registration on day one of the project, because it is usually the longest wait in the whole build.
Almost every voice agent I have shipped sends texts. A booking confirmation, a reminder the day before, a link to a form, a "sorry we missed you" after a dropped call. At Fortell AI that meant agents for clinics, vet practices, garages and real estate teams. At Tested Media it means the CallSetter AI product, where Retell agents feed GoHighLevel and the follow-up happens by text. The voice part gets all the attention in a demo. The text part is what the caller actually holds on to afterwards.
And the text part has a failure mode the voice part does not: it can stop working completely while every system reports success. I have mentioned A2P 10DLC in passing in a lot of posts, including the missed-call text-back build and the phone number setup guide. This is the full version: what it is, how I get it approved the first time, and the voice-specific detail most guides skip.
What A2P 10DLC actually is
A2P means application-to-person: software sending messages to people, as opposed to a person texting a friend. 10DLC means a standard ten-digit local US number, the kind a business normally uses as its main line.
US carriers treat business texting from local numbers as a separate class of traffic, and they want to know who is sending it and why before they deliver it. The registration lives in a central registry and has two layers:
- Brand: the business itself. Legal name, EIN, address, website, contact. This is checked against public records, so it has to match exactly.
- Campaign: a specific use for texting under that brand. A use case category, a written description, sample messages, a description of how people opt in, and the keywords for opting out and getting help.
Numbers are then attached to an approved campaign. In Twilio that happens through a Messaging Service. In GoHighLevel it happens through the A2P wizard in the phone settings, which walks through the same brand and campaign steps on top of LC Phone or a connected Twilio account.
Why unregistered texts are worse than failed texts
A failed text is easy to deal with. Something errors, someone sees it, someone fixes it.
Unregistered texts on 10DLC are handled differently. They get accepted by the platform, they go out, and then they are blocked or filtered on the carrier side. The automation in n8n or GHL shows a green tick. The voice agent says "I've just sent you a confirmation." The caller gets nothing.
This is the exact shape of failure I wrote about in post-call automations that fail silently: the call was fine, the workflow ran, the outcome never happened. The client finds out weeks later when a patient says they never got a reminder, and by then the no-show numbers look like the agent is not working. If you are using texts to cut no-shows, an unregistered number quietly turns that whole strategy off.
The brand: boring, exact, and where most delays start
The brand step looks like a form. Treat it like a reconciliation exercise.
- The legal name must match the EIN record exactly. Not the trading name, not the name on the sign. If the business trades under a different name, that goes in the separate brand name field, and the website should make the connection obvious.
- The website must be live and must clearly be this business. A parked domain, a "coming soon" page, or a site under a different name is a common reason for rejection.
- Sole proprietor brands exist for businesses without an EIN, but they come with tighter limits on numbers and volume. For a real clinic or agency with an EIN, I always register the standard way.
When I scope a project, I ask for the EIN letter, the exact legal name and the website on the first call. If those three do not line up, I know the registration will bounce before I submit anything, and fixing the website is cheaper than waiting through a rejection.
The campaign: write it like the reviewer is skeptical
Campaigns are reviewed by people, and they are reviewing a lot of them. A campaign gets approved when the reviewer can understand in a minute who gets texted, why, and how they agreed to it.
Pick a narrow use case
For a voice agent, the honest use case is almost always customer care or account notifications: confirmations, reminders and replies to people who contacted the business. I keep marketing out of the same campaign. Promotional texts carry stricter rules, and mixing them in makes the whole campaign harder to approve and easier to filter. If the client wants promos later, that is a separate campaign with its own opt-in.
Sample messages that look like the real ones
Reviewers compare your samples to your description, and carriers compare live traffic to your samples. So the samples should be the actual templates the agent will send, with the business name in them and placeholders where the details go:
"Hi {name}, this is Riverside Vet. Your appointment is confirmed for {date} at {time}. Reply C to confirm or call us to change it. Reply STOP to opt out."
Every sample names the business. At least one includes opt-out language. Links, if used, are on the client's own domain. Public link shorteners are a common filtering trigger, so I avoid them in both the samples and the live messages.
Opt-out and help keywords
STOP, HELP and their usual variants need to work, and the campaign needs the response text for each. GHL and Twilio handle the standard keywords once configured, but I still write the HELP reply myself so it includes the business name and a real contact method.
The voice agent part: consent given out loud
This is the bit most A2P guides do not cover, because most of them assume someone ticked a box on a web form.
With a voice agent, the caller usually agrees to texts in conversation. The opt-in description in the campaign has to explain that flow, and the agent has to actually follow it. My approach:
- The agent asks before it texts. Something like "Can I text you a confirmation to this number?" It is a single short question, and it reads naturally in the call. I covered how to phrase lines like this for the ear in prompt writing for speech.
- The answer becomes data, not just transcript. A post-call field like
sms_consent: yes | no | not_asked, captured with the same care as the other caller details. The texting workflow checks that field before sending anything. - The consent is stored on the contact. In GoHighLevel that means a tag or custom field on the contact record, with the call ID, so there is a trail if anyone ever asks. This is part of why I treat the CRM as the system of record, as in the CallSetter AI build.
- The campaign description says all of this. In plain words: the caller phones the business, the AI assistant asks during the call whether they would like a text confirmation, and texts are only sent to callers who say yes. Reviewers want to see the mechanism, not just the word "consent."
- The website mirrors it. The privacy policy states that mobile numbers and SMS consent are not shared with third parties for marketing, and there is a short SMS terms section describing what people will receive, how often, and how to opt out. Missing privacy policy language is one of the most common rejection reasons I have run into.
For outbound agents the bar is higher, because the business is starting the conversation. There, consent has to exist before the first contact, usually through the form or ad the lead came from, and the campaign has to describe that source honestly.
After approval: watch delivery, not workflow status
Approval does not mean every text arrives. Carriers still filter individual messages that look off, and things drift: someone edits a template, adds a link, or starts sending a promo through the care campaign.
So the monitoring watches delivery status from the carrier side, not just whether the workflow fired. In Twilio I subscribe to status callbacks and alert on filtering and unregistered-number errors, the 30007 and 30034 family, rather than just on failed API calls. In GHL I check the message status in Conversations for the first batches after launch. During the first two weeks live, text delivery is on the same daily checklist as call outcomes.
If a client wants to send texts but cannot get a brand approved quickly, a verified toll-free number is a reasonable stopgap. It has its own verification process, it is not instant either, and a local number usually feels more natural for a neighbourhood business. Outside the US none of this applies in the same way, which is one of the defaults I flag in the UK voice agent guide.
Start it on day one
The registration itself is not hard. The waiting is. Brand checks, campaign review and the occasional resubmission can take anywhere from days to a few weeks, and none of it can be sped up by writing code faster. That is why it sits at the very top of my project plan in how long it takes to build a voice agent. I collect the business details on the scoping call, submit the brand that week, and build the agent while the review runs. By the time the agent is ready, the texts are allowed to arrive.
The short version
- Business texting from a US local number needs a registered brand and campaign.
- Unregistered texts look sent and are not delivered. That is the dangerous part.
- Match the legal name, EIN and website exactly before you submit.
- Keep the campaign narrow, with real templates as samples and the business name in each one.
- For voice agents, ask for consent on the call, store it as a field, and describe that flow in the campaign and on the website.
- Monitor carrier delivery status, not workflow success.
- Submit in week one. Build while you wait.
I build production voice and chat agents on Retell, wired into n8n, GoHighLevel and Twilio, including the texting, compliance and follow-up that make the calls count. More about my background here, or book a call.