Documentação API WhatsGO

Um passo-a-passo detalhado de como utiizar a API.

Conceitos básicos

Antes de iniciarmos é importante que você entenda que tipo de API você irá trabalhar.

1. O WhatsGO utiliza a estrutura que o Web Whats possui para realizar todas as interações, PORÉM, não existe um navegador no serviço, você irá trabalhar diretamente com as rotinas que vão gerar o QR, que vão realizar o envio, que vão ativar o chat temporário, etc.

2. Tudo o que você envia para API e tudo o que você irá receber dela (mensagens e retornos) é em UTF-8.

3. Todas as mensagens e a grande maioria dos retornos que a API possui são para WEBHOOK, ou seja, para realizar os testes com o sistema é necessário ter um, mas não se preocupe, vamos deixar disponível para você um exemplo em PHP.

Áreas automatizadoras

Para você realizar uma automatização é necessário uma área que irá sincronizar com um número de whatsapp e a partir daqui realizar a sua administração de mensagens, cada área dessa possui um token, uma numeração que só aquela área possui.

Cada token automatiza um número.

Como realizar os testes para entender a API?

Nós sempre indicamos uma ferramenta chamada POSTMAN para te ajudar a realizar as chamas para o servidor e desta forma te ajudando a entender o funcionamento do sistema.

(Postaman é basicamente uma plataforma de API para desenvolvedores projetar, construir, testar APIs. Toda a explicação da documentação está baseada na utilização deste app.)

Como mencionado anteriormente, você também irá precisar instalar o webhook no seu servidor para o recebimento das mensagens e retornos (você terá o webhook em php aqui).

Webhook

Exemplo, Funcionamento, Recebimento.

Exemplo em PHP

É desta forma como você irá receber e processar os posts da API...

				
					<?php
$data = file_get_contents("php://input");
$event = json_decode($data);


process_event($event);

				
			

Exemplo em NODE

Este exemplo foi gerado por uma Inteligência Artificial para te auxiliar.

				
					const express = require('express');

const app = express();

// Permitir o uso do express.json() para analisar o corpo das requisições POST JSON
app.use(express.json());

// Definir o webhook que receberá a requisição POST com JSON
app.post('/webhook', (req, res) => {
  console.log('Recebendo webhook JSON:', req.body);

  // Aqui você pode processar os dados JSON recebidos, como salvar em um banco de dados
  // ou realizar outras ações com base nos dados recebidos

  // Enviar uma resposta para a requisição indicando sucesso
  res.status(200).send('Webhook JSON recebido com sucesso!');
});

// Iniciar o servidor na porta 3000
app.listen(3000, () => {
  console.log('Servidor iniciado na porta 3000');
});

				
			

Exemplo em JAVA

Este exemplo foi gerado por uma Inteligência Artificial para te auxiliar.

				
					1) crie um novo diretório para o projeto e navegue até ele no terminal:

mkdir webhook-json-example
cd webhook-json-example


2) Crie um arquivo chamado pom.xml no diretório do projeto com as seguintes dependências do Spring Boot e Maven:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>webhook-json-example</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.6</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>


3) Crie um arquivo chamado WebhookController.java no diretório src/main/java/com/example/webhookjsonexample e adicione o seguinte código:

package com.example.webhookjsonexample;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class WebhookController {

    @PostMapping("/webhook")
    public ResponseEntity<String> webhook(@RequestBody String jsonPayload) {
        System.out.println("Recebendo webhook JSON: " + jsonPayload);

        // Aqui você pode processar os dados JSON recebidos, como salvar em um banco de dados
        // ou realizar outras ações com base nos dados recebidos

        return new ResponseEntity<>("Webhook JSON recebido com sucesso!", HttpStatus.OK);
    }
}


4) Crie um arquivo chamado Application.java no diretório src/main/java/com/example/webhookjsonexample e adicione o seguinte código:

package com.example.webhookjsonexample;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}


5) Inicie o servidor executando o seguinte comando no terminal:

./mvnw spring-boot:run


				
			

Exemplo em PYTHON

Este exemplo foi gerado por uma Inteligência Artificial para te auxiliar.

				
					from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def webhook():
    data = request.get_json()
    print("Recebendo webhook JSON:", data)

    # Aqui você pode processar os dados JSON recebidos, como salvar em um banco de dados
    # ou realizar outras ações com base nos dados recebidos

    return jsonify({"message": "Webhook JSON recebido com sucesso!"}), 200

if __name__ == '__main__':
    app.run(port=3000)

				
			

ATENÇÃO

Também temos exemplos nas linguagens: CSharp, GO e Ruby. Entre em contato.

Funcionamento

Com o Webhook nós queremos receber eventos (posts) no servidor e processar eles, ou seja, realizar a leitura do evento.

Para cada token que você possui com o WhatsGO você irá instalar a URL onde o seu hook foi instalado, nele você irá começar a receber todos os posts exemplificados nesta documentação.

É literalmente o caminho do local onde seu hook está instalado, exemplo…

Vamos supor que você tenha o seguinte domínio: abc.com.br, e você quer inserir o hook.php em uma pasta chamada api whatsgo.

A URL que você irá instalar na API para receber os eventos será: https://abc.com.br/api-whatsgo/hook.php

Tanto faz, vai depender da forma que você quer trabalhar e gerenciar os dados.

Antes de instalar o hook...

Precisamos realizar a configuração do cabeçalho da requisição, veja o próximo passo e vamos iniciar a documentação na prática!

