Execute um Chatbot de WhatsApp específico para negócios que pode entender textos, imagens e mensagens de voz, e responder aos usuários com mensagens de texto e voz. Alimentado por GPT-4o, Node.js e a API do Wassenger.
Seguindo este tutorial, você pode ter um chatbot de IA totalmente funcional, com suporte a voz, semelhante ao ChatGPT rodando em minutos no seu computador ou servidor na nuvem. O chatbot foi projetado para operar como um assistente virtual de atendimento ao cliente voltado para finalidades específicas de negócios, comunicando-se com os usuários através de mensagens de texto e voz no WhatsApp.
O chatbot pode entender texto, imagens e mensagens de voz em muitos idiomas e responder com mensagens de texto e voz, treinado como um assistente virtual de suporte ao cliente com instruções e conhecimento pré-definidos.
Você pode facilmente personalizar, estender e instruir o bot de IA para ajustar seu comportamento, papel, propósito e limites de conhecimento ao seu caso de negócio. O bot de IA é consciente da conversa com base no histórico de mensagens do WhatsApp com o usuário, permitindo respostas mais contextuais e precisas.
Além disso, você pode facilmente aumentar o conhecimento específico do domínio sobre seu negócio e cliente em tempo real usando funções (function tools), permitindo que o bot de IA recupere informações externas de APIs remotas, bancos de dados ou arquivos, e alimente a IA com informação granular, específica do usuário ou do contexto.
👉 👉 O código deste tutorial está disponível no GitHub 💻
👉 👉 Tutorial em vídeo disponível no Youtube
Conteúdo
- Recursos
- Como funciona
- Comportamento do Bot
- Requisitos
- Estrutura do Projeto
- Instalação
- Configuração
- Personalização
- Chamar Dados e APIs Externas (RAG)
- Execute o Bot
- Uso
- Perguntas
- Programa de Afiliados
🤩 🤖 Wassenger é uma solução completa de Chat em Equipe para WhatsApp e API. Cadastre-se para um teste gratuito de 7 dias e comece em minutos!
Recursos
Este tutorial fornece uma implementação completa de um chatbot de IA habilitado para voz, alimentado por ChatGPT, em Node.js que:
- Fornece um chatbot completo com suporte a voz no seu número de WhatsApp conectado ao Wassenger.
- Processa automaticamente quaisquer mensagens recebidas dos usuários (texto, imagem e voz) e responde com texto e voz.
- Entende linguagem falada em mais de 90 diferentes idiomas humanos e responde de acordo com instruções pré-treinadas específicas.
- Permite que os usuários solicitem falar com um humano, caso em que o chat será atribuído a um agente da equipe e sai do fluxo do bot.
- O comportamento do chatbot pode ser facilmente ajustado no arquivo de configuração (veja
config.js).
Como funciona
- Inicia um serviço web que se conecta automaticamente à API do Wassenger e ao seu número de WhatsApp.
- Cria um túnel usando Ngrok para receber eventos de Webhook no seu computador (ou você pode usar uma URL de Webhook dedicada se executar o bot na nuvem).
- Registra o endpoint do webhook automaticamente para receber mensagens recebidas.
- Processa mensagens recebidas de texto, imagem e voz do WhatsApp e responde com mensagens de voz usando um modelo GPT-4o (multimodal) pré-treinado com instruções personalizadas específicas do negócio.
- Atribui automaticamente chats a agentes de equipe disponíveis quando o usuário solicitar ou quando o chatbot não conseguir ajudar.
Comportamento do Bot
O bot de IA responderá a mensagens recebidas com base nos seguintes critérios:
- O chat não está atribuído a nenhum agente dentro do Wassenger.
- O chat não possui nenhum dos rótulos na lista negra (veja
config.js). - O número do usuário do chat não foi colocado na lista negra (veja
config.js). - O chat ou contato não foi arquivado ou bloqueado.
- O chat não é um grupo nem um canal.
- Se um chat for desatribuído de um agente, o bot assumirá novamente e responderá automaticamente a novas mensagens recebidas.
Requisitos
- Node.js >= v16 — Faça o download aqui
- Número de WhatsApp Pessoal ou Business
- Chave de API do OpenAI — Inscreva-se gratuitamente
- Chave de API do Wassenger — Inscreva-se gratuitamente
- Conecte seu número de WhatsApp ao Wassenger (teste gratuito)
- Conta Ngrok (opcional) — Inscreva-se gratuitamente
Estrutura do Projeto
Explore os arquivos-fonte no GitHub
|– bot.js -> The bot source code in a single file
|– config.js -> Configuration file to customize credentials and bot behavior
|– actions.js -> Functions to perform actions through the Wassenger API
|– server.js -> Initializes the web server to process webhook events
|– main.js -> Initializes the bot server and creates the webhook tunnel(when applicable)
|– speech.js -> Handles voice message transcription and synthesis
|– package.json -> Node.js package manifest required to install dependencies
|– node_modules -> Where the project dependencies will be installed, managed by npm
Instalação
Se você tem o Git instalado, execute o seguinte comando no Terminal:
git clone https://github.com/wassengerhq/whatsapp-chatgpt-bot.git
Se você não tem git, baixe os arquivos-fonte do projeto aqui e descompacte-o.
Configuração
Abra seu terminal favorito e mude o diretório para a pasta do projeto onde package.json está localizado:
cd whatsapp-chatgpt-bot/
A partir dessa pasta, instale as dependências executando:
npm install
Com seu editor de código preferido, abra o arquivo config.js e siga os passos abaixo:
Defina sua Chave de API do Wassenger
Insira sua chave de API do Wassenger.
Você pode inscrever-se gratuitamente aqui para obter sua chave de API do Wassenger:
// Required.Specify the Wassenger API key to be used
const apiKey = process.env.API_KEY || 'ENTER API KEY HERE',
Defina sua Chave de API do OpenAI
Insira sua chave de API do OpenAI.
Cadastre-se no OpenAI gratuitamente e então obtenha a chave de API aqui:
// Required.Specify the OpenAI API key to be used
const openaiKey = process.env.OPENAI_API_KEY || 'ENTER OPENAI API KEY HERE',
Defina seu Token do Ngrok (Opcional)
Se você precisa executar o programa no seu computador local, o programa precisa criar um túnel usando Ngrok para processar eventos de webhook para mensagens recebidas do WhatsApp.
Cadastre-se no Ngrok para uma conta gratuita e então obtenha seu token de autenticação conforme explicado aqui.
Defina o token em config.js:
// Ngrok tunnel authentication token.
// Required if webhook URL is not provided.
const ngrokToken = process.env.NGROK_TOKEN || 'ENTER NGROK TOKEN HERE',
Se você executa o programa em um servidor na nuvem acessível publicamente pela Internet, você não precisa usar Ngrok. Em vez disso, defina a URL do seu servidor em config.js > campo webhookUrl.
Habilite o recurso de entrada e saída de áudio
Em config.js, vá até a declaração features na linha 67 e defina audioInput e audioOutput como true, conforme exibido abaixo:
// Chatbot features.Edit as needed.
const features = {
// Enable or disable knowledge data loading for AI model training(pdfs, docs, csv, etc)
knowledge: true,
// Enable or disable text input processing
audioInput: true,
// Enable or disable audio voice responses.
// By default the bot will only reply with an audio messages if the user sends an audio message first.
audioOutput: true,
// Reply only using audio voice messages instead of text.
// Requires "features.audioOutput" to be true.
audioOnly: false,
// Audio voice to use for the bot responses.Requires "features.audioOutput" to be true.
// Options: 'alloy', 'echo', 'fable', 'onyx', 'nova', 'shimmer'
// More info: https://platform.openai.com/docs/guides/text-to-speech
voice: 'echo',
// Audio voice speed from 0.25 to 2.Requires "features.audioOutput" to be true.
voiceSpeed: 1,
// Enable or disable image input processing
// Note: image processing can significnantly increase the AI token processing costs compared to text
imageInput: true
};
Habilitar modo de resposta somente por áudio
Se você deseja que o chatbot responda exclusivamente usando mensagens de áudio, defina audioOnly como true:
// Chatbot features.Edit as needed.
const features = {
// Enable or disable knowledge data loading for AI model training(pdfs, docs, csv, etc)
knowledge: true,
// Enable or disable text input processing
audioInput: true,
// Enable or disable audio voice responses.
// By default the bot will only reply with an audio messages if the user sends an audio message first.
audioOutput: true,
// Reply only using audio voice messages instead of text.
// Requires "features.audioOutput" to be true.
audioOnly: true,
// Audio voice to use for the bot responses.Requires "features.audioOutput" to be true.
// Options: 'alloy', 'echo', 'fable', 'onyx', 'nova', 'shimmer'
// More info: https://platform.openai.com/docs/guides/text-to-speech
voice: 'echo',
// Audio voice speed from 0.25 to 2.Requires "features.audioOutput" to be true.
voiceSpeed: 1,
// Enable or disable image input processing
// Note: image processing can significnantly increase the AI token processing costs compared to text
imageInput: true
};
Personalização
Você pode customizar o comportamento do chatbot definindo um conjunto de instruções em linguagem natural que a IA seguirá.
Leia os comentários no código para mais instruções.
Além disso, você pode ajustar facilmente o código para corresponder a requisitos mais específicos. As possibilidades são quase infinitas!
Para prosseguir com a personalização, abra config.js com seu editor de código preferido e defina as instruções do bot, a mensagem de boas-vindas e as mensagens padrão conforme suas preferências.
Chamar Dados e APIs Externas (RAG)
Com chamadas de função (function calls), você pode facilmente fornecer ao modelo de IA informações contextuais, em tempo real e específicas do usuário para gerar respostas melhores e mais precisas usando técnicas de Retrieval-Augmented Generation (RAG). Por trás dos panos, ele usa o recurso OpenAI Tool Function Calling.
Quando o modelo de IA precisar de certa informação para gerar uma resposta, ele instruirá a execução de uma ou mais funções para recuperar informações adicionais. Por exemplo, em uma função você pode consultar uma API externa de CRM ou um banco de dados para recuperar informações específicas do cliente com quem o agente de IA está conversando, como endereço de e-mail, nome de usuário, endereço de entrega etc., e então fornecer essas informações como texto ou JSON para o modelo de IA gerar respostas precisas e contextuais específicas ao usuário.
O uso de funções de ferramenta é muito flexível e permite construir casos de uso complexos e específicos de domínio para um agente de IA.
Veja o arquivo [functions.js](https://github.com/wassengerhq/whatsapp-chatgpt-bot/blob/master/functions.js) para múltiplos exemplos de como usar e definir funções de ferramenta para carregamento remoto de dados para a IA (RAG):
// Tool functions to be consumed by the AI when needed.
// Edit as needed to cover your business use cases.
// Using it you can instruct the AI to inform you to execute arbitrary functions
// in your code based in order to augment information for a specific user query.
// For example, you can call an external CRM in order to retrieve, save or validate
// specific information about the customer, such as email, phone number, user ID, etc.
// Learn more here: https://platform.openai.com/docs/guides/function-calling
const functions = [
// Sample function to retrieve plan prices of the product
// Edit as needed to cover your business use cases
{
name: 'getPlanPrices',
description:
'Get available plans and prices information available in Wassenger',
parameters: { type: 'object', properties: {} },
// Function implementation that will be executed when the AI requires to call this function
// The function must return a string with the information to be sent back to the AI for the response generation
// You can also return a JSON or a prompt message instructing the AI how to respond to a user
// Functions may be synchronous or asynchronous.
//
// The bot will inject the following parameters:
// - parameters: function parameters provided by the AI when the function has parameters defined
// - response: AI generated response object, useful to evaluate the AI response and take actions
// - data: webhook event context, useful to access the last user message, chat and contact information
// - device: WhatsApp number device information provided the by Wassenger API
// - messages: an list of previous messages in the same user chat
run: async ({ parameters, response, data, device, messages }) => {
// console.log('=> data:', response)
// console.log('=> response:', response)
const reply = [
'*Send & Receive messages + API + Webhooks + Team Chat + Campaigns + CRM + Analytics*',
'',
'- Platform Professional: 30, 000 messages + unlimited inbound messages + 10 campaigns / month',
'- Platform Business: 60, 000 messages + unlimited inbound messages + 20 campaigns / month',
'- Platform Enterprise: unlimited messages + 30 campaigns',
'',
'Each plan is limited to one WhatsApp number.You can purchase multiple plans if you have multiple numbers.',
'',
'*Find more information about the different plan prices and features here:*',
'https://wassenger.com/#pricing'
].join('\n');
return reply;
}
},
// Sample function to load user information from a CRM
{
name: 'loadUserInformation',
description: 'Find user name and email from the CRM',
parameters: {
type: 'object',
properties: {}
},
run: async ({ parameters, response, data, device, messages }) => {
// You may call an remote API and run a database query
const reply =
'I am sorry, I am not able to access the CRM at the moment.Please try again later.';
return reply;
}
}
];
Execute o bot
Execute o programa do bot:
node main
Execute o programa do bot em uma porta personalizada:
PORT=80 node main
Execute o programa do bot para um dispositivo específico conectado ao Wassenger:
DEVICE=WHATSAPP_DEVICE_ID node main
Execute o programa do bot em modo de produção:
NODE_ENV=production node main
Execute o bot com um servidor de webhook existente sem o túnel Ngrok:
WEBHOOK_URL=https://bot.company.com:8080/webhook node main
Nota: `https://bot.company.com:8080` deve apontar para o próprio programa do bot em execução no seu servidor e deve ser acessível pela rede usando HTTPS para uma conexão segura.
Perguntas
Posso treinar a IA para se comportar de forma personalizada?
Sim! Você pode fornecer instruções personalizadas à IA para determinar o comportamento do bot, identidade e mais.
Para definir suas instruções personalizadas, insira o texto em config.js > botInstructions.
Posso instruir a IA a não responder sobre tópicos não relacionados?
Sim! Definindo um conjunto de instruções claras e explícitas, você pode ensinar a IA a manter-se no papel e recusar educadamente responder a tópicos que não sejam relacionados ao assunto relevante.
Por exemplo, você pode adicionar o seguinte nas suas instruções:
You are a smart virtual customer support assistant who works for Wassenger.
Be polite, gentle, helpful, and empathetic.
Politely reject any queries that are not related to your customer support role or Wassenger itself.
Strictly stick to your role as a customer support virtual assistant for Wassenger.Copiar código
Posso customizar a resposta e o comportamento do chatbot?
Com certeza! O código está disponível gratuitamente e você pode adaptá-lo tanto quanto precisar.
Você só precisa ter algum conhecimento em JavaScript/Node.js, e você sempre pode pedir ao ChatGPT para ajudar a escrever o código que você precisa.
Como impedir que o bot responda a certos chats?
Você deve simplesmente atribuir os chats específicos a qualquer agente no chat web do Wassenger ou usando a API.
Alternativamente, você pode definir rótulos na lista negra em config.js > campo skipChatWithLabels, então adicione um desses rótulos ao chat específico que você quer que seja ignorado pelo bot. Você pode atribuir rótulos aos chats usando o chat web do Wassenger ou usando a API.
Preciso usar Ngrok?
Não, você não precisa. Ngrok é usado apenas para desenvolvimento/testes quando estiver executando o programa no seu computador local. Se você executar o programa em um servidor na nuvem, provavelmente não precisará do Ngrok se o seu servidor for acessível via Internet usando um domínio público (por exemplo, bot.company.com) ou um IP público.
Nesse caso, você precisa fornecer a URL completa do seu servidor terminando com /webhook assim ao executar o programa do bot:
WEBHOOK_URL=https://bot.company.com:8080/webhook node main
Nota: https://bot.company.com:8080 deve apontar para o próprio programa do bot em execução no seu servidor e deve ser acessível pela rede usando HTTPS para uma conexão segura.
O que acontece se o programa falhar?
Por favor, verifique o erro no terminal e assegure-se de que você está executando o programa com permissões suficientes para iniciá-lo na porta 8080 no localhost.
Como evitar que determinados chats sejam respondidos pelo bot?
Por padrão, o bot ignorará mensagens enviadas em chats de grupo, chats bloqueados e arquivados, e contatos arquivados.
Além disso, você pode colocar números de telefone e chats específicos em listas negras ou listas brancas, ou usar rótulos para controlar quais chats serão tratados pelo bot.
Veja as opções numbersBlacklist, numbersWhitelist e skipChatWithLabels em config.js para mais informações.
Posso executar este bot no meu servidor?
Absolutamente! Faça o deploy ou transfira o código-fonte do programa para o seu servidor e execute o comando de inicialização a partir de lá.
Os requisitos são os mesmos, não importa onde você execute o bot.
Além disso, lembre-se de definir a variável de ambiente WEBHOOK_URL com a URL pública do seu servidor acessível pela Internet, conforme explicado anteriormente.
Programa de Afiliados
🤑 💰 Ganhe 30% de comissão indicando usuários ao Wassenger. Obtenha seu link de indicação agora. Aplicam-se termos.






