Skip to main content
📝 Claude Code

Voice agent com Claude Code e ElevenLabs: build completo

Criei um voice agent de vendas com Claude Code, ElevenLabs e Cal.com. Aqui está a construção real, os bugs de fuso horário e os custos que ninguém menciona.

31 min

Tempo de leitura

6,078

Palavras

May 03, 2026

Publicado

Engr Mejba Ahmed

Escrito por

Engr Mejba Ahmed

Compartilhar Artigo

Voice agent com Claude Code e ElevenLabs: build completo

Voice agent com Claude Code e ElevenLabs: build completo

O agente atendeu a chamada de teste com minha própria voz e então fez algo que eu não esperava. Ele fez uma pausa. Tempo suficiente para quase falar. Depois pediu, gentilmente, a grafia do nome da empresa que eu acabara de dizer. Não o e-mail. A empresa. Porque dois minutos antes eu havia dito a Claude Code para parar de deixar o agente adivinhar nomes próprios, e Claude Code silenciosamente adicionou uma linha ao prompt do sistema que pressionou o agente a perguntar, todas as vezes.

Essa única pausa foi o momento em que parei de pensar nisso como um roteiro e comecei a tratá-lo como um funcionário.

Passei a tarde anterior construindo um voice agent completo com Claude Code como cérebro de orquestração, ElevenLabs como mecanismo de voz e conversação e Cal.com como back-end de reserva. Sem serviços de cola. Não Crie cenários. Nenhum Zapier no meio. Apenas três APIs, um arquivo .env, um snippet widget em uma landing page e Claude Code lendo os documentos para mim enquanto eu descrevia o que queria em inglês simples.

No final, eu tinha um agente de vendas que poderia responder em uma versão clonada da minha própria voz, qualificar um cliente potencial em cinco campos, verificar minha agenda no Central Time, agendar uma chamada de descoberta de 30 minutos e enviar o e-mail de confirmação – tudo a partir de um balão em forma de telefone no canto de um site. A primeira versão foi quebrada de cinco maneiras diferentes. A quinta versão funciona. Esta postagem é o passo a passo completo de como seria uma versão real do voice agent em 2026 – incluindo os bugs, a matemática do crédito e as falhas de segurança que quase enviei.

Por que parei de pensar nos agentes de voz como algo futuro

Por dois anos tratei os voice agents como um problema de amanhã. As demos foram impressionantes no palco e estranhas na produção. Cadência robótica. Disponibilidade alucinada. O tipo de energia de “aperte um para vendas” que faz os humanos desligarem antes do segundo aviso.

Isso mudou silenciosamente. Três coisas alinhadas ao mesmo tempo. O ElevenLabs Agents amadureceu e se tornou um produto real: clonagem de voz que atravessa o vale misterioso com Clonagem de voz profissional com mais de 30 minutos de áudio, latência de conversação que não parece mais atraso de satélite e faturamento por minuto que realmente mapeia um caso de negócios. Cal.com enviado um v2 API limpo onde a criação da reserva não requer autenticação e a disponibilidade de slots é um único GET. E Claude Code aprendeu a ler uma página de documentos API de terceiros, me fazer três perguntas incisivas e escrever o código de integração sem que eu saia do VS Code.

Essa última parte é o desbloqueio. O conhecimento técnico necessário para conectar ElevenLabs a Cal.com costumava ser o gargalo. Agora o gargalo é saber o que você quer que o agente faça.

Veja - não estou vendendo a você uma visão de que a voz substituirá os humanos. Estou vendendo a você um caso de uso único e restrito, onde a matemática é tão clara que seria uma negligência não enviá-la: um agente que responde ao tráfego de entrada do seu site às 23h de um domingo, qualifica o lead e agenda a reunião em seu calendário real antes que o visitante feche a guia. Foi isso que eu construí. É sobre isso que estou prestes a explicar.

Mas antes de chegarmos à construção, você precisa entender algo que a maioria dos tutoriais ignora. Um voice agent não é uma coisa. São quatro coisas costuradas – e se você não entender as quatro peças, a construção parecerá magia e a depuração parecerá uma adivinhação.

As quatro peças de qualquer agente de voz

Cada voice agent no mercado – o seu, o meu, aquele que a árvore telefônica do seu banco deseja que seja – é uma combinação de quatro componentes. Se errar em qualquer uma dessas coisas, a coisa toda desmorona. Acerte todos os quatro e o agente se sentirá como um colega de trabalho.