Toda requisição que você realiza para o servidor precisa ter o seu destino corretamente configurado.

HostID: Para qual servidor a sua área automatizadora está.

Token: Qual área é.

Cabeçalho da requisição

HostID e Token

Headers da requisição

Solicitando um teste com a API você receberá um TOKEN e HOSTID.

Reforçando: Todas as requisições necessitam do headers corretamente configurado.

Instalando o Hook

Você vai realizar um Post para a URL...

				
					https://app.whatsgo.net.br/cgi/whatsapp/whatsgo.js
				
			

Requisição:

				
					{
    "cmd":"hook",
    "value":"https://abc.com.br/api-whatsgo/hook.php"
}
				
			

Retorno:

QRcode da área

Gerando o QRcode e realizando a autenticação.

Como pegar

Após a instalação do hook no token você vai receber automaticamente 6 QRcodes, ou seja, não é necessário uma requisição solicitando o QR.

Retorno:

				
					{
    "hostid": "00000000-0000-0000-0000-d00000f0000e",
    "token": "000000000123",
    "key": ["2@sKUSkZYU6ntm0KOaRx/E6oKierJf74W4jpSok22q5xApIuyCkpI0331lMAxK0sAW26BhOry5X9Uuww==,YOYT0osQbouQDmCjbFIKYTFM8lH6e5oulbyhbgVqtEI=,nDo0e365guzCV7f5xMW0bmfFiXw0asekq7zd8JeGqmw=,3KE4ZVKCKbyRVeNEdO7pRgKIjIUiU2MIBEbKu7QDwgY=",
            "2@HNIXCTi0GoMe9PEDHC0xt2xoU+mUXyi4U5hxegz3P/1yu1cm2PN3R75DpblXnv74UZajndeWw3FRfw==,YOYT0osQbouQDmCjbFIKYTFM8lH6e5oulbyhbgVqtEI=,nDo0e365guzCV7f5xMW0bmfFiXw0asekq7zd8JeGqmw=,3KE4ZVKCKbyRVeNEdO7pRgKIjIUiU2MIBEbKu7QDwgY=",
            "2@QHqGNxURv2ftzBcFSQXaa/4mwQOBSmydtahEJ3VWpywclrLt9/Tyx+G+JYjJmxILjVzEN9PsT94Tlw==,YOYT0osQbouQDmCjbFIKYTFM8lH6e5oulbyhbgVqtEI=,nDo0e365guzCV7f5xMW0bmfFiXw0asekq7zd8JeGqmw=,3KE4ZVKCKbyRVeNEdO7pRgKIjIUiU2MIBEbKu7QDwgY=", 
            "2@W3FWrjXn40/+oivL2r75nq3NdEIUC/TMLCPplKcFvxlICWNaejimuggA+NFVFWftA1WdP8SP122xzg==,YOYT0osQbouQDmCjbFIKYTFM8lH6e5oulbyhbgVqtEI=,nDo0e365guzCV7f5xMW0bmfFiXw0asekq7zd8JeGqmw=,3KE4ZVKCKbyRVeNEdO7pRgKIjIUiU2MIBEbKu7QDwgY=", 
            "2@EsC6adVvKjQWGL/eBiHcfmEZCHyefyLscN228yMkSHbI4NQABH31Kx1NdC+zDUmmzW33OhcEkJuosA==,YOYT0osQbouQDmCjbFIKYTFM8lH6e5oulbyhbgVqtEI=,nDo0e365guzCV7f5xMW0bmfFiXw0asekq7zd8JeGqmw=,3KE4ZVKCKbyRVeNEdO7pRgKIjIUiU2MIBEbKu7QDwgY=", 
            "2@wE5OStuFcv5zuqKu52Qmhd+2j4FRsaWEL7J+/CYr80ZYMN63oU6imhs7fh3EQc7FJ7cbi0LkSgMFgQ==,YOYT0osQbouQDmCjbFIKYTFM8lH6e5oulbyhbgVqtEI=,nDo0e365guzCV7f5xMW0bmfFiXw0asekq7zd8JeGqmw=,3KE4ZVKCKbyRVeNEdO7pRgKIjIUiU2MIBEbKu7QDwgY="],
    "url": "https://app.whatsgo.net.br/whatsapp/files/00000000-0000-0000-0000-d00000f0000e/000000000123/media/download/",
    "qrcode": ["2022-12-10T18:12:13", 
               "2022-12-10T18:13:13", 
               "2022-12-10T18:13:43", 
               "2022-12-10T18:14:13", 
               "2022-12-10T18:14:43", 
               "2022-12-10T18:15:13"]
}
				
			

Funcionamento

KEY

Cada chave ("key") é um QRcode e a sequência das chaves é a sequência de QRcodes que o WhatsApp Web vai utilizar para a renovação. Você pode utilizar as chaves para criar os seus próprios QRcodes ou...


URL e QRCODE

O WhatsGO vai te entregar 6 QRcodes, qr1,2,3,4,5,6, essa é a sequência que o WhatsApp Web irá utilizar para a renovação dos qrs.

A validade do primeiro QRcode possui uma duração de 60 segundos, depois cada QR na sequência tem uma validade de 30 segundos.

Em "qrcode" você tem as validades que cada QR vai ter em um datetime.

Em "url" você terá um link para baixar os qrcodes. Como você fará isso? Adicionando o nome do QR que você quer acessar, exemplo:

				
					Pegando o 1º QrCODE
