# app/services/notificacao/cliente_twilio.rb # # Monta o Twilio::REST::Client com timeout. Sem timeout, uma saída de internet # bloqueada no servidor pendura o worker Puma até o proxy cortar a requisição — # e o botão "enviar teste" da tela ficaria girando sem resposta. # # O construtor com http_client é posicional na twilio-ruby 7.x # (username, password, account_sid, region, http_client). Se a assinatura mudar # numa atualização da gem, cai no construtor simples em vez de quebrar o envio. module Notificacao module ClienteTwilio TIMEOUT = 15 def self.montar(sid, token) require 'twilio-ruby' begin http = Twilio::HTTP::Client.new(timeout: TIMEOUT) Twilio::REST::Client.new(sid, token, nil, nil, http) rescue ArgumentError, NameError => e Rails.logger.warn("[ClienteTwilio] sem timeout customizado (#{e.class}: #{e.message})") Twilio::REST::Client.new(sid, token) end end end end