Construa um Chatbot de IA Alimentado por ChatGPT no WhatsApp para o Seu Negócio

2 de novembro de 2023

Execute em minutos um chatbot de IA totalmente funcional e personalizável, específico para negócios, no seu WhatsApp. Agora suporta GPT-4o (multimodal) e carregamento de dados externos e chamadas de API remotas aprimoradas (RAG)

Transforme seu número do WhatsApp em um poderoso chatbot de IA alimentado pelo ChatGPT em minutos com este tutorial, usando o Node.js, ChatGPT (modelo GPT-4o) e a Wassenger API.

Seguindo este tutorial você terá um chatbot de IA totalmente funcional, semelhante ao ChatGPT, rodando em minutos no seu computador ou servidor na nuvem que atua como um assistente virtual de suporte ao cliente para um propósito de negócio específico.

Você pode facilmente personalizar e instruir o bot de IA para ajustar seu comportamento, papel, finalidade e limites de conhecimento. Além disso, o bot de IA terá consciência da conversa com base no histórico de mensagens anteriores do usuário no WhatsApp, possibilitando respostas mais precisas e contextualizadas.

O chatbot consegue entender e responder em vários idiomas e foi treinado para agir como um assistente virtual de suporte ao cliente para fins comerciais.

Além disso, você pode aumentar facilmente o conhecimento específico do domínio sobre seu negócio em tempo real usando ações de função que permitem que o bot de IA se comunique arbitrariamente com suas funções de código ou APIs remotas para recuperar e fornecer informações personalizadas ao modelo. Encontre um exemplo aqui.

O código deste tutorial está disponível no GitHub💻

Você também pode executar o programa do bot diretamente no seu navegador sem instalar nenhum software ou código clicando aquie 🎉

🤩 🤖 Wassenger é uma solução completa de API para WhatsApp. Inscreva-se para um teste gratuito de 7 dias e comece em minutos!

Conversa demo no WhatsApp com o chatbot ChatGPT usando este tutorial

Conteúdo

🤑 💰 Ganhe 30% de comissão indicando usuários para o Wassenger. Obtenha seu link de indicação agora. Termos se aplicam.

Como funciona

1. Inicia um serviço web que se conecta automaticamente à API da Wassenger e ao seu número do WhatsApp

2. Cria um túnel usando Ngrok para poder receber eventos de Webhook no seu computador (ou você pode usar uma URL de Webhook dedicada se executar o programa do bot em um servidor na nuvem).

3. Registra automaticamente o endpoint do webhook para receber mensagens recebidas.

4. Processa e responde às mensagens recebidas usando um modelo de IA alimentado por ChatGPT treinado com instruções personalizadas.

5. Você pode começar a interagir com o bot de IA enviando mensagens para o número do WhatsApp conectado ao Wassenger.

Recursos

Este tutorial fornece uma implementação completa de um chatbot de IA alimentado por ChatGPT em Node.js que:

  • Fornece um chatbot totalmente funcional no seu número do WhatsApp conectado ao Wassenger
  • Responde automaticamente a quaisquer mensagens recebidas de usuários arbitrários
  • Consegue entender qualquer texto em linguagem natural e responder em mais de 90 idiomas humanos
  • Permite que qualquer usuário solicite falar com um humano, caso em que o chat será atribuído a um agente e sairá do fluxo do bot
  • O comportamento do bot de IA pode ser facilmente ajustado no arquivo de configuração (abra config.js)

Comportamento do bot

O bot de IA sempre responderá a mensagens recebidas com base nos seguintes critérios:

  • O chat pertence a um usuário (chats em grupo são sempre ignorados)
  • 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 está na lista negra (veja config.js)
  • O chat ou contato não está arquivado ou bloqueado
  • Se um chat for desatribuído de um agente, o bot retomará o atendimento e responderá automaticamente às novas mensagens recebidas

Requisitos

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)
|- store.js -> the bot source code in a single file
|- 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 o git, baixe os arquivos-fonte do projeto aqui e descompacte-os.