https://app.whatsgo.net.br/whatsapp/files/00000000-0000-0000-0000-d00000f0000e/000000000123/media/download/qr1.png

Pegando o 2º QrCODE
https://app.whatsgo.net.br/whatsapp/files/00000000-0000-0000-0000-d00000f0000e/000000000123/media/download/qr2.png

Assim por diante...
				
			

1ª chave/qr1: 60 segundos

2ª chave/qr2: 30 segundos

3ª chave/qr3: 30 segundos

4ª chave/qr4: 30 segundos

5ª chave/qr5: 30 segundos

6ª chave/qr6: 30 segundos

Depois de autenticado...

Você receberá pelo hook o retorno da autenticação, confirmando que sincronizou corretamente com o WhatsApp Web;

Retorno no hook:

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "connected":true,
    "logged":true
}
				
			

O significado de cada property está no “status do token”.

STATUS do Token

Seu token terá um status para a verificação de como está a sua autenticação e conexão. 

ATENÇÃO

O retorno é imediato na requisição, não retorna pelo hook.

Requisição:

				
					{
    "cmd":"status"
}
				
			

Retorno imediato:

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "connected":true,
    "logged":true
}
				
			

Connected: Se existe ou não uma conexão com o WhatsApp.

Logged: Se existe ou não uma autenticação de um número com o WhatsApp Web.

Validação de números

Consulte se o número existe dentro do WhatsApp.

Validate

Você irá mandar um conjunto de números com todos os dígitos, ddd e código do país, aqui você está "questionando" para o próprio WhatsApp se esses números existem no aplicativo ou não.

Depois você receberá no hook o retorno de qual número existe, ele chegará para você completo, ou seja, com 9 ou 8 dígitos.

Requisição:

				
					{
    "cmd":"validate",
    "list":["5544912344321",
            "5544912312345",
            "5544901234567"]
}
				
			

Retorno:

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "validate":[
            {
             "5544912344321":false
            },
            {
              "5544912312345":false
            },
            {
              "5544901234567":false
            }
     ]
}
				
			

Quando um número vir TRUE, você irá pegar o número que veio no retorno e utilizar ele para realizar o envio, pois ele vai chegar para você da forma que ele existe dentro do whatsapp.

ATENÇÃO

Você sempre precisa respeitar o tempo de processamento que o WhatsApp está fazendo, ou seja, se você enviar um lote de 500 números para a validação, você precisa aguardar o retorno desse lote para enviar outro.

Mesma coisa para o envio ou qualquer chamada que seu WhatsApp irá processar para te retornar, então se você executou um comando de envio para 300 pessoas e precisa validar mais 500 números, você precisa aguardar a sua área finalizar os 300 envios para enviar a validação e assim por diante.

Foto do contato

Você vai enviar um conjunto de números da forma que ele existe dentro do WhatsApp, aqui você está perguntando para o whats se o nº automatizado tem ou não a permissão de visualizar a foto do contato.

Requisição:

				
					{
    "cmd":"contactvalid",
    "number":["5544912344321",
              "5544912312345",
              "5544901234567"]
}
				
			

Retorno:

				
					{
    "contactvalid":[
            {
                "5544912344321":true,"pic":"https://pps.whatsapp.net/v/t61.24694-24/338459640_5914680228645148_6004693465771355194_n.jpg?stp=dst-jpg_s96x96\u0026ccb=11-4"
            },
            {
                "5544912312345":true,"pic":"https://pps.whatsapp.net/v/t61.24694-24/155553555_523815352562038_1893600879540791364_n.jpg?stp=dst-jpg_s96x96\u0026ccb=11-4"
            },
            {
                "5544901234567":false,"pic":""
            }
        ],
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "logged":true,
    "token":"000000000123"
}
				
			

Se você tem a permissão de ver a foto o número retornará "true" e na property "pic" virá a URL com a imagem.

Se você não tem a permissão o número retornará "false" e o "pic" estará vazio.

Como essa é uma permissão que cada usuário do WhatsApp pode configurar, você pode considerar que o número que retornou FALSE não tem seu nº adicionado nos contatos.

ATENÇÃO

Esse é um processamento que pode levar um tempo considerável dependendo da quantidade de números que você solicitar a foto e dependendo de como está o fluxo de comunicação do próprio WhatsApp.

Então, repetindo: Você sempre precisa respeitar o tempo de processamento que o WhatsApp está fazendo, enviando um lote de números aguarde o retorno para dar continuidade.

Envio de mensagens

Texto, Imagem, Documento, Vídeo, Áudio nativo, Mensagem temporária, Visualização única, Grupos e Status.

Envio de Texto

  • Quebra de linha: Utilizar    \n
  • Texto da mensagem: Texto normal UTF-8

Você vai realizar um Post para a URL...

				
					https://app.whatsgo.net.br/cgi/whatsapp/whatsgo.js
				
			

Requisição:

				
					{
    "cmd":"send",
    "type":"text",
    "number":["5544912344321",
              "5544912312345"],
    "value":"Teste 👽...",
    "delay":2000,
    "id":"t123"
}
				
			

"cmd":"send", comando de realizar um envio

"type":"text", o tipo do comando, envio de texto

"number":[ ], número ou conjunto de números

"value":" ", o texto que será enviado

"delay": tempo de espera de um envio para outro

"id":"t123", um ID que você poderá criar para identificar a requisição de envio

Delay Aleatório

