Integração

API de WhatsApp para Ruby e Rails

Dispare mensagens de WhatsApp de um app Rails, de preferência em background job.

# app/services/zapixo.rb
require "net/http"
require "json"

class Zapixo
  ENDPOINT = URI("https://zapixo.com.br/api/v1/messages/text")

  def self.enviar_texto(instancia:, numero:, texto:)
    req = Net::HTTP::Post.new(ENDPOINT)
    req["Authorization"] = "Bearer #{ENV.fetch('ZAPIXO_API_KEY')}"
    req["Content-Type"]  = "application/json"
    req.body = {
      instance: instancia,
      number: numero,
      text: texto,
    }.to_json

    res = Net::HTTP.start(
      ENDPOINT.hostname, ENDPOINT.port,
      use_ssl: true, read_timeout: 30
    ) { |http| http.request(req) }

    raise "Zapixo #{res.code}: #{res.body}" unless res.code == "200"

    JSON.parse(res.body)["messageId"]
  end
end

# app/jobs/aviso_whatsapp_job.rb — nunca envie direto do controller
class AvisoWhatsappJob < ApplicationJob
  queue_as :default
  retry_on StandardError, wait: :polynomially_longer, attempts: 3

  def perform(pedido)
    Zapixo.enviar_texto(
      instancia: "loja",
      numero: pedido.telefone_whatsapp,
      texto: "Pedido ##{pedido.id} confirmado!"
    )
  end
end