Persona é o prompt do sistema. Tom, estilo, vocabulário, o que o agente dirá ou não, como lida com as objeções, o que faz quando não sabe a resposta. Esta é a parte que a maioria das construções erra embaraçosamente. Eles colam “Você é um assistente prestativo” e se perguntam por que o agente se parece com qualquer outro AI na Internet. A persona é onde sua marca mora. É a diferença entre um agente que diz “Ficarei feliz em ajudar” e um agente que diz “Explique o que você está tentando consertar e verei se nos adaptamos”.

Voz é a voz sintética que conduz o áudio. ElevenLabs oferece três opções reais: uma voz padrão de sua biblioteca, um Instant Voice Clone construído com um a cinco minutos de áudio limpo ou um Professional Voice Clone construído com no mínimo 30 minutos e idealmente várias horas de material de origem. Optei por um Professional Voice Clone treinado em cerca de quatro horas de minha própria voz – episódios antigos de podcast, gravações de tela, tutoriais narrados. O número de quatro horas não é arbitrário. Depois de cerca de duas horas, o modelo capta padrões de cadência e respiração que os clones de uma hora não percebem. Nas últimas quatro horas, os retornos se estabilizaram fortemente. Não adianta alimentá-lo com vinte.

Base de conhecimento é o que o agente sabe. O meu continha todas as transcrições do meu canal no YouTube, além de um documento estruturado descrevendo meus serviços, preços e os tipos de projetos que realizo. ElevenLabs os ingere como documentos RAG anexados ao agente. O agente pode citá-los, resumi-los, recusar-se a responder perguntas fora deles. Para um agente de vendas, a base de conhecimento é principalmente o seu próprio argumento de venda; para um agente de suporte, são os documentos do produto.

Ferramentas são as coisas que o agente pode realmente fazer. É aqui que a maioria dos agentes de demonstração cai de cara no chão. Eles podem conversar. Eles não podem agir. Um agente real possui ferramentas anexadas – um endpoint de reserva Cal.com, um webhook de CRM, uma pesquisa de repositório GitHub, um servidor MCP, um script Python que consulta um banco de dados de clientes, um webhook Zapier que dispara a próxima etapa em um fluxo de trabalho. As ferramentas são o que torna o agente útil em vez de teatral.

A construção que estou percorrendo usa todos os quatro. Persona é uma voz calorosa e profissional de vendas B2B. A voz é meu próprio clone. A base de conhecimento é meu documento de transcrições e serviços do YouTube. As ferramentas são duas – disponibilidade de slots Cal.com e criação de reserva Cal.com, diretamente contra o v2 API.

Essa é a arquitetura. Agora, aqui está o que realmente foi necessário para construí-lo.

A configuração antes de Claude Code tocar em qualquer coisa

Comecei em VS Code com uma pequena landing page Next.js já em execução em localhost:3000. Nada sofisticado – uma seção de herói, um botão CTA, um div vazio onde a voz widget eventualmente seria montada. A página existia porque eu queria que o Claude Code tivesse um lugar real para descartar o widget assim que chegássemos lá. Construir um voice agent sem página host é como isolar uma sala antes de construir as paredes.

Abri a extensão Claude Code dentro de VS Code. Se você nunca o usou dentro do IDE antes, a experiência é diferente do terminal em um aspecto importante – Claude Code pode ver sua árvore de arquivos, ler o código existente e escrever diretamente no projeto sem que você precise copiar e colar nada. A extensão é a maneira recomendada de usar Claude Code dentro de VS Code e, para uma construção como essa, a visualização de comparação lado a lado ganha sua manutenção nos primeiros dez minutos.

Então digitei um parágrafo em Claude Code. Aproximadamente:

Quero criar um agente de vendas de voz para meu site. Ele deve responder perguntas sobre meus serviços, qualificar o lead solicitando nome completo, e-mail, nome da empresa, problema que está tentando resolver e tamanho da equipe e, em seguida, agendar uma chamada de descoberta de 30 minutos em meu calendário Cal.com. A voz deve ser meu Professional Voice Clone em ElevenLabs — darei a você o ID de voz. O tom deve ser caloroso, mas profissional, vendas B2B, sem fingimento de entusiasmo, sem linguagem clichê AI. Vamos começar perguntando tudo o que você precisa saber.

Claude Code não iniciou a codificação. Ele fez cinco perguntas em uma única mensagem. Qual é o meu slug de tipo de evento Cal.com? Em que fuso horário desejo disponibilidade? Quero uma janela específica de horário de trabalho ou uso o padrão do calendário? O que o agente deve fazer quando o visitante deseja reservar fora do meu horário? Eu tenho uma chave ElevenLabs API e uma chave Cal.com API ou preciso me orientar na geração delas?

