Guías
Sirva su asistente en su propio dominio
Reclame su dirección, demuestre que es suya con un registro DNS, apúntela hacia nosotros con otro, confírmela y obtenga un certificado automáticamente.
En esta página
Every Busymate AI workspace answers at its own address on our domain from day one. To serve bro at your own address, you claim it in the Console, add two DNS records at your domain provider — one TXT record to prove you own the domain and one CNAME record to route traffic to us — verify, and the certificate (TLS) is set up for you. Then you point your embed at the new address.
Your address on our domain
Your workspace's <slug>.busymate.ai address works from the moment the workspace exists. An address that is not yet mapped to a workspace stays plain and unbranded — your customers never see a half-branded window.
1. Claim your address
- Open Console → Domains for your workspace.
- Add the address, for example
ai.yourdomain.com, and choose whether it is your primary one. - The Console returns a TXT value and a CNAME target. Copy both from the screen — never type them from memory.
From your AI tools the same step is request_tenant_custom_domain with tenant_id, host, is_primary and confirm. An address the platform owns, or one another workspace already claimed, is refused.
2. Add the DNS records
At your domain provider, add the two records exactly as returned:
| Type | Name | Value |
|---|---|---|
| TXT | _busymate-support.ai.yourdomain.com | the TXT value from step 1 — proves you own the domain |
| CNAME | ai.yourdomain.com | the CNAME target from step 1 — routes traffic to us |
Leave no other record at the CNAME name. Changes usually take minutes to spread; some providers cache longer.
3. Verify
Back in Domains, press Verify (or call verify_tenant_custom_domain). We look the TXT record up ourselves; while it is missing you get a pending result that names the exact record to add. On success the address is mapped and the certificate (TLS) is set up automatically — nothing to upload.
Before retrying, confirm the records resolve from outside your network with any DNS tool.
4. Move your embed
- Change the embed script's
srcon your site tohttps://ai.yourdomain.com/embed/v1.js, and any hosted links to the new address. - If your site's addresses changed too, add them to your allowed list and publish a new version.
The snippet below is the embed with placeholder values; the Console's Integration section renders it with your address:
<!-- Floating "bro" launcher for Busymate AI.
Anonymous chat works immediately on the allowed origins. -->
<script>
function newLaunchNonce() {
const bytes = new Uint8Array(32);
crypto.getRandomValues(bytes);
return btoa(String.fromCharCode(...bytes))
.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
}
window.BusymateAI = {
getIdentity: async () => {
const accessToken = await getProductAccessToken(); // YOUR existing auth helper
if (!accessToken) return null;
const nonce = newLaunchNonce();
const returnTo = new URL(location.href); returnTo.search = ""; returnTo.hash = "";
const r = await fetch("https://YOUR-PRODUCT-DOMAIN/api/bmai/identity", {
method: "POST", credentials: "include", cache: "no-store",
headers: { "content-type": "application/json", authorization: "Bearer " + accessToken },
body: JSON.stringify({ nonce, returnTo: returnTo.href }),
});
if (r.status === 401) return null; // signed out -> anonymous chat
if (!r.ok) throw new Error("AI identity mint failed (" + r.status + ")");
// MUST be a newly minted { token, nonce } pair on every call. Never
// persist either value in localStorage, sessionStorage, cookies, React
// state, or module state.
const identity = await r.json();
if (identity.nonce !== nonce) throw new Error("AI identity nonce mismatch");
return { token: identity.token, nonce: identity.nonce };
},
};
// Call after YOUR product completes login, logout, access-token/session
// rotation, or account switch. Do not send an identity postMessage directly.
window.refreshAssistantIdentity = () =>
window.BusymateAI?.refreshIdentity?.() ?? Promise.resolve();
</script>
<script
src="https://your-assistant.busymate.ai/embed/v1.js"
data-assistant="your-assistant"
data-label="Ask bro"
async></script>Search and canonical
Keep one primary address. Your workspace's search setting decides whether the address is indexable; its sitemap.xml and robots.txt are generated from your settings.
Remove
Domains → Remove (or remove_tenant_custom_domain) unmaps the address and cleans up. Your address on our domain keeps serving.
Troubleshooting
- A 200 on
/is not proof. Until the address is mapped and published, signed-in paths answer 403 withunknown_host. Test a signed-in path, not the landing page. - TXT not found — check the exact record name (
_busymate-support.plus your address) and wait for the change to spread. - CNAME conflict — an A, AAAA or TXT record at the same name blocks the CNAME at most providers.
Verify
https://ai.yourdomain.com/renders your brand, not the plain shell.- A signed-in path at the new address no longer answers 403.
https://ai.yourdomain.com/sitemap.xmllists your address.
Next
- Getting started — workspace, web address, sign-in, systems, publish.
- A white-label AI assistant on your own domain — why the domain is the product.
- White-label AI for agencies and resellers — one address per client.
Preguntas
Do I need DNS for the address on our domain?
No.
<slug>.busymate.aiis live from the start. DNS is only for your own domain.Who sets up the certificate?
We do, automatically, once verification succeeds. There is nothing to upload or renew.
Can I keep both addresses?
Yes. Mark one primary; both answer with your brand. Links and the sitemap follow the primary one.
Why does my address answer 403?
It is not mapped yet, or the version that maps it is not published. Verify the domain and publish; the 403 disappears.