Você pode inserir no envio um delay mínimo e máximo, o WhatsGO irá gerenciar sua fila e realizar o envio em tempos aleatórios (dentro do tempo previamente estipulado).

				
					{
    "cmd":"send",
    "type":"text",
    "number":["5544912344321",
              "5544912312345"],
    "value":"Teste 👽...",
    "delay":{
        "min":2000,
        "max":40000
    },
    "id":"t1234"
}
				
			

Funcionamento do envio

No caso deste exemplo estamos enviando 1 mensagem de texto para 2 usuários com um delay de 2000 milissegundos para cada mensagem, ou seja, texto >> 2 segundos >> texto.

Dentro de uma única requisição podemos inserir toda a base de números que precisamos enviar a mensagem e no delay qual o tempo que vai levar este envio. Os usuários tem o seu número adicionado? Então você pode manipular esse delay e deixa-lo vazio por exemplo, desta forma será enviado a mensagem de forma simultânea para todos os contatos (será apenas o delay do próprio whatsapp entregando essas mensagens).

Retorno imediato na requisição:

“Success” é um retorno do server e não do whatsapp, ou seja, apenas significa que sua requisição chegou no servidor corretamente.

Esse é um retorno padrão de sucesso do server, então não vamos repeti-la pela documentação. 

Retorno no hook quando finalizar:

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "return":"t123",
    "number":[
        {
            "5544912344321":true
        },
        {
            "5544912312345":false
        }
    ]
}
				
			

"return":"t123", é o ID que você utilizou na requisição de envio

"number":[{"5544912344321":true}...] confirmando o envio para o número

"number":[...{"5544912312345":false}] quando o WhatsApp não conseguiu realizar o envio

ATENÇÃO

Você terá um bloco inteiro sobre todos os retornos que existem no envio do whatsapp.

Envio de mídias

Primeiro e antes de tudo é necessário realizar o upload da mídia no servidor WhatsGO e depois utilizar o nome dela como referência para o envio.

Upload

Lembrando que cada token possui 1GB de espaço para você subir e receber arquivos, podendo adquirir mais espaço se necessário.

Você vai realizar um Post para a URL...

				
					https://app.whatsgo.net.br/cgi/file
				
			

Headers

Seu HostID e Token

Body

Sua mídia

Tamanho máximo do arquivo

16MB

file1:

O arquivo que será enviado.

Se você precisar subir vários arquivos juntos vai inserir file2, file3, e assim por diante até no máximo file30.

Retorno imediato na requisição:

Então, o nome que você irá utilizar no envio é “Marmita4 (1).jpg”.

Retorno imediato negando o upload:

Isso pode ocorrer quando você estiver subindo um arquivo maior que 16MB ou quando seu drive estiver no limite de espaço.

				
					{
    "message":"Upload not allowed",
    "drive":0
}
				
			

"drive":0

Arquivo maior que 16MB

				
					{
    "message":"Upload not allowed",
    "drive":1073741825
}
				
			

"drive":1073741825

Seu espaço chegou no limite, tamanho ocupado em bytes.

Gerenciamento de espaço

Você pode gerenciar todos os arquivos que estão no Drive do token, ver quanto de espaço está ocupando, ver os arquivos que estão no drive e excluir os necessários.

ATENÇÃO

Todos os retornos do GERENCIAMENTO DE ESPAÇO é imediato na requisição, não retorna pelo hook.

Você vai realizar um Post para a URL...

				
					https://app.whatsgo.net.br/cgi/whatsapp/whatsgo.js
				
			

Espaço ocupado no Drive

Tudo que está no drive do token: Arquivos enviados, Arquivos baixados, Contatos, Textos...

Requisição:

				
					{
    "cmd":"drive",
    "op":"size"
}
				
			

Retorno imediato:

				
					{
    "status": 0,
    "msg": "Success",
    "size": 1414260
}
				
			

"status": 0,

Status de sucesso.

"size": 1414260

Tamanho ocupado em bytes.

Arquivos que estão no drive

Lembrando que são os arquivos que foram enviados e baixados.

OBS: Retorna apenas os arquivos.

Requisição:

				
					{
    "cmd":"drive",
    "op":"dir",
    "folder":"upload"
}
				
			

Retorno imediato:

				
					{
    "status": 0,
    "msg": "Success",
    "folder": "upload",
    "dir": [
        "Teste1.png",
        "Teste2.png",
        "Teste3.png",
        "Vid-Oferta.mp4",
        "WhatsApp-Image-2022-12-20.jpg",
        "Ofertas.pdf"
    ]
}
				
			

"dir":

Diretório, todos os arquivos que seu token possui no drive.

Preste ATENÇÃO!

Este exemplo você está solicitando e visualizando os arquivos da pasta UPLOAD, ou seja, os arquivos que você subiu para o servidor. Para visualizar os arquivos que você baixou do WhatsApp pasta você utilizar o "folder": "download".

Deletando arquivos no drive

Você vai mandar na requisição o nome do arquivo com a extensão e a pasta que ele está, upload ou download, para apaga-lo.

Requisição:

				
					{
    "cmd":"drive",
    "op":"del",
    "file":["Vid-Oferta.mp4",
            "WhatsApp-Image-2022-12-20.jpg",
            "Ofertas.pdf"],
    "folder":"upload"
}
				
			

Retorno imediato:

				
					{
    "status": 0,
    "msg": "Success",
    "total": 3
}
				
			

"total": 3

Quantidade de arquivos excluídos.

Envio de imagem