Esta é a parte que importa silenciosamente. Um desenvolvedor júnior teria começado a escrever código imediatamente e gastaria uma hora reescrevendo o fluxo de qualificação quando eu dissesse a eles que precisava do tamanho da empresa como um intervalo numérico, não um campo de texto livre. Claude Code perguntou primeiro.

Eu respondi. O tipo de evento Cal.com era discovery-call-30. Fuso horário Central Time. Horário de trabalho das 9h às 21h nos dias úteis. Se estiver fora do horário, ofereça a próxima vaga disponível. Eu tinha as duas chaves API prontas. Então Claude Code escreveu um plano como um arquivo markdown e o colocou no repositório. O plano listava cada arquivo que seria criado, cada chamada API que faria, cada variável de ambiente necessária e a ordem em que seria construída. Li o plano, solicitei uma alteração - armazene as respostas de qualificação como um objeto JSON estruturado que é enviado para um webhook antes da reserva, para que eu possa canalizar leads para meu CRM mais tarde - e deu luz verde.

A construção, na ordem em que realmente aconteceu

É aqui que a maioria dos tutoriais acena. Eles dizem “Claude Code gerou a integração” e pulam para a demonstração. Quero fornecer a ordem real, porque é a ordem que faz o loop de iteração funcionar.

Primeiro, o arquivo .env. Claude Code criou .env.local com três variáveis ​​removidas — ELEVENLABS_API_KEY, CAL_COM_API_KEY, ELEVENLABS_AGENT_ID deixadas vazias por enquanto. Ele também adicionou .env.local a .gitignore sem que eu perguntasse. Coisa pequena, mas toda vez que um LLM se lembra da higiene básica de segurança sem avisar, eu percebo.

Em segundo lugar, o próprio agente ElevenLabs. Claude Code atingiu o ElevenLabs Agents API para criar um novo agente — programaticamente, não por meio do painel. A chamada create-agent aceita um corpo JSON com o prompt do sistema, ID de voz, IDs de documentos da base de conhecimento e definições de ferramentas. Claude Code escreveu o prompt do sistema como um arquivo markdown separado (prompts/sales-agent-system.md) para que eu pudesse iterá-lo no controle de versão. Aqui está mais ou menos como era o primeiro rascunho:

You are a sales voice agent for Mejba, a software engineer who builds AI
systems, automates workflows, and ships custom Claude Code integrations.

# Goal

Qualify the prospect. Answer their questions about Mejba's services. If they
seem like a fit, book a 30-minute discovery call on Mejba's calendar.

# Voice & Tone

- Warm but professional. B2B sales, not retail support.
- Never use the words "absolutely", "amazing", "I'd be happy to", or any
  variation that signals AI-cliche language.
- Speak in short sentences. Pause after asking a question.
- If the prospect goes on a tangent, listen. Do not interrupt to redirect.

# Qualification Fields (collect in this order, naturally)

1. Full name (ask them to spell the last name back if uncertain)
2. Email (read it back to confirm)
3. Company name (ask for the spelling, every time)
4. The problem they're trying to solve, in their own words
5. Team size (ask for an approximate number of people)

# Booking

- Once qualified, offer the next three available 30-minute slots from
  Cal.com via the get_available_slots tool.
- Confirm the slot in Central Time before calling create_booking.
- After booking, confirm the email confirmation will arrive within minutes.

# Boundaries

- Do not quote prices. Tell the prospect Mejba reviews scope before quoting.
- Do not promise specific delivery timelines.
- If asked something you don't know, say so plainly and offer to follow up.

Essa solicitação foi reescrita quatro vezes antes que o agente se sentisse certo. Chegarei às reescritas na próxima seção. Mas a estrutura – função, objetivo, voz, qualificação, reserva, limites – é a essência. Cada prompt do sistema voice agent que escrevo agora segue exatamente esse formato de seis seções.

Terceiro, as ferramentas. Claude Code definiu duas ferramentas personalizadas no agente. get_available_slots aceita um intervalo de datas e um fuso horário, atinge o endpoint /v2/slots de Cal.com e retorna uma lista de janelas de 30 minutos disponíveis. create_booking aceita o nome do participante, e-mail, os campos de qualificação como metadados e um slot escolhido e atinge o endpoint /v2/bookings de Cal.com. Ambas as ferramentas funcionam como funções sem servidor no aplicativo Next.js em app/api/. O agente ElevenLabs chama esses endpoints por meio de ferramentas de webhook – o que significa que ElevenLabs envia um HTTPS POST para meu endpoint, meu endpoint atinge Cal.com e a resposta flui de volta através do agente.