É assim que o chat cooperativo otimizado pela equipe Wassenger se parece. Inscreva-se gratuitamente

🤑 💰 Ganhe 30% de comissão indicando usuários para o Wassenger. Obtenha seu link de indicação agora. Termos se aplicam.

Configuração

Abra seu terminal favorito e mude o diretório para a pasta do projeto onde o 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 da API Wassenger

Insira sua chave da API do Wassenger

Você pode se inscrever gratuitamente aqui e então obter a chave da API aqui:

// Required. Specify the Wassenger API key to be used // You can obtain it here: https://app.wassenger.com/apikeys apiKey: env.API_KEY || 'ENTER API KEY HERE',

Defina sua chave da API OpenAI

Insira sua chave da API da OpenAI

Inscreva-se na OpenAI gratuitamente e então obtenha a chave da API aqui:

// Required. Specify the OpenAI API key to be used // You can sign up for free here: https://platform.openai.com/signup // Obtain your API key here: https://platform.openai.com/account/api-keys openaiKey: 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.

Inscreva-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 na linha 90:

// Ngrok tunnel authentication token. // Required if webhook URL is not provided. // sign up for free and get one: https://ngrok.com/signup // Learn how to obtain the auth token: https://ngrok.com/docs/agent/#authtokens ngrokToken: env.NGROK_TOKEN || 'ENTER NGROK TOKEN HERE',

Se você executar o programa em um servidor na nuvem acessível publicamente pela Internet, não precisa usar Ngrok. Em vez disso, defina a URL do seu servidor no campo webhookUrl em config.js.

Personalização

Você pode personalizar 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 atender requisitos mais específicos. As possibilidades são praticamente ilimitadas!

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 a mensagem padrão com base nas suas preferências:

// Default message when the user sends an unknown message. const unknownCommandMessage = `I'm sorry, I can only understand text. Can you please describe your query? If you would like to chat with a human, just reply with *human*.`

// Default welcome message. Change it as you need. const welcomeMessage = `Hey there 👋 Welcome to this ChatGPT-powered AI chatbot demo using *Wassenger API*! I can also speak many languages 😁`

// AI bot instructions to adjust its behaviour. Change it as you need. // Use concise and clear instructions. const botInstructions = `You are a smart virtual customer support assistant that works for Wassenger. You can identify yourself as Molly, the Wassenger chatbot assistant. You will be chatting with random customers who may contact you with general queries about the product. Wassenger is a cloud solution that offers WhatsApp API and multi-user live communication services designed for businesses and developers. Wassenger also enables customers to automate WhatsApp communication and build chatbots. You are an expert in customer support. Be polite, be gentle, be helpful and emphatic. Politely reject any queries that are not related to customer support or Wassenger itself. Strictly stick to your role as a customer support virtual assistant for Wassenger. If you can't help with something, ask the user to type *human* in order to talk with customer support.`

// Default help message. Change it as you need. const defaultMessage = `Don't be shy 😁 try asking anything to the AI chatbot, using natural language! Example queries: 1️⃣ Explain me what is Wassenger 2️⃣ Can I use Wassenger to send automatic messages? 3️⃣ Can I schedule messages using Wassenger? 4️⃣ Is there a free trial available? Type *human* to talk with a person. The chat will be assigned to an available member of the team. Give it a try! 😁`

Abra o arquivo de configuração completo com todas as opções disponíveis

Chamar dados externos e APIs (RAG)

Com chamadas de função, você pode facilmente alimentar o modelo de IA com 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).

Nos bastidores, isso usa o recurso de Chamada de Função de Ferramenta da OpenAI.

Quando o modelo de IA precisar de determinada informação, ele instruirá a execução de uma ou múltiplas funções para recuperar informações adicionais; por exemplo, em uma função você pode consultar uma API CRM externa ou 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 ao modelo de IA para gerar respostas precisas e específicas ao usuário.