Neste exemplo vamos ver o envio da imagem com legenda.

Você vai realizar um Post para a URL...

				
					https://app.whatsgo.net.br/cgi/whatsapp/whatsgo.js
				
			

Requisição

				
					{
    "cmd":"send",
    "type":"image",
    "number":["5544912344321",
              "5544912312345"],
    "value":"Marmita4 (1).jpg",
    "caption":"Testando...",
    "id":"t124"
}
				
			

"cmd":"send", comando de realizar um envio

"type":"image", o tipo do envio, imagem

"number":[ ], número ou conjunto de números

"value":" ", o nome da imagem que você subiu no servidor, com a extensão dela, "Marmita4 (1).jpg"

"caption": é o texto da legenda na imagem, mesmas regras para o envio, utf-8, \n para quebra de linha

"delay" neste exemplo você pode ver que não tem a property do delay, isso significa que será 0, ou seja, sem delay entre as mensagens

"id":"t124", um ID para identificação da requisição de envio

Envio de imagem + textos

Precisa enviar com um texto separado da imagem? Faça tudo na mesma requisição para deixa 100% otimizado.

Requisição

				
					{
    "cmd":"send",
    "type":"image",
    "number":["5544912344321",
              "5544912312345"],
    "value":"Marmita4 (1).jpg",
    "caption":"Testando 👽...",
    "id":"123477",
    "header":"Cabeçalho",
    "footer":"Rodapé"
}
				
			

"header":"Cabeçalho", é um texto que será enviado antes da mídia

"footer":"Rodapé," é um texto que será enviado depois da mídia

Envio de várias imagens

LEMBRANDO que o limite do próprio WhatsApp são 30 arquivos de uma só vez.

Requisição

				
					{
    "cmd":"send",
    "type":"image",
    "number":["5544912344321",
              "5544912312345"],
    "value":["Marmita1.jpg",
             "Marmita2.jpg",
             "Promo10-10-22.jpg"],
    "caption":"Testando 👽...",
    "id":"123477",
    "header":"Cabeçalho",
    "footer":"Rodapé"
}
				
			

O que muda? A única diferença é um array na property "value" com as imagens que estão no servidor

Você também pode enviar várias imagens + legenda + textos.

Visualização única da imagem

A imagem é enviada fechada e o usuário só pode ver ela uma única vez.

Requisição

				
					{
    "cmd":"send",
    "type":"image",
    "number":["5544912344321",
              "5544912312345"],
    "value":"Marmita4 (1).jpg",
    "caption":"Testando...",
    "viewonce":true,
    "id":"12345"
}
				
			

"viewonce":true é a property que habilita essa funcionalidade

Envio de vídeo

Você vai realizar um Post para a URL...

				
					https://app.whatsgo.net.br/cgi/whatsapp/whatsgo.js
				
			

Requisição

				
					{
    "cmd":"send",
    "type":"video",
    "number":["5544912344321",
              "5544912312345"],
    "value":"Promo-vid.mp4",
    "caption":"Testando...",
    "id":"123456"
}
				
			

"cmd":"send", comando de realizar um envio

"type":"video", o tipo do envio, vídeo

"number":[ ], número ou conjunto de números

"value":" ", o nome do vídeo que você subiu no servidor, com a extensão dela, "Promo-vid.mp4"

"caption": é o texto da legenda no vídeo, mesmas regras para o envio, utf-8, \n para quebra de linha

"delay" neste exemplo você pode ver que não tem a property do delay, isso significa que será 0, ou seja, sem delay entre as mensagens

"id":"123456", um ID para identificação da requisição de envio

Envio de vídeo + textos

Da mesma forma que é feito nas imagens.

Requisição

				
					{
    "cmd":"send",
    "type":"video",
    "number":["5544912344321",
              "5544912312345"],
    "value":"Promo-vid.mp4",
    "caption":"Testando 👽...",
    "id":"123478",
    "header":"Cabeçalho",
    "footer":"Rodapé"
}
				
			

"header":"Cabeçalho", é um texto que será enviado antes da mídia

"footer":"Rodapé," é um texto que será enviado depois da mídia

Visualização única do vídeo

O vídeo é enviado fechado e o usuário só pode ver ela uma única vez.

Requisição

				
					{
    "cmd":"send",
    "type":"video",
    "number":["5544912344321",
              "5544912312345"],
    "value":"Promo-vid.mp4",
    "caption":"Testando...",
    "viewonce":true,
    "id":"12345"
}
				
			

"viewonce":true é a property que habilita essa funcionalidade

Envio de documento

Você vai realizar um Post para a URL...

				
					https://app.whatsgo.net.br/cgi/whatsapp/whatsgo.js
				
			

Requisição

				
					{
    "cmd":"send",
    "type":"document",
    "number":["5544912344321",
              "5544912312345"],
    "value":"encarte.pdf",
    "title":"Teste doc",
    "caption":"Testando...",
    "id":"123456"
}
				
			

"cmd":"send", comando de realizar um envio

"type":"document", o tipo do envio, documento

"number":[ ], número ou conjunto de números

"value":" ", o nome do documento que você subiu no servidor, com a extensão dela, "encarte.pdf"

"title":"Teste doc" é o nome que aparecerá no arquivo dentro do whatsapp

"caption": é o texto da legenda do arquivo, mesmas regras para o envio, utf-8, \n para quebra de linha

"delay" neste exemplo você pode ver que não tem a property do delay, isso significa que será 0, ou seja, sem delay entre as mensagens