O motivo da indireção – o agente chama meu servidor, meu servidor chama Cal.com – é crítico e vale a pena desacelerar. Se você colocar a chave Cal.com API diretamente na configuração da ferramenta ElevenLabs, essa chave ficará na definição do agente. Qualquer pessoa que possa ver a configuração do agente poderá ver a chave. Ao rotear através de meus próprios endpoints, a chave Cal.com reside apenas em .env.local no Vercel. O agente não possui credenciais próprias. Ele apenas fala com meu webhook. Esse padrão aparece novamente na seção de segurança, mas começa aqui.

Quarto, o widget. Depois que o ID do agente retornou do ElevenLabs API, Claude Code colocou o snippet incorporado na página inicial. O trecho é mais ou menos assim:

<elevenlabs-convai
  agent-id="agent_xxxxxxxxxxxxxxxxxxxxx"
></elevenlabs-convai>
<script
  src="https://unpkg.com/@elevenlabs/convai-widget-embed"
  async
  type="text/javascript"
></script>

Duas etiquetas. Essa é toda a área de superfície do lado do cliente. O widget monta um botão flutuante com ícone de telefone no canto inferior da página. Clique nele e uma conversa por voz em tempo real será iniciada. Todo o resto — o fluxo de qualificação, a lógica do calendário, a reserva — é executado no lado do servidor ou dentro do cérebro do agente.

Eu cliquei em salvar. localhost:3000 atualizado. A bolha do telefone apareceu. Eu cliquei nele. E então os bugs começaram.

Cinco coisas quebraram. Aqui está o que cada um me ensinou.

Esta é a seção que eu gostaria que todo tutorial do voice agent tivesse. Porque a construção é a parte fácil. A primeira ligação é onde você aprende o que realmente é o seu agente.

Erro um: o agente não disse nada quando a chamada começou. Cliquei no ícone do telefone, a conexão foi aberta e depois houve silêncio. O agente estava me esperando. Como uma chamada estranha do Zoom. ElevenLabs Agents tem um campo first_message na configuração do agente - uma string literal que o agente fala no momento em que uma sessão é aberta - e Claude Code o deixou vazio porque eu não havia especificado nenhum em meu briefing. Eu disse a Claude Code "Defina a primeira mensagem como: Ei, este é o assistente AI de Mejba - o que você está pensando?" Claude Code atualizou a configuração do agente por meio de API, sem necessidade de reimplantação. A próxima ligação começou com um alô caloroso.

Erro dois: a voz estava errada. Não é tecnicamente errado — era definitivamente meu voice clone. Mas a cadência era aquela coisa que todo Instant Voice Clone faz, onde cada frase termina com uma leve cadência ascendente, como se o agente estivesse sorrindo a cada palavra. Parecia uma gravação de suporte ao cliente. Para um agente de vendas B2B, essa energia estava fraca. Muito ansioso. Um pouco falso.

A correção estava nas configurações de voz, não no prompt. ElevenLabs oferece quatro controles deslizantes importantes – velocidade, estabilidade, semelhança e exagero de estilo. Fiz com que Claude Code abrisse a configuração do agente e mudasse as configurações de voz: estabilidade até 0,75 (variação mais consistente, menos expressiva), similaridade até 0,85 (mais próximo das gravações de origem), exagero de estilo até 0,3 (menos performativo). Adicionei uma linha ao prompt do sistema: "Fale em um tom calmo e comedido. Você não está vendendo. Você está ouvindo". A próxima chamada de teste parecia uma pessoa real falando – mais lenta, mais deliberada, sem sorrisos. Essa única combinação de ajuste do controle deslizante e instrução de tom acabou sendo a maior alavanca de qualidade em toda a construção.

Erro três: o fuso horário estava errado. Este demorou uma hora para ser encontrado. Pedi ao agente para verificar a disponibilidade para “amanhã à tarde”. O agente disse que o primeiro horário era às 18h. Minha agenda estava aberta às 11h. Presumi que Cal.com estava quebrado. Não foi. O v2 slots endpoint de Cal.com requer os parâmetros de tempo em UTC, mas aceita um parâmetro timeZone para formatação de saída. Claude Code conectou a solicitação corretamente em UTC, mas não definiu o parâmetro timeZone na resposta, portanto, o agente estava lendo os tempos de slot em UTC e anunciando-os como Central Time. 11h Central em UTC são 16h. Adicione a política de aviso mínimo de duas horas do Cal.com e o primeiro horário que o agente poderia ver saltou para 18h.