Usar funções de ferramenta é poderoso e permite construir casos de uso complexos e específicos de domínio para um bot agente de IA.

Aqui está um exemplo de implementação RAG com múltiplas funções de ferramenta:

// 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 the 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 } },

// Sample function to verify the current date and time { name: 'verifyMeetingAvaiability', description: 'Verify if a given date and time is available for a meeting before booking it', parameters: { type: 'object', properties: { date: { type: 'string', format: 'date-time', description: 'Date of the meeting' } }, required: ['date'] }, run: async ({ parameters, response, data, device, messages }) => { console.log('=> verifyMeetingAvaiability call parameters:', parameters) // Example: you can make an API call to verify the date and time availability and return the confirmation or rejection message const date = new Date(parameters.date) if (date.getUTCDay() > 5) { return 'Not available on weekends' } if (date.getHours() < 9 || date.getHours() > 17) { return 'Not available outside business hours: 9 am to 5 pm' } return 'Available' } },

// Sample function to determine the current date and time { name: 'bookSalesMeeting', description: 'Book a sales or demo meeting with the customer on a specific date and time', parameters: { type: 'object', properties: { date: { type: 'string', format: 'date-time', description: 'Date of the meeting' } }, required: ['date'] }, run: async ({ parameters, response, data, device, messages }) => { console.log('=> bookSalesMeeting call parameters:', parameters) // Make an API call to book the meeting and return the confirmation or rejection message return 'Meeting booked successfully. You will receive a confirmation email shortly.' } },

// Sample function to determine the current date and time { name: 'currentDateAndTime', description: 'What is the current date and time', run: async ({ parameters, response, data, device, messages }) => { return new Date().toLocaleString() } } ]

Execute o bot

Você pode executar o programa do bot agora mesmo no seu navegador usando o StackBlitz:

WhatsApp ChatGPT-powered Edit descriptio.npr.new

Uso

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

Observação: 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 uma 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 tópicos que não sejam relevantes.

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, be gentle, be helpful and emphatic.
Politely reject any queries that are not related to your customer support role or Wassenger itself.
Strictly stick to your role as customer support virtual assistant for Wassenger.

Posso personalizar a resposta e o comportamento do chatbot?

Com certeza! O código está disponível gratuitamente e você pode adaptá-lo o quanto precisar.

Você só precisa ter algum conhecimento de JavaScript/Node.js, e sempre pode pedir ajuda ao ChatGPT para escrever o código que precisar.

Como impedir que o bot responda a certos chats?

Você deve simplesmente atribuir os chats específicos a qualquer agente no Wassenger web chat ou usando a API.

Alternativamente, você pode definir rótulos em lista negra em config.js > skipChatWithLabels, e então adicionar um desses rótulos ao chat específico que deseja que seja ignorado pelo bot. Você pode atribuir rótulos aos chats usando o Wassenger web chat ou usando a API.

Preciso usar o Ngrok?

Não, não precisa. Ngrok é usado apenas para desenvolvimento/testes quando se executa o programa no computador local. Se você executar o programa em um servidor na nuvem, provavelmente não precisará do Ngrok se seu servidor for acessível pela Internet usando um domínio público (ex.: 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

Observação: 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?

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 chats específicos sejam respondidos pelo bot?

Por padrão, o bot vai ignorar mensagens enviadas em chats em grupo, chats/contatos bloqueados e arquivados.

Além disso, você pode colocar números de telefone e chats com rótulos em uma lista negra ou lista branca para controlar o que o bot deve tratar.

Veja as opções numbersBlacklist, numbersWhitelist e skipChatWithLabels em config.js para mais informações.

Posso executar este bot no meu servidor?

Com certeza! Faça o deploy ou transfira o código-fonte do programa para o seu servidor e execute o comando de início a partir dele.

Os requisitos são os mesmos, não importa onde você execute o bot.

Também 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.

Ready to transform your WhatsApp communication?

Start automating your customer interactions today with Wassenger

Get Started Free