"id":"123456", um ID para identificação da requisição de envio

Envio de documento + textos

Da mesma forma que é feito nas imagens

Requisição

				
					{"cmd":"send","type":"document","number":["5544912344321","5544912312345"],"value":"encarte.pdf","title":"Teste doc","id":"123478","header":"Cabeçalho","footer":"Rodapé"}
				
			

"header":"Cabeçalho", é um texto que será enviado antes da mídia

"footer":"Rodapé," é um texto que será enviado depois da mídia

Envio de vários documentos

LEMBRANDO que o limite do próprio WhatsApp são 30 arquivos de uma só vez.

Requisição

				
					{
    "cmd":"send",
    "type":"document",
    "number":["5544912344321",
              "5544912312345"],
    "value":["encarte.pdf",
             "encarte2.pdf",
             "encarte3.pdf"],
    "title":"",
    "id":"123479",
    "header":"Cabeçalho",
    "footer":"Rodapé"
}
				
			

O que muda? A única diferença é um array na property "value" com os documentos que estão no servidor

Atenção, o "title" neste caso não é necessário, o nome do documento será o mesmo que está no servidor. Mesmo se existir não irá alterar o nome

Você também pode enviar vários documentos + textos.

Visualização única

Documentos não possuem visualização única.

Envio de áudio

Você pode enviar .mp3 ou .ogg para simular um áudio feito no próprio whatsapp.

Você vai realizar um Post para a URL...

				
					https://app.whatsgo.net.br/cgi/whatsapp/whatsgo.js
				
			

Requisição

				
					{
    "cmd":"send",
    "type":"audio",
    "number":["5544912344321",
              "5544912312345"],
    "value":"1.mp3",
    "id":"123456"
}
				
			

"cmd":"send", comando de realizar um envio

"type":"audio", o tipo do envio, áudio

"number":[ ], número ou conjunto de números

"value":" ", o nome do documento que você subiu no servidor, com a extensão dela, "1.mp3"

"delay" neste exemplo você pode ver que não tem a property do delay, isso significa que será 0, ou seja, sem delay entre as mensagens

"id":"123456", um ID para identificação da requisição de envio

Envio de áudio + textos

Requisição

				
					{"cmd":"send","type":"audio","number":["5544912344321","5544912312345"],"value":"1.mp3","id":"123478","header":"Cabeçalho","footer":"Rodapé"}
				
			

"header":"Cabeçalho", é um texto que será enviado antes da mídia

"footer":"Rodapé," é um texto que será enviado depois da mídia

Visualização única

Áudios não possuem visualização única.

Chat temporário

Transforme a mensagem enviada em uma mensagem temporária.

Você irá acrescentar uma property de expiração em todas as mensagens que você precisa que sumam do whatsapp depois do tempo configurado.

Os tempos que existem dentro do whatsapp são 1 dia, 7 dias e 90 dias.

Property para ser acrescentada na requisição:

				
					"expiration":"1d"
				
			
				
					"expiration":"7d"
				
			
				
					"expiration":"90d"
				
			

Veja um exemplo

				
					{
    "cmd":"send",
    "type":"audio",
    "number":["5544912344321",
              "5544912312345"],
    "value":"1.mp3",
    "expiration":"1d",
    "id":"123456"
}
				
			

Envio para grupos

Envie para todos os grupos que existem no WhatsApp do seu cliente

Você vai realizar um Post para a URL...

				
					https://app.whatsgo.net.br/cgi/whatsapp/whatsgo.js
				
			

Requisição

				
					{
    "cmd":"group"
}
				
			

Retorno no hook quando finalizar:

				
					{
  "hostid": "00000000-0000-0000-0000-d00000f0000e",
  "token": "000000000123",
  "group": [
    {
        "chat": "5544912344321-1597954521@g.us",
        "len": 2,
        "name": "NOME DO GRUPO 1"
    },
    {
        "chat": "123456789105314316@g.us",
        "len": 5,
        "name": "NOME DO GRUPO 2"
    }
  ]
				
			

"group", local que vão vir os grupos do whatsapp

"chat", a identificação de um grupo, É ESTE ID que você vai utilizar para o envio

"len", a quantidade de contatos que estão participando do grupo

"name", nome do grupo

Para realizar o envio para um grupo você vai utilizar o ID do grupo como se fosse um número de um usuário.

Exemplo de envio para um grupo:

				
					{
    "cmd":"send",
    "type":"text",
    "number":["5544912344321-1597954521@g.us",
              "123456789105314316@g.us"],
    "value":"Teste 👽...",
    "id":"12344"
}
				
			

STATUS

Utilize e automatize os stories do whatsapp.

Para realizar postagens (Imagens e Vídeos) nos status do WhatsApp você vai inserir um valor na property "number" como se fosse um número de celular.

Valor para adicionar no "number"

				
					"status"
				
			

Veja um exemplo

				
					{
    "cmd":"send",
    "type":"image",
    "number":["status"],
    "value":"Marmita4 (1).jpg",
    "caption":"Testando...",
    "id":"t124"
}
				
			

ATENÇÃO

Pode acontecer do status enviado pela API não aparecer no aplicativo do WhatsApp, mas você receberá um retorno 

Retornos dos Envios

Ao realizar um envio você terá alguns retornos...

Quando seu envio finalizar

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "return":"t123",
    "number":[
        {
            "5544912344321":true
        },
        {
            "5544912312345":true
        }
    ]
}
				
			