A correção foram quatro linhas de código. Claude Code adicionou timeZone=America/Chicago à consulta de slots, analisou o campo time da resposta (que agora voltou já convertido) e atualizou o prompt do sistema para dizer "Sempre leia os tempos para o cliente potencial em Central Time". Então testamos. 11h apareceu. O agente disse: "Tenho 11h Central amanhã." Soltei um pequeno suspiro audível de alívio.

Se você não se lembra de mais nada neste post, lembre-se disto: quando um agente orientado por LLM faz algo estranho com o tempo, quase sempre é um bug de fuso horário e quase nunca é culpa do modelo.

Erro quatro: o e-mail estava formatado incorretamente e o nome da empresa estava escrito incorretamente. Testei o fluxo de reserva dizendo meu e-mail em voz alta - "mejba ponto um três no gmail ponto com". O agente confirmou "M-E-G-B-A at gmail dot com." Errado. A transcrição de voz confunde regularmente M-E-J com M-E-G quando não há contexto de dicionário. O mesmo problema com nomes de empresas. O agente não tinha como saber se eu havia dito “Acme Inc” ou “Acne Inc”.

A correção foi no nível do prompt, não no nível do código. Pedi a Claude Code para adicionar este bloco ao prompt do sistema:

# Spelling Discipline

For any proper noun the prospect provides — full name, email, company —
do NOT trust your transcription. Always:

1. Repeat the value back, letter by letter for short tokens (names, the
   local part of an email, company names under 8 characters).
2. For longer values, repeat back and ask: "Did I get the spelling right?"
3. For email addresses, separate the local part and the domain when
   reading back: "M-E-J-B-A dot one-three, at G-mail dot com — correct?"
4. If the prospect corrects you, accept the correction and read the new
   spelling back one more time before moving on.

Na próxima chamada de teste, eu disse "mejba ponto um três no gmail ponto com". O agente fez uma pausa e depois leu letra por letra. Eu confirmei. A reserva foi limpa. Esta é a pausa que abriu este artigo. É também o tipo de mudança de comportamento que pode ser adicionada quase de graça e que aumenta dramaticamente a inteligência percebida do agente.

Erro cinco: Cal.com recusou-se a reservar "a qualquer momento nas próximas duas horas". O agente continuou dizendo que o primeiro horário faltava duas horas e meia, mesmo em um calendário claramente aberto. Isso não foi um bug. Cal.com tem um período de aviso mínimo padrão de 120 minutos para tipos de eventos – uma configuração projetada para proteger humanos de se reservarem acidentalmente em algo daqui a três minutos. Entrei nas configurações do tipo de evento Cal.com, reduzi o aviso mínimo para 30 minutos e testei novamente. O agente agora oferecia vagas a partir de 35 minutos. Conhecer as políticas padrão da plataforma faz parte da integração com ela. Claude Code não inventou a regra dos 120 minutos; Cal.com fez. Mas Claude Code também não poderia saber que eu queria substituí-lo, porque não havia contado.

Cinco erros. Cinco correções. Tempo total para depurar todos os cinco: cerca de noventa minutos, com Claude Code lendo a página de documentos relevantes todas as vezes e propondo a correção antes de eu terminar de ler o erro.

Parte intermediária da construção

Se você preferir que alguém construa um voice agent como este de ponta a ponta em sua pilha - voice clone, prompt do sistema, Cal.com ou HubSpot ou qualquer back-end de reserva que você usa, bloqueio de nome de host, o kit completo - esse é exatamente o tipo de projeto que eu assumo. Você pode ver o que construí e agendar uma ligação em fiverr.com/s/EgxYmWD.

Segurança: a conversa que quase não aconteceu

Quase enviei essa coisa sem pensar em segurança. O widget funcionou. O calendário funcionou. Eu estava com o dedo no botão de implantação.

Então, uma voz pequena e útil no fundo da minha cabeça disse: qualquer pessoa com um navegador pode abrir este site, clicar em widget e começar a queimar meus créditos ElevenLabs.

