Parte 1: Se você não tem tempo para ler
Este exemplo de implementação do bot detalha em profundidade as funcionalidades mais usadas. Isso permitirá que você adapte o código-fonte às suas tarefas e necessidades, ou tome-o como base para criar qualquer outra integração. Deixamos comentários perto de cada função para facilitar o entendimento do código. No código-fonte do bot, você encontrará as seguintes funcionalidades:
- Responder a um comando desconhecido, isso pode ser uma instrução ou sua mensagem de boas-vindas;
- Enviar mensagem regular;
- Enviar imagem;
- Enviar arquivo;
- Enviar vídeo;
- Enviar contato (vCard);
- Enviar produto;
- Criar novo grupo, enviar convite e enviar mensagem para o grupo;
- Receber e ler mensagens recebidas;
Para o bot funcionar, NÃO É NECESSÁRIO que o telefone esteja ligado ou online. Conecte o número e teste a integração com conforto!
E se precisar de ajuda, é só escrever para nós no chat de suporte em qualquer página do site.
Se você estiver decidindo qual provedor escolher ou não entender completamente a diferença entre a API do WhatsApp Business e a API do WhatsApp, será útil estudar nosso guia, no qual comparamos provedores, funcionalidades, preços e soluções atuais. Isso será útil para que todos possam decidir qual API e qual provedor escolher. Portanto, mergulhe em nosso artigo "Como escolher a API do WhatsApp. Comparação."
E se precisar de ajuda, é só escrever para nós no chat de suporte em qualquer página do site.
Se você estiver decidindo qual provedor escolher ou não entender completamente a diferença entre a API do WhatsApp Business e a API do WhatsApp, será útil estudar nosso guia, no qual comparamos provedores, funcionalidades, preços e soluções atuais. Isso será útil para que todos possam decidir qual API e qual provedor escolher. Portanto, mergulhe em nosso artigo "Como escolher a API do WhatsApp. Comparação."
Por que você deveria criar um Chatbot do WhatsApp?
No mundo moderno, o WhatsApp não é apenas a principal plataforma de mensagens instantâneas com bilhões de usuários, mas também uma ferramenta indispensável para os negócios. A automação das funções de mensagens oferece uma série de vantagens estratégicas, desde suporte imediato ao cliente até marketing eficaz e coleta de feedback. Nesse contexto, criar um bot para o WhatsApp torna-se um passo fundamental para otimizar processos de negócios e estabelecer contato direto com sua audiência.
Neste guia, forneceremos instruções passo a passo para criar um bot do WhatsApp em PHP. Você aprenderá:
- Como trabalhar com a API do WhatsApp;
- Entender as nuances de criar chatbots em PHP;
- Automatizar e melhorar a interação com seus clientes;
Preparando para começar - O que você vai precisar
Antes de passarmos para a parte prática de criar um bot para WhatsApp em PHP, certifique-se de que possui todas as ferramentas e recursos necessários.
- Conta no Whapi.Cloud. Para trabalhar com a API do WhatsApp, você precisará de uma conta em Whapi.Cloud. Este provedor oferece aos desenvolvedores métodos para automatizar o WhatsApp e a documentação da API. Atualmente, o Whapi.Cloud é o provedor mais funcional e estável que oferece acesso acessível à API do WhatsApp. Após o registro, você receberá um canal gratuito com uma chave de token API única, que permitirá que sua aplicação/integração em PHP interaja com o mensageiro.
- Servidor com PHP ou desenvolvimento local. Se você decidir testar seu bot localmente e deseja que ele interaja com o WhatsApp através de um Webhook, pode usar ferramentas como ngrok. Este aplicativo cria túneis seguros para o seu servidor local, fornecendo URLs públicos temporários que você pode usar para testes. Para que o servidor chame nosso script ao receber novas mensagens, precisamos especificar a URL do WebHook nas configurações do canal. Falaremos mais sobre isso mais tarde.
Trabalhando com a API do WhatsApp via Whapi.Cloud
Registre-se e vá para a página do seu canal. Ao se registrar pela primeira vez, você receberá 5 dias de acesso completo à API, o que será suficiente para testar todos os métodos da API. Se isso não for suficiente, entre em contato com o suporte do serviço através do widget de chat e eles removerão as restrições para um teste confortável.
O próximo passo será conectar seu número do WhatsApp. Não se preocupe, você pode se desconectar a qualquer momento, mas isso é necessário para que você possa testar sua implementação. Assim, vá ao seu painel, encontre seu primeiro canal, Default Channel, e clique nele. No primeiro passo, você verá um QR Code e uma pequena instrução. Abra o WhatsApp no seu dispositivo móvel, vá para Configurações -> Dispositivos vinculados -> Conectar dispositivo -> Scanear QR Code.
Durante a conexão, nas etapas dois e três, você terá a oportunidade de configurar seu canal. Dê um nome ao canal para sua conveniência (a propósito, nossa API detectará imediatamente se você está usando a versão padrão ou a versão empresarial do aplicativo com recursos expandidos). Em seguida, estarão disponíveis as configurações de webhook e outros parâmetros à sua escolha. No entanto, essas ações podem ser feitas mais tarde e você pode pular esta etapa.
Após a ativação do canal, na seção de limites, encontre seu token da API. Esse token é crucial para autenticação ao acessar a API. Geralmente, ele é enviado nos cabeçalhos das solicitações como um Bearer Token ou como um parâmetro, dependendo de como você acessa a API.
A API Whapi.Cloud oferece uma ampla variedade de métodos para interagir com o WhatsApp, realmente permitindo que você automatize as principais características e funções do mensageiro. Na página do canal, você pode estudar e testar todos os métodos disponíveis. Para facilitar o desenvolvimento, é fornecido um hub especializado para desenvolvedores, onde cada função é acompanhada de exemplos de código e a capacidade de testar no local, mostrando resultados e respostas do servidor. Isso simplifica e acelera muito o processo de integração, você vai adorar! Uma das vantagens do Whapi.Cloud é a simplicidade e rapidez de conexão, permitindo que você comece a interagir com o WhatsApp em apenas alguns minutos.
Após a ativação do canal, na seção de limites, encontre seu token da API. Esse token é crucial para autenticação ao acessar a API. Geralmente, ele é enviado nos cabeçalhos das solicitações como um Bearer Token ou como um parâmetro, dependendo de como você acessa a API.
A API Whapi.Cloud oferece uma ampla variedade de métodos para interagir com o WhatsApp, realmente permitindo que você automatize as principais características e funções do mensageiro. Na página do canal, você pode estudar e testar todos os métodos disponíveis. Para facilitar o desenvolvimento, é fornecido um hub especializado para desenvolvedores, onde cada função é acompanhada de exemplos de código e a capacidade de testar no local, mostrando resultados e respostas do servidor. Isso simplifica e acelera muito o processo de integração, você vai adorar! Uma das vantagens do Whapi.Cloud é a simplicidade e rapidez de conexão, permitindo que você comece a interagir com o WhatsApp em apenas alguns minutos.
O que é Webhook e como configurá-lo?
Seu bot do WhatsApp e nossa API devem se comunicar, de modo que quando algo muda em um sistema, o outro sistema saiba sobre isso. Por exemplo, rastrear mudanças no status das mensagens, como "enviado", "entregue" e "lido".
É aqui que o Webhook entra! Um Webhook configurado permite que seu servidor saiba instantaneamente sobre eventos específicos. De acordo com suas configurações, você poderá receber notificações sobre mensagens, seu status atual, status do canal, telefone, chamadas perdidas e assim por diante. A principal diferença do Whapi.Cloud é a flexibilidade na configuração e gerenciamento de webhooks. Você poderá definir vários hooks diferentes para qualquer evento. E várias opções adicionais, como Auto Download ou Modo Webhook, facilitarão seu trabalho.
Exploramos todos os detalhes do trabalho com webhooks em mais detalhes na nossa base de conhecimento: Ver artigo sobre webhooks
Acesse a configuração do seu canal pelo botão no canto superior direito. No início, você verá a seção de webhooks. Forneça o URL do seu servidor para receber notificações. Se necessário, adicione mais webhooks, escolha o Modo e o modo de operação do hook. Quando você recebe uma mensagem, uma requisição POST com informações sobre a mensagem é enviada para o URL que você especificou. Isso permite que seu bot analise mensagens recebidas e responda de acordo. Os webhooks podem ser configurados tanto pela interface no painel pessoal quanto programaticamente via API (método /Update channel settings/). Discutiremos mais adiante sobre como trabalhar com as informações recebidas e processá-las.
Criando a base de um bot em PHP
Enviar e receber mensagens
Primeiro, vamos definir a estrutura de seu projeto. Instale o Composer (se ainda não o tiver feito), inicialize o projeto com "composer init", instale as dependências e a geração do carregador automático. Você terá uma pasta de fornecedor com o carregador automático. Agora você pode conectar o carregador automático do Composer no início do seu arquivo index.php. Após essas etapas básicas, seu projeto estará pronto para continuar o desenvolvimento.
Vamos criar o diretório raiz público: é aqui que o executável principal (por exemplo, index.php), config.php (para armazenar configurações, como sua chave de API) e a pasta "files" (para armazenar os arquivos que você enviará) estarão localizados.
Como lembrete, o código-fonte completo desse projeto pode ser baixado do GitHub: https://github.com/Whapi-Cloud/php-whatsapp-chatbot
config.php
return [
// API endpoint URL
"apiUrl" => "https://gate.whapi.cloud",
// API token from your channel
"token" => "YOUR CHANNEL TOKEN",
// The ID of the group to which we will send the message. Use to find out the ID: https://whapi.readme.io/reference/getgroups
"group" => '[email protected]',
// The ID of the product we will send for the example. Create a product in your WhatsApp and find out the product ID: https://whapi.readme.io/reference/getproducts
"product" => '6559353560856703',
// Bot`s URL. Webhook Link to your server. At ( {server link}/messages ), when POST is requested, processing occurs in index.php
"botUrl" => "https://yoursite.com/messages"
];
index.php
require '../vendor/autoload.php';
use GuzzleHttp\Client;
use Slim\App;
use Slim\Http\Request;
use Slim\Http\Response;
// Don't forget to put your token in config.php
$config = require './config.php';
$app = new App();
$client = new Client([
'base_uri' => $config['apiUrl']
]);
// Commands for example bot
const COMMANDS = [
'TEXT' => 'Simple text message',
'IMAGE' => 'Send image',
'DOCUMENT' => 'Send document',
'VIDEO' => 'Send video',
'CONTACT' => 'Send contact',
'PRODUCT' => 'Send product',
'GROUP_CREATE' => 'Create group',
'GROUP_TEXT' => 'Simple text message for the group',
'GROUPS_IDS' => 'Get the id\'s of your three groups'
];
// Url files for example
const FILES = [
'IMAGE' => './files/file_example_JPG_100kB.jpg',
'DOCUMENT' => './files/file-example_PDF_500_kB.pdf',
'VIDEO' => './files/file_example_MP4_480_1_5MG.mp4',
'VCARD' => './files/sample-vcard.txt'
];
function sendWhapiRequest($endpoint, $params = [], $method = 'POST')
{
global $config, $client;
$url = $config['apiUrl'] . '/' . $endpoint;
$options = [
'headers' => [
'Authorization' => 'Bearer ' . $config['token'],
],
];
if ($params && count($params) > 0) {
if ($method === 'GET') {
$url .= '?' . http_build_query($params);
} else {
if(isset($params['media'])){
$options['multipart'] = toFormData($params);
}else{
$options['headers']['Content-Type'] = 'application/json';
$options['body'] = json_encode($params);
}
}
}
echo '$options: ' . print_r($options, true);
$response = $client->request($method, $url, $options);
$json = json_decode($response->getBody()->getContents(), true);
echo 'Whapi response: ' . print_r($json, true);
return $json;
}
function toFormData($params)
{
$multipart = [];
foreach ($params as $name => $contents) {
$multipart[] = ['name' => $name, 'contents' => $contents];
}
return $multipart;
}
// Call this function if you want to setup a webhook through the API. In this example it is not called: you will need to go to the channel settings in your personal cabinet and set the webhook link like {link to your server}/messages
function setHook()
{
global $config;
if ($config['botUrl']) {
sendWhapiRequest('settings', [
'webhooks' => [
[
'url' => $config['botUrl'],
'events' => [
[
'type' => 'messages',
'method' => 'post'
]
],
'mode' => 'body'
]
]
], 'PATCH');
}
}
$app->get('/', function (Request $request, Response $response) {
return $response->write('Bot is running');
});
$app->post('/messages', function (Request $request, Response $response) use ($config) {
$data = json_decode($request->getBody(), true);
$messages = $data['messages'] ?? [];
foreach ($messages as $message) {
if ($message['from_me']) {
continue;
}
$sender = ['to' => $message['chat_id']];
$endpoint = 'messages/text';
$textBody = trim($message['text']['body'] ?? '');
$commandIndex = is_numeric($textBody) ? (int)$textBody - 1 : null;
$commands = array_keys(COMMANDS);
$command = $commands[$commandIndex] ?? null;
switch ($command) {
case 'TEXT':
$sender['body'] = 'Simple text message';
break;
case 'IMAGE':
$sender['caption'] = 'Text under the photo.';
$sender['media'] = fopen(FILES['IMAGE'], 'r');
$endpoint = 'messages/image';
break;
case 'DOCUMENT':
$sender['caption'] = 'Text under the document.';
$sender['media'] = fopen(FILES['DOCUMENT'], 'r');
$endpoint = 'messages/document';
break;
case 'VIDEO':
$sender['caption'] = 'Text under the video.';
$sender['media'] = fopen(FILES['VIDEO'], 'r');
$endpoint = 'messages/video';
break;
case 'CONTACT':
$sender['name'] = 'Whapi Test';
$sender['vcard'] = file_get_contents(FILES['VCARD']);
$endpoint = 'messages/contact';
break;
case 'PRODUCT':
// Replace with your product ID
$endpoint = "business/products/{$config['product']}";
break;
case 'GROUP_CREATE':
$groupSettings = [
'subject' => 'Whapi.Cloud Test',
'participants' => [$message['from']]
];
$groupResponse = sendWhapiRequest('groups', $groupSettings, 'POST');
$sender['body'] = $groupResponse['group_id'] ? "Group created. Group id: {$groupResponse['group_id']}" : 'Error';
$endpoint = 'messages/text';
break;
case 'GROUP_TEXT':
$sender['to'] = $config['group'];
$sender['body'] = 'Simple text message for the group';
break;
case 'GROUPS_IDS':
$groupsResponse = sendWhapiRequest('groups', ['count' => 3], 'GET');
if (!empty($groupsResponse['groups'])) {
$groupIds = array_map(function ($group, $i) {
return ($i + 1) . ". {$group['id']} - {$group['name']}";
}, $groupsResponse['groups'], array_keys($groupsResponse['groups']));
$sender['body'] = implode(",\n ", $groupIds);
} else {
$sender['body'] = 'No groups';
}
break;
default:
$sender['body'] = "Hi. Send me a number from the list. Don't forget to change the actual data in the code! \n\n" .
implode("\n", array_map(function ($text) {
static $i = 0;
$i++;
return ($i) . ". $text";
}, COMMANDS, array_keys(COMMANDS)));
break;
}
try {
sendWhapiRequest($endpoint, $sender);
} catch (\Exception $e) {
error_log($e->getMessage());
return $response->withStatus(500)->write('Error: ' . $e->getMessage());
}
}
return $response->withStatus(200)->write('Ok');
});
$app->run();
Esse bot simples responderá a comandos desconhecidos com uma mensagem de menu, bem como responderá com determinadas ações a comandos específicos.
Como as respostas estão no formato JSON, isso oferece um grande espaço para o desenvolvimento de seu bot. Isso pode incluir detalhes como a hora e o status de entrega da mensagem ou o status do usuário (on-line ou off-line), permitindo que seu bot otimize as interações com o cliente. Nossa documentação e o Developer Hub fornecem detalhes completos sobre a estrutura de resposta e os parâmetros esperados para cada solicitação. Todos os detalhes e parâmetros estão descritos na documentação. Use a funcionalidade Vesb para tornar seu bot ainda mais eficiente.
Recursos avançados
Em nossa documentação detalhada, você encontrará instruções passo a passo e exemplos de uso de métodos que permitem enviar vários conteúdos, desde arquivos de qualquer formato, localizações e contatos até stickers, enquetes e produtos em uma mensagem. Além disso, você pode interagir com mensagens citando-as, reagindo com emojis, marcando como lidas, anexando ou simulando a digitação em tempo real ao responder.
A automação de grupos no WhatsApp através do Whapi.Cloud oferece amplas possibilidades. Com a API, você pode criar, editar ou excluir grupos automaticamente, obter informações sobre grupos e membros do grupo (números, nomes, contagem total), gerenciar membros, definir papéis de administradores, ajustar parâmetros do grupo (avatars, nome, configurações), criar convites por links, bloquear membros e muito mais. Todos os métodos disponíveis estão detalhados na documentação do Whapi.Cloud.
Com um leque tão expansivo de capacidades à sua disposição, criar um bot adaptado a qualquer nível de complexidade e propósito torna-se uma tarefa simples. Integre sem problemas o seu bot baseado em PHP a qualquer plataforma, seja um site, aplicativo, CRM, sistema ERP e além.
Enviar mensagem com imagem
Enviar uma mensagem com imagem através de um bot do WhatsApp aumenta o engajamento do usuário, oferece uma experiência mais dinâmica e interativa e permite que as empresas apresentem produtos ou transmitam mensagens visualmente, criando um canal de comunicação mais rico em comparação com o texto sozinho. Veja como enviar uma imagem via Whatsapp API com PHP:
const BASE_URL = 'https://gate.whapi.cloud/';
$token = 'bg3FeZJ6jWGw32g03PRnoNkKO7k03GtX'; // Your API token
$data = array (
'media' => 'https://upload.wikimedia.org/wikipedia/commons/b/ba/Leonardo_self.jpg',
'to' => '[email protected]',
'mime_type' => 'jpg',
'caption' => 'Leonardo Self'
);
$data_json = json_encode($data);
$url = BASE_URL . 'messages/image';
$options = array(
'http' => array(
'method' => 'POST',
'header' => array(
'Authorization: Bearer '.$token,
'Content-Type: application/json',
'Accept: application/json'
),
'content' => $data_json
)
);
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
echo $response;
Enviar arquivo via WhatsApp API
Enviar arquivos através de um bot do WhatsApp otimiza o compartilhamento de informações, oferece uma maneira segura e instantânea de distribuir documentos importantes e melhora a experiência do usuário, fornecendo opções de comunicação mais versáteis além de texto e imagens. Veja como enviar um arquivo via Whatsapp API com PHP:
const BASE_URL = 'https://gate.whapi.cloud/';// Ensure that the PHP allow_url_fopen setting is enabled, as file_get_contents requires it for URL handling.
$token = 'bg3FeZJ6jWGw32g03PRnoNkKO7k03GtX'; // Your API token
$data = array (
'to' => '[email protected]',
'media' => 'data:application/octet-stream;name=site.webmanifest;base64,ewogICAgIm5hbWUiOiAiIiwKICAgICJzaG9ydF9uYW1lIjogIiIsCiAgICAiaWNvbnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAic3JjIjogIi9hbmRyb2lkLWNocm9tZS0xOTJ4MTkyLnBuZyIsCiAgICAgICAgICAgICJzaXplcyI6ICIxOTJ4MTkyIiwKICAgICAgICAgICAgInR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgIH0KICAgIF0sCiAgICAidGhlbWVfY29sb3IiOiAiI2ZmZmZmZiIsCiAgICAiYmFja2dyb3VuZF9jb2xvciI6ICIjZmZmZmZmIiwKICAgICJkaXNwbGF5IjogInN0YW5kYWxvbmUiCn0K',
'filename' => 'webmanifest',
'caption' => "It's my file",
'view_once' => true
);
$data_json = json_encode($data);
$url = BASE_URL . 'messages/document';
$options = array(
'http' => array(
'method' => 'POST',
'header' => array(
'Authorization: Bearer '.$token,
'Content-Type: application/json',
'Accept: application/json'
),
'content' => $data_json
)
);
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
echo $response;
Conclusão e recomendações
Construir um bot para WhatsApp usando PHP e aproveitando o serviço Whapi.Cloud para integração de API simplifica as complexidades associadas às plataformas de mensagens. Como demonstramos ao longo deste guia, o processo pode ser dividido em etapas gerenciáveis que mesmo aqueles novos em PHP ou integrações de API podem entender e implementar.
Este bot foi projetado com uma filosofia de "plug-and-play". Começar é fácil. Primeiro de tudo, tudo o que você precisa fazer é se registrar em nosso serviço. Oferecemos um teste gratuito, permitindo que você experimente todas as funcionalidades antes de tomar uma decisão de compra. Uma vez registrado, faça upload do código do bot para o seu servidor. Seguindo as instruções fornecidas neste artigo, seu bot estará em funcionamento em pouco tempo.
Lembre-se, se você encontrar qualquer dúvida ou desafio ao longo do caminho, nossa equipe de suporte está sempre à disposição para ajudar. Valorizamos cada usuário e estamos comprometidos em garantir que sua experiência com nossa API seja o mais tranquila e eficiente possível.