ApiBrasil.Messaging.WhatsApp (APIBrasil v0.0.1)

Copy Markdown View Source

API de WhatsApp (device-based): POST /whatsapp/{action}.

Exige Authorization: Bearer + header DeviceToken.

client = ApiBrasil.new(bearer_token: "...", device_token: "...")

# inicia a sessão do device (os webhooks são opcionais)
{:ok, _envelope} =
  ApiBrasil.Messaging.WhatsApp.start(client, %{
    "webhook_wh_message" => "https://exemplo.com/hook"
  })

# QR Code de pareamento — o base64 vem em `response.qrcode`
{:ok, qr} = ApiBrasil.Messaging.WhatsApp.qrcode(client)
ApiBrasil.Core.DeviceResponse.response(qr)

{:ok, _envelope} =
  ApiBrasil.Messaging.WhatsApp.send_text(client, %{
    "number" => "5511999999999",
    "text" => "Olá!"
  })

# qualquer action do catálogo, e a mesma action por fila
ApiBrasil.Messaging.WhatsApp.request(client, "getAllChats")

ApiBrasil.Messaging.WhatsApp.queue(client, "sendText", %{
  "number" => "5511999999999",
  "text" => "por fila"
})

As actions conhecidas estão em ApiBrasil.Generated.Catalog.service_actions("whatsapp"); a documentação completa fica em https://doc.apibrasil.io.

Summary

Functions

Verifica se um número tem WhatsApp: POST /whatsapp/checkNumberStatus.

Como check_number_status/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Fecha o navegador/sessão no servidor: POST /whatsapp/close.

Como close/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Apaga a sessão no servidor: POST /whatsapp/deleteSession.

Como delete_session/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Lista as conversas do device: POST /whatsapp/getAllChats.

Como get_all_chats/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Lista os contatos do device: POST /whatsapp/getAllContacts.

Como get_all_contacts/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Lista os grupos do device: POST /whatsapp/getAllGroups.

Como get_all_groups/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Status da conexão do device: POST /whatsapp/getConnectionStatus.

Como get_connection_status/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Foto de perfil de um número: POST /whatsapp/getProfilePic.

Como get_profile_pic/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Encerra a sessão: POST /whatsapp/logout.

Como logout/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

QR Code de pareamento em base64: POST /whatsapp/qrcode.

Como qrcode/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Executa a action de forma assíncrona, por fila: POST /whatsapp/{action}/queue.

Executa qualquer action do serviço: POST /whatsapp/{action}.

Reinicia a sessão do device: POST /whatsapp/restartSession.

Como restart_session/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Envia áudio por URL: POST /whatsapp/sendAudio.

Como send_audio/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Envia uma mensagem com botões: POST /whatsapp/sendButtons.

Como send_buttons/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Envia um contato: POST /whatsapp/sendContact.

Como send_contact/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Envia um arquivo em base64: POST /whatsapp/sendFile64.

Como send_file64/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Envia um arquivo a partir de uma URL (number, path): POST /whatsapp/sendFile.

Como send_file/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Envia um GIF: POST /whatsapp/sendGif.

Como send_gif/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Publica uma imagem no status: POST /whatsapp/sendImageToStorie.

Como send_image_to_storie/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Envia um link com preview: POST /whatsapp/sendLink.

Como send_link/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Envia uma mensagem de lista: POST /whatsapp/sendList.

Como send_list/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Envia uma localização (number, lat, lng): POST /whatsapp/sendLocation.

Como send_location/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Envia uma chave PIX: POST /whatsapp/sendPixKey.

Como send_pix_key/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Envia uma enquete: POST /whatsapp/sendPollMessage.

Como send_poll_message/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Envia uma figurinha: POST /whatsapp/sendSticker.

Como send_sticker/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Envia uma mensagem de texto: POST /whatsapp/sendText.

Como send_text/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Publica um texto no status: POST /whatsapp/sendTextToStorie.

Como send_text_to_storie/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Envia um vídeo por URL: POST /whatsapp/sendVideo.

Como send_video/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Publica um vídeo no status: POST /whatsapp/sendVideoToStorie.

Como send_video_to_storie/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Serviço do gateway coberto por este módulo: whatsapp.

Inicia a sessão do device: POST /whatsapp/start.

Como start/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

Types

result()

@type result() :: {:ok, map()} | {:error, ApiBrasil.Core.Error.t()}

Functions

check_number_status(client, body \\ nil, opts \\ [])