Os agentes de voz não são como chatbots de texto. Cada minuto de conversa custa dinheiro de verdade. Cobranças de ElevenLabs Agents por minuto de conversa, entre US$ 0,08 e US$ 0,12 dependendo do nível, separadas da cota de caracteres da sua assinatura base. Uma única chamada abusiva de uma hora custa cerca de US$ 5 a US$ 7. Uma botnet executando dez chamadas paralelas de uma hora todas as noites é o tipo de projeto que estraga uma manhã de terça-feira.

Então fiz o Claude Code adicionar quatro camadas de segurança antes da implantação.

Lista de permissões de nomes de host. A plataforma do agente ElevenLabs suporta um hostname allowlist na guia Segurança — você especifica até dez domínios e qualquer conexão widget de um domínio que não esteja nessa lista será rejeitada no handshake WebSocket. Adicionei mejba.me, www.mejba.me e localhost:3000. Qualquer pessoa que copiar meu snippet widget para seu próprio site não poderá usar meu agente.

Limite de duração da conversa. Limitei qualquer conversa em 8 minutos. Se um cliente potencial real precisar de mais tempo, ele deveria estar em uma chamada Zoom comigo, sem abusar do meu bot de voz. Oito minutos são suficientes para se qualificar e reservar. Isso também significa que o pior caso para um agressor é de aproximadamente US$ 0,96 por sessão.

Limitação de taxa por IP. Claude Code adicionou uma pequena função Vercel Edge na frente do widget que limita as conexões por IP. Três sessões por hora. A décima sessão em uma hora obtém 429. Não fui eu que inventei essa taxa. Pedi a Claude Code para escolher números que bloqueiem a automação óbvia sem rejeitar um usuário real que desligou e ligou de volta.

Escalonamento autenticado. Para a primeira versão, deixei o widget público - um agente de vendas que requer login é um agente de vendas com quem ninguém fala. Mas Claude Code escreveu um sinalizador de recurso para signed URLs (o padrão recomendado de acordo com os documentos de autenticação ElevenLabs) para que eu possa mudar o agente para o modo autenticado em 30 segundos se notar abuso. URLs assinados exigem um token do lado do servidor antes que o agente aceite uma conexão. Se você estiver administrando um agente interno – suporte técnico para funcionários, portal de parceiros – comece com signed URLs e nunca olhe para trás.

Não gosto do cálculo de segurança em voice agents públicos. A economia torna o abuso trivialmente fácil e a defesa irritantemente multifacetada. Mas os quatro controles acima trazem o pior caso de dano diário de “potencialmente ilimitado” para “irritante, mas limitado”. Essa é a linha que você deve cruzar antes de colocar qualquer voice agent em domínio público.

A matemática dos custos, honestamente

A maioria dos tutoriais ignora a conta. Eu não vou. Aqui está o que realmente custa a operação deste agente em maio de 2026.

A configuração da clonagem de voz é única. A clonagem de voz profissional está incluída no plano ElevenLabs Creator (US$ 22/month) e superior. As quatro horas de áudio original que carreguei foram processadas uma vez. O clone em si não custa dinheiro contínuo – apenas o resultado sintetizado custa.

Fatura de conversas do agente por minuto. ElevenLabs Agents custa US$ 0,08 por minuto no nível padrão e até US$ 0,12 por minuto no nível premium (que usa um LLM de última geração e o Flash voice model). Meu agente funciona no nível padrão. Uma conversa de vendas típica dura de quatro a seis minutos – digamos, US$ 0,32 a US$ 0,48 por chamada qualificada.

Os créditos são acumulados por dois meses em planos pagos. Os créditos não utilizados não são acumulados para sempre. Planeje sua queima mensal em relação ao tráfego real esperado, não à sua fantasia de crescimento mais louca.

Cal.com é gratuito no meu volume. O nível gratuito cobre um único usuário com um tipo de evento de 30 minutos e acesso direto ao API. Se você precisar de agendamento de equipe ou atribuição round-robin, esse é um nível pago – mas para um operador solo, zero.

Vercel é gratuito no meu volume. A camada hobby lida com a página de destino e as duas rotas API que fazem proxy para Cal.com sem suar a camisa.

Portanto, o custo operacional para uma versão de baixo tráfego deste agente é de aproximadamente US$ 22/month no ElevenLabs (plano Creator, que inclui clonagem de voz profissional) mais custos de conversação por minuto. Se o agente atende dez chamadas por dia com cinco minutos cada, isso equivale a aproximadamente cinquenta minutos por dia, ou US$ 4 por dia, ou cerca de US$ 120/month em custos de conversação. Total: cerca de US$ 142/month para um agente de vendas totalmente funcional que agenda reuniões enquanto você dorme.