Retornos de recebimentos

Quando o envio ocorre para um número você receberá até 7 tipos de "receipt", recebimentos. 

Quando você dispara um envio para 100 números, por exemplo, é disparado sequencialmente para eles até chegar no último nº , finalizando você recebe o retorno de finalização, mas conforme esses envios estão acontecendo, você vai recebendo o recebimento de cada número simultaneamente.

IMPORTANTE!
O que é "receipt" e "sender" no recibo?

Primeiro é importante você entender que o recibo é um retorno de uma ação que o seu whatsapp automatizado fez, exemplo:

- Se alguém pegar o whats, entrar em um grupo que tem 800 contatos e mandar uma reação em uma mensagem, você vai receber 800 recibos de entrega e podendo receber mais 800 recibos de mensagem lida, porque o whatsapp está entregando essa reação para as 800 pessoas que estão naquele grupo e consequentemente elas podem visualizar a reação.

A property "receipt":"" é o canal onde está retornando o recido, exemplo, se você enviou uma mensagem para o 554491234567 você vai receber o recibo que sua mensagem chegou para ele, então o "receipt" será "receipt":"554491234567", porque o canal do retorno é esse chat.

Já a property "sender" é quem está enviando, neste mesmo exemplo do recibo que sua mensagem chegou para o nº, você vai receber o "sender":"554491234567" porque quem está enviando o recibo é o mesmo do canal onde está retornando.

Tudo certo até aqui?

Agora se você enviar uma mensagem para um grupo o "receipt" será o ID do grupo e o "sender" será o número que está recebendo a mensagem.

Se você estiver enviando uma imagem para o status o "receipt" será status e o "sender" quem está recebendo o status.

Usuário recebeu a mensagem

Mas PODE SER que não tenha visto ainda.

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "receipt":"5544912312345",
    "sender":"5544912312345",
    "timestamp":"54813-11-09 15:18:42 +0000 UTC",
    "type":""
}
				
			

"timestamp":"54813-11-09 15:18:42 +0000 UTC", o tempo do recebimento

"type" é o tipo do recebimento

"type":"" neste caso o tipo vem vazio

ATENÇÃO

Por que "pode ser" que o usuário não tenha visto a mensagem? Porque isso é uma configuração de privacidade de cada nº, caso o usuário não tenha a confirmação de leitura, não tem como saber se ele viu ou não a mensagem.

Sua mensagem foi enviada

Importante você perceber que o "receipt" e o "sender" são diferentes, porque quem envia esse recibo é o seu próprio número automatizado.

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "receipt":"5544912312345",
    "sender":"554498765432",
    "timestamp":"54813-11-09 15:18:42 +0000 UTC",
    "type":"sender"
}
				
			

"type":"sender" sua mensagem foi enviada.

Problema no recebimento

Pode ocorrer da mensagem chegar no destino dela, mas ocorrer um problema na hora do WhatsApp descriptografar a mensagem ou simplesmente o número não receber ela.

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "receipt":"5544912312345",
    "sender":"5544912312345",
    "timestamp":"54813-11-09 15:18:42 +0000 UTC",
    "type":"retry"
}
				
			

"type":"retry" problema na hora que o usuário foi receber a mensagem.

Mensagem foi lida pelo usuário

Quando o usuário abre e visualiza a mensagem.

OBS: Apenas quando a configuração da leitura estiver configurada pelo usuário.

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "receipt":"5544912312345",
    "sender":"5544912312345",
    "timestamp":"54813-11-09 15:18:42 +0000 UTC",
    "type":"read"
}
				
			

"type":"read" lido.

Mensagem foi lida 2

Quando o próprio número automatizado faz a leitura de uma mensagem nova.

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "receipt":"5544912312345",
    "sender":"554498765432",
    "timestamp":"54813-11-09 15:18:42 +0000 UTC",
    "type":"read-self"
}
				
			

"type":"read-self" você leu uma mensagem.

Mídia visualizada

Quando o usuário abre, baixa e visualiza a mídia que foi enviada para ela, ou seja, foto, vídeo, áudio, etc..

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "receipt":"5544912312345",
    "sender":"5544912312345",
    "timestamp":"54813-11-09 15:18:42 +0000 UTC",
    "type":"played"
}
				
			

"type":"played" a mídia foi visualizada.

Inativo

Quando o whatsapp no usuário está inativo OU algum dispositivo deste usuário está inativo, por exemplo, um whatsapp web aberto em algum lugar que não está sendo utilizado a um tempo.

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "receipt":"5544912312345",
    "sender":"5544912312345",
    "timestamp":"54813-11-09 15:18:42 +0000 UTC",
    "type":"inactive"
}
				
			

"type":"inactive" algum dispositivo inativo.

Banimentos

Banimento temporário

Você terá 5 tipos de retorno referente a banimento do whatsapp

101, por bloqueios

Quando vários usuários te bloqueiam e/ou denunciam o nº automatizado 

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "temporaryban":101,
    "expire":"2022-12-22 20:30:00 +0000 UTC"
}
				
			

"temporaryban":101, o tipo de banimento

"expire":"2022-12-22 20:30:00 +0000 UTC", a validade do banimento

102, por muitas pessoas

Quando ocorreu envios para muitas pessoas diferentes.

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "temporaryban":102,
    "expire":"2022-12-22 20:30:00 +0000 UTC"
}
				
			

103, por muitos grupos

Quando ocorreu a criação de muitos grupos em um período curto de tempo.

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "temporaryban":103,
    "expire":"2022-12-22 20:30:00 +0000 UTC"
}
				
			

104, por muitas mensagens

Quando você enviou muitas mensagens iguais.

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "temporaryban":104,
    "expire":"2022-12-22 20:30:00 +0000 UTC"
}
				
			

105, por lista de transmissão

Por criar muitas listas e/ou enviar para muitas listas de transmissão em um período curto de tempo.

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "temporaryban":105,
    "expire":"2022-12-22 20:30:00 +0000 UTC"
}
				
			

Existem alguns motivos para o WhatsApp realizar um banimento…

  • SPAM: Você está enviando muitas mensagens para pessoas que não tem o seu número adicionado em um curto período de tempo, principalmente se você está realizando os disparos em uma conta recém criada no whats. (Não se engane, se as pessoas que estão recebendo os envios conhecem a sua empresa, mas não tem seu número adicionado também há riscos do banimento).
  • DENÚNCIAS / BLOQUEIOS: Ou seja, realmente realizando um spam, o WhatsApp analisa a quantidade de bloqueios e denúncias que seu número recebe.

Isso significa que não é possível se comunicar com pessoas que não tem o número adicionado? Não, mas a FORMA que você se comunica com ela é de extrema importância e ter a ciência que manter uma comunicação especificamente para números que não tem a automação adicionada tem grandes riscos de banimento.

Se a automação se comunica com um misto de pessoas, ou seja, 30% da sua lista não tem o seu número adicionado, pode sim ocorrer algum banimento, mas raramente são banimentos definitivos (Clicando em “suporte” e enviando uma mensagem fará o whats devolver o nº).

LEMBRE-SE

Quem realiza os banimentos é uma inteligência artificial e como todo sistema pode ocorrer erros e problemas, manter uma comunicação aquecida com os usuários também vai ajudar na hora da IA reanalisar o ban.

Recebimento de mensagens

Todas as mensagens que o seu número automatizado receber será captado pela API e enviado para o seu webhook, desta forma você conseguirá gerenciar todas as mensagens de forma praticamente instantânea.

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "event":"message",
    "id":"3EB08688B02D712DEC07",
    "timestamp":"2022-12-19 19:25:18 +0000 UTC",
    "type":"text",
    "mimetype":"",
    "value":"Teste de recebimento",
    "caption":"",
    "size":0,
    "pushname":"João da Silva",
    "isgroup":false,
    "groupname":"",
    "chat":"5544912312345",
    "sender":"5544998765432"
}
				
			

"event":"message", o evento que você está recebendo é uma mensagem no whatsapp

"id":"3EB08688B02D712DEC07", é a identificação da mensagem que você está recebendo.

"timestamp":"2022-12-19 19:25:18 +0000 UTC", o tempo do recebimento,

"type":"text", o tipo de mensagem que você está recebendo, podendo ser text, image, document, audio ou video

"mimetype":"", o tipo do arquivo, exemplo: jpg, ogg, mp3, mp4, pdf... Ele virá vazio quando for um texto

"value":"Teste de recebimento", é o conteúdo na mensagem, quando for um arquivo virá um URL para download

"caption":"", é a legenda dos arquivos

"size":0, é o tamanho do arquivo em bytes

"pushname":"João da Silva", é o nome do usuário que está te mandando mensagem

"isgroup":false, se essa mensagem veio de um grupo. False: não veio, true: sim, é de um grupo

"groupname":"", se a mensagem for de um grupo é aqui que virá o nome dele.

"chat":"5544912312345", é a identificação do chat, do canal que está ocorrendo a mensagem. Se a mensagem fosse de um grupo aqui viria o ID dele

"sender":"5544998765432", quem está enviando a mensagem, o remetente.

Download de mídias recebidas

É necessário realizar uma configuração para permitir o download de mídias recebidas, desta forma você gerencia facilmente que tipo de mídia você vai trabalhar.

Lembrando, tudo que for recebido ocupará espaço no drive do token

Requisição

				
					{
    "cmd":"download",
    "image":true,
    "document":false,
    "audio":false,
    "video":false
}
				
			

true, você vai receber uma url da mídia no "value" da mensagem

false, o "value" da mensagem vem vazio, mas você saberá o que a mensagem é no "type"

Outros

Chat apagado, Logout, Update, Contatos.

Chat apagado

Quando o usuário deleta o chat da sua automatização você vai receber o seguinte retorno...

Retorno:

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e",
    "deletechat":"5544912312345",
    "timestamp":"2022-12-19 19:25:18 +0000 UTC"
}
				
			

"deletechat":"5544912312345", o chat que foi deletado

"timestamp":"2022-12-19 19:25:18 +0000 UTC", o tempo que a conversa foi apagada

Logout

Desconectar o WhatsApp.

Você vai realizar um Post para a URL...

				
					https://app.whatsgo.net.br/cgi/whatsapp/whatsgo.js
				
			

Requisição:

				
					{
    "cmd":"logout"
}
				
			

Retorno:

				
					{
    "token":"000000000123",
    "hostid":"00000000-0000-0000-0000-d0000f0000e", 
    "loggedout":true, 
    "reason":0
}
				
			

Update

Se o WhatsApp tem alguma atualização

Requisição:

				
					{
    "cmd":"checkupdate"
}
				
			

Contatos

Pegar todos os contatos que o nº tem.

Requisição:

				
					{
    "cmd":"contact"
}