@spec check_number_status(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Verifica se um número tem WhatsApp: POST /whatsapp/checkNumberStatus.

check_number_status!(client, body \\ nil, opts \\ [])

@spec check_number_status!(ApiBrasil.Client.t(), term(), keyword()) ::
  ApiBrasil.Core.DeviceResponse.t()

Como check_number_status/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

close(client, body \\ nil, opts \\ [])

Fecha o navegador/sessão no servidor: POST /whatsapp/close.

close!(client, body \\ nil, opts \\ [])

Como close/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

delete_session(client, body \\ nil, opts \\ [])

@spec delete_session(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Apaga a sessão no servidor: POST /whatsapp/deleteSession.

delete_session!(client, body \\ nil, opts \\ [])

@spec delete_session!(ApiBrasil.Client.t(), term(), keyword()) ::
  ApiBrasil.Core.DeviceResponse.t()

Como delete_session/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

get_all_chats(client, body \\ nil, opts \\ [])

@spec get_all_chats(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Lista as conversas do device: POST /whatsapp/getAllChats.

get_all_chats!(client, body \\ nil, opts \\ [])

@spec get_all_chats!(ApiBrasil.Client.t(), term(), keyword()) ::
  ApiBrasil.Core.DeviceResponse.t()

Como get_all_chats/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

get_all_contacts(client, body \\ nil, opts \\ [])

@spec get_all_contacts(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Lista os contatos do device: POST /whatsapp/getAllContacts.

get_all_contacts!(client, body \\ nil, opts \\ [])

@spec get_all_contacts!(ApiBrasil.Client.t(), term(), keyword()) ::
  ApiBrasil.Core.DeviceResponse.t()

Como get_all_contacts/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

get_all_groups(client, body \\ nil, opts \\ [])

@spec get_all_groups(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Lista os grupos do device: POST /whatsapp/getAllGroups.

get_all_groups!(client, body \\ nil, opts \\ [])

@spec get_all_groups!(ApiBrasil.Client.t(), term(), keyword()) ::
  ApiBrasil.Core.DeviceResponse.t()

Como get_all_groups/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

get_connection_status(client, body \\ nil, opts \\ [])

@spec get_connection_status(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Status da conexão do device: POST /whatsapp/getConnectionStatus.

get_connection_status!(client, body \\ nil, opts \\ [])

@spec get_connection_status!(ApiBrasil.Client.t(), term(), keyword()) ::
  ApiBrasil.Core.DeviceResponse.t()

Como get_connection_status/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

get_profile_pic(client, body \\ nil, opts \\ [])

@spec get_profile_pic(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Foto de perfil de um número: POST /whatsapp/getProfilePic.

get_profile_pic!(client, body \\ nil, opts \\ [])

@spec get_profile_pic!(ApiBrasil.Client.t(), term(), keyword()) ::
  ApiBrasil.Core.DeviceResponse.t()

Como get_profile_pic/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

logout(client, body \\ nil, opts \\ [])

Encerra a sessão: POST /whatsapp/logout.

logout!(client, body \\ nil, opts \\ [])

Como logout/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

qrcode(client, body \\ nil, opts \\ [])

QR Code de pareamento em base64: POST /whatsapp/qrcode.

qrcode!(client, body \\ nil, opts \\ [])

Como qrcode/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

queue(client, action_name, body \\ nil, opts \\ [])

Executa a action de forma assíncrona, por fila: POST /whatsapp/{action}/queue.

queue!(client, action_name, body \\ nil, opts \\ [])

Como queue/4, mas levanta ApiBrasil.Core.Error em caso de falha.

request(client, action_name, body \\ nil, opts \\ [])

Executa qualquer action do serviço: POST /whatsapp/{action}.

As actions conhecidas estão em ApiBrasil.Generated.Catalog.service_actions("whatsapp"); a documentação completa fica em https://doc.apibrasil.io.

request!(client, action_name, body \\ nil, opts \\ [])

Como request/4, mas levanta ApiBrasil.Core.Error em caso de falha.

restart_session(client, body \\ nil, opts \\ [])

@spec restart_session(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Reinicia a sessão do device: POST /whatsapp/restartSession.

restart_session!(client, body \\ nil, opts \\ [])

@spec restart_session!(ApiBrasil.Client.t(), term(), keyword()) ::
  ApiBrasil.Core.DeviceResponse.t()

Como restart_session/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

send_audio(client, body \\ nil, opts \\ [])

@spec send_audio(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Envia áudio por URL: POST /whatsapp/sendAudio.

O gateway converte o arquivo para mp3 (duração máxima de 6 minutos).

send_audio!(client, body \\ nil, opts \\ [])

Como send_audio/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

send_buttons(client, body \\ nil, opts \\ [])

@spec send_buttons(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Envia uma mensagem com botões: POST /whatsapp/sendButtons.

send_buttons!(client, body \\ nil, opts \\ [])

Como send_buttons/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

send_contact(client, body \\ nil, opts \\ [])

@spec send_contact(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Envia um contato: POST /whatsapp/sendContact.

send_contact!(client, body \\ nil, opts \\ [])

Como send_contact/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

send_file64(client, body \\ nil, opts \\ [])

@spec send_file64(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Envia um arquivo em base64: POST /whatsapp/sendFile64.

send_file64!(client, body \\ nil, opts \\ [])

Como send_file64/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

send_file(client, body \\ nil, opts \\ [])

@spec send_file(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Envia um arquivo a partir de uma URL (number, path): POST /whatsapp/sendFile.

send_file!(client, body \\ nil, opts \\ [])

Como send_file/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

send_gif(client, body \\ nil, opts \\ [])

@spec send_gif(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Envia um GIF: POST /whatsapp/sendGif.

send_gif!(client, body \\ nil, opts \\ [])

Como send_gif/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

send_image_to_storie(client, body \\ nil, opts \\ [])

@spec send_image_to_storie(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Publica uma imagem no status: POST /whatsapp/sendImageToStorie.

send_image_to_storie!(client, body \\ nil, opts \\ [])

@spec send_image_to_storie!(ApiBrasil.Client.t(), term(), keyword()) ::
  ApiBrasil.Core.DeviceResponse.t()

Como send_image_to_storie/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

send_link(client, body \\ nil, opts \\ [])

@spec send_link(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Envia um link com preview: POST /whatsapp/sendLink.

send_link!(client, body \\ nil, opts \\ [])

Como send_link/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

send_list(client, body \\ nil, opts \\ [])

@spec send_list(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Envia uma mensagem de lista: POST /whatsapp/sendList.

send_list!(client, body \\ nil, opts \\ [])

Como send_list/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

send_location(client, body \\ nil, opts \\ [])

@spec send_location(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Envia uma localização (number, lat, lng): POST /whatsapp/sendLocation.

send_location!(client, body \\ nil, opts \\ [])

@spec send_location!(ApiBrasil.Client.t(), term(), keyword()) ::
  ApiBrasil.Core.DeviceResponse.t()

Como send_location/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

send_pix_key(client, body \\ nil, opts \\ [])

@spec send_pix_key(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Envia uma chave PIX: POST /whatsapp/sendPixKey.

send_pix_key!(client, body \\ nil, opts \\ [])

Como send_pix_key/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

send_poll_message(client, body \\ nil, opts \\ [])

@spec send_poll_message(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Envia uma enquete: POST /whatsapp/sendPollMessage.

send_poll_message!(client, body \\ nil, opts \\ [])

@spec send_poll_message!(ApiBrasil.Client.t(), term(), keyword()) ::
  ApiBrasil.Core.DeviceResponse.t()

Como send_poll_message/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

send_sticker(client, body \\ nil, opts \\ [])

@spec send_sticker(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Envia uma figurinha: POST /whatsapp/sendSticker.

send_sticker!(client, body \\ nil, opts \\ [])

Como send_sticker/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

send_text(client, body \\ nil, opts \\ [])

@spec send_text(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Envia uma mensagem de texto: POST /whatsapp/sendText.

%{"number" => "5511999999999", "text" => "Olá!"}

send_text!(client, body \\ nil, opts \\ [])

Como send_text/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

send_text_to_storie(client, body \\ nil, opts \\ [])

@spec send_text_to_storie(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Publica um texto no status: POST /whatsapp/sendTextToStorie.

send_text_to_storie!(client, body \\ nil, opts \\ [])

@spec send_text_to_storie!(ApiBrasil.Client.t(), term(), keyword()) ::
  ApiBrasil.Core.DeviceResponse.t()

Como send_text_to_storie/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

send_video(client, body \\ nil, opts \\ [])

@spec send_video(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Envia um vídeo por URL: POST /whatsapp/sendVideo.

send_video!(client, body \\ nil, opts \\ [])

Como send_video/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

send_video_to_storie(client, body \\ nil, opts \\ [])

@spec send_video_to_storie(ApiBrasil.Client.t(), term(), keyword()) ::
  {:ok, ApiBrasil.Core.DeviceResponse.t()} | {:error, ApiBrasil.Core.Error.t()}

Publica um vídeo no status: POST /whatsapp/sendVideoToStorie.

send_video_to_storie!(client, body \\ nil, opts \\ [])

@spec send_video_to_storie!(ApiBrasil.Client.t(), term(), keyword()) ::
  ApiBrasil.Core.DeviceResponse.t()

Como send_video_to_storie/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.

service()

@spec service() :: String.t()

Serviço do gateway coberto por este módulo: whatsapp.

start(client, body \\ nil, opts \\ [])

Inicia a sessão do device: POST /whatsapp/start.

Aceita os webhooks opcionais webhook_wh_status, webhook_wh_message, webhook_wh_connect e webhook_wh_qrcode.

start!(client, body \\ nil, opts \\ [])

Como start/3, mas devolve o resultado direto e levanta ApiBrasil.Core.Error em caso de falha.