Para efeito de comparação, um BDR humano em meio período – alguém que responde inbound e qualifica leads – custa cerca de US$ 3.000 a US$ 5.000 por mês e não trabalha nos finais de semana. O agente não substitui um bom BDR. Ele capta as chamadas que, de outra forma, chegariam ao correio de voz e vazariam no vazio.

Implantando onde visitantes reais podem encontrá-lo

Depois que o localhost:3000 parou de falhar, a implantação ficou quase entediante.

Sincronização do GitHub. Claude Code inicializou um repositório git se ele não existisse, criou um repositório GitHub privado por meio da CLI gh e enviou o código por push. .env.local permaneceu local, nunca tocou no controle remoto. Variáveis ​​de ambiente para produção residiam apenas no dashboard do Vercel.

Implantação Vercel. Conectou o repositório GitHub a um novo projeto Vercel, adicionou as três variáveis ​​de ambiente (ELEVENLABS_API_KEY, CAL_COM_API_KEY, ELEVENLABS_AGENT_ID) nas configurações do projeto Vercel, clique em implantar. Dois minutos depois, o site estava ativo em um subdomínio vercel.app. Então apontei voice.mejba.me para a implantação via DNS. Tempo total de implantação: cerca de seis minutos.

Twilio para telefone. Esta é a peça que ainda não enviei para produção, mas a arquitetura está instalada. ElevenLabs Agents oferece suporte à integração de número de telefone Twilio pronto para uso. Você compra um número, cola-o na guia "Números de telefone" do agente ElevenLabs e o mesmo agente que atende seu widget agora atende chamadas telefônicas reais. A mesma pessoa. Mesma voz. Mesmas ferramentas. Mesma integração Cal.com. O agente não se importa se o áudio vem do microfone do navegador ou de uma linha telefônica. Essa é a parte à qual sempre volto como algo que silenciosamente muda o caso de negócios – um agente, três superfícies (widget, painel, telefone), um prompt, uma base de conhecimento.

Se você já construiu um fluxo de trabalho Claude Code controlado por MCP, você pode estar se perguntando onde MCP se encaixa nesta construção. A resposta curta é: ainda não - mas a resposta mais longa é que os mesmos padrões que examinei em meu detalhamento dos MCPs obrigatórios para Claude Code se aplicam diretamente aos voice agents no momento em que você deseja que o agente consulte um banco de dados, leia seu Notion ou obtenha um registro de cliente. Hoje, tudo isso é executado nos meus webhooks do lado do servidor. Amanhã, ElevenLabs' MCP integration permitirá que o agente chame esses servidores diretamente com autenticação adequada. A arquitetura está convergindo.

O ciclo de iteração é a habilidade

Aqui está a parte que quero sublinhar antes de você fechar esta guia. A construção não foi a parte difícil. Claude Code fez a construção. Qualquer pessoa com duas chaves API e um resumo claro poderia ter produzido o mesmo primeiro rascunho.

A habilidade – a habilidade real transferível – é o ciclo de iteração. Os cinco bugs que descrevi acima não são falhas do Claude Code. Eles são o atrito natural de encaixar um agente LLM generalista em um contexto de negócios específico. Cada correção de bug assumiu a forma: observe o comportamento errado, descreva-o precisamente para Claude Code, deixe Claude Code propor a correção, verifique a integridade da correção, implante, teste novamente. Cinco rodadas desse ciclo transformaram um agente que fez uma pausa estranha na chamada aberta e digitou meu e-mail incorretamente em um agente que agenda reuniões reais em calendários reais.

Este é o mesmo loop de iteração sobre o qual venho escrevendo há meses - aquele em que o valor muda de "o AI pode fazer isso" para "o ser humano pode detectar o que está errado com rapidez suficiente para direcionar a próxima mudança". Aprofundei-me nessa dinâmica exata em por que o contexto supera a configuração quando você está construindo agentes, e as lições foram executadas batida por batida nesta compilação voice agent. Cada alteração imediata que fiz foi uma correção de contexto, não uma atualização de modelo.

Os voice agents que funcionam em produção em 2026 não são aqueles com o melhor voice clone ou o código de integração mais limpo. Eles são aqueles cujos construtores executaram o ciclo de iteração quinze vezes antes de entrar no ar. A maioria dos construtores desiste às três.

Perguntas frequentes

Quanto custa construir e executar um voice agent com ElevenLabs e Claude Code?

Espere cerca de US$ 142/month no total para produção de baixo tráfego: US$ 22/month para o plano ElevenLabs Creator (que desbloqueia clonagem de voz profissional), mais cerca de US$ 0,08 por minuto de conversa, além de níveis gratuitos em Cal.com e Vercel. Uma operadora individual que atende dez chamadas qualificadas por dia, com duração de cinco minutos cada, chega a cerca de US$ 4/day em custos de conversação.

Quanto áudio preciso para clonar minha voz para um agente ElevenLabs?

A clonagem de voz profissional ElevenLabs requer um mínimo de 30 minutos, mas a qualidade salta visivelmente entre duas e quatro horas de áudio de fonte limpa. Usei quatro horas e vi a cadência e os padrões de respiração se fixarem. Passadas quatro horas, os retornos se estabilizaram. Para a clonagem instantânea de voz, um a cinco minutos é suficiente – mas o resultado é visivelmente menos natural para conversas de nível de vendas.

O mesmo agente ElevenLabs pode atender chamadas telefônicas e o site widget?

Sim. ElevenLabs Agents oferece suporte à integração de telefone Twilio na mesma configuração do agente que alimenta o site widget. Uma persona, uma voz, uma base de conhecimento, um conjunto de ferramentas – três superfícies. Você compra um número Twilio, cola-o na guia de números de telefone do agente e as chamadas recebidas chegam ao mesmo mecanismo de conversação que seu widget usa.

Como faço para impedir que visitantes aleatórios queimem meus créditos ElevenLabs no widget público?

Use quatro camadas: hostname allowlist na guia Segurança do agente ElevenLabs (limite em seus domínios reais mais localhost), um limite de duração por conversa (eu uso 8 minutos), limitação de taxa por IP em uma função Vercel Edge na frente do widget e um sinalizador de recurso para signed URLs se você precisar mudar para o modo autenticado durante um ataque. Consulte a seção de segurança acima para obter a configuração exata.

Por que meu voice agent está lendo os horários do calendário no fuso horário errado?

Isso quase sempre é um problema de configuração Cal.com /v2/slots. O terminal requer parâmetros de tempo UTC na entrada, mas aceita um parâmetro timeZone para formatação de saída. Se você esquecer de definir timeZone=America/Chicago (ou sua zona relevante) na solicitação, a resposta retornará em UTC e o agente a lerá como se já fosse local. Corrija o parâmetro de solicitação e adicione uma linha de prompt do sistema forçando o agente a sempre ler os horários na zona local do cliente potencial.

Vamos trabalhar juntos

Procurando construir sistemas AI, automatizar fluxos de trabalho ou dimensionar sua infraestrutura tecnológica? Eu adoraria ajudar.

Coffee cup

Gostou deste artigo?

Seu apoio me ajuda a criar mais conteúdo técnico aprofundado, ferramentas open-source e recursos gratuitos para a comunidade de desenvolvedores.

Tópicos Relacionados

Engr Mejba Ahmed

Sobre o Autor

Engr Mejba Ahmed

Engr. Mejba Ahmed builds AI-powered applications and secure cloud systems for businesses worldwide. With 10+ years shipping production software in Laravel, Python, and AWS, he's helped companies automate workflows, reduce infrastructure costs, and scale without security headaches. He writes about practical AI integration, cloud architecture, and developer productivity.

Discussion

Comments

0

No comments yet

Be the first to share your thoughts

Leave a Comment

Your email won't be published

6  +  12  =  ?

Continue Aprendendo

Artigos Relacionados

Ver Todos

Comments

Leave a Comment

Comments are moderated before appearing.

Learning Resources

Expand Your Knowledge

Accelerate your growth with structured courses, verified certificates, interactive flashcards, and production-ready AI agent skills.

Sample Certificate of Completion

Sample certificate — complete any course to earn yours

Engr Mejba Ahmed

Engr Mejba Ahmed

Claude Code Expert · Online

👋

Hey there!

Quick Actions

WhatsApp Instant reply

Chat on WhatsApp

+880 1723 741224 · Instant reply

Popular Questions

Engr Mejba Ahmed is connected
Engr Mejba Ahmed is typing...
Engr Mejba Ahmed avatar

✉ Want me to follow up? Drop your email

Engr Mejba Ahmed avatar

📞 Connect Directly

Choose how you'd like to reach me

WhatsApp

+880 1723 741224

Email

[email protected]

✓ Details sent! I'll get back to you shortly.

Powered by OpenAI

335+

Blog Posts

25

AI Courses

63

Projects

Services & Expertise

Pricing & Process

Learning & Resources

Connect & Support