You are viewing the Portuguese (Brazil) site, but your language preference is set to English. Switch to English site →

Menu

Expand
Classifique esta página:

Receber e baixar imagens de mensagens MMS recebidas com Sinatra

Você sabe como receber e responder a mensagens SMS. E se você receber uma mensagem MMS contendo uma imagem que gostaria de baixar? Vamos aprender como podemos capturar essa imagem e qualquer outra mídia MMS recebida usando Ruby.

Criar projeto de processamento de MMS

Quando a Twilio recebe uma mensagem para seu número de telefone, ela pode fazer uma chamada HTTP para um webhook criado por você. A maneira mais fácil de lidar com solicitações HTTP no Ruby é usar a estrutura da Web do Sinatra.

A Twilio espera, no mínimo, que o webhook retorne uma resposta 200 OK se tudo estiver em ordem. No entanto, você também retornará alguns TwiML em sua resposta muitas vezes. TwiML é apenas um conjunto de comandos XML que informa a Twilio como você gostaria que ela respondesse à sua mensagem. Em vez de gerar manualmente o XML, usaremos a biblioteca auxiliar "twilio-ruby", que pode facilitar bastante a geração do TwiML e do resto da estrutura de webhook.

Para instalar Sinatra e a biblioteca da Twilio, abra seu terminal e execute o seguinte:

gem install sinatra
gem install twilio-ruby

Receber mensagem MMS e imagens

Obtenha detalhes da mensagem recebida

Quando a Twilio chama seu webhook, ela envia vários parâmetros sobre a mensagem que você acabou de receber. A maioria deles, como o número de telefone "To", o número de telefone From e o Body da mensagem, estão disponíveis como propriedades do corpo da solicitação.

Obtenha o número de anexos

Podemos receber mais de uma mídia por mensagem, portanto, esse parâmetro nos informa quantas recebemos. Nós também a fundimos com um número inteiro, para ser usado em um loop:

num_media = params['NumMedia'].to_i

Obtenha URLs para a mídia

Como uma mensagem MMS pode ter vários anexos, a Twilio nos enviará variáveis de formulário chamadas MediaUrlX, em que X é um índice baseado em zero. Então, por exemplo, o URL do primeiro anexo de mídia estará no parâmetro MediaUrl0, o segundo no MediaUrl1 e assim por diante.

Para lidar com um número dinâmico de anexos, extraímos os URLs da solicitação de corpo desta forma:

for i in 0..(num_media - 1) do
  media_url = params["MediaUrl#{i}"]
end

Determine o tipo de conteúdo da mídia

Os anexos a mensagens MMS podem ser de vários tipos de arquivo diferentes. Imagens JPG e GIF, bem como arquivos MP4 e 3GP, são comuns. A Twilio lida com a determinação do tipo de arquivo para você, que pode obter o tipo mime padrão do parâmetro MediaContentTypeX. Se você estiver esperando fotos, provavelmente verá muitos anexos com o tipo mime image/jpeg. Também utilizaremos o gem "mime-types" para obter a extensão do arquivo do seu tipo.

for i in 0..(num_media - 1) do
  media_url = params["MediaUrl#{i}"]
  content_type = params["MediaContentType#{i}"]
end

Processar imagens MMS

Salve os URLs de mídia

Dependendo do seu caso de uso, armazenar os URLs das imagens (ou vídeos, ou qualquer outro) pode ser tudo o que você precisa. Há dois recursos principais para esses URLs que os tornam muito flexíveis para uso em apps:

  1. Eles são acessíveis publicamente sem a necessidade de autenticação para facilitar o compartilhamento.
  2. Eles são permanentes (a menos que você exclua explicitamente a mídia, veja mais adiante).

Por exemplo, se você estiver criando um app baseado em navegador que precisa exibir as imagens, tudo o que deve fazer é inserir uma tag <img src="twilio url to your image"> na página. Se isso funciona para você, talvez tudo o que você precisa seja armazenar o URL em um campo de caractere de banco de dados.

Salve a mídia no sistema de arquivos local

Se quiser salvar os anexos de mídia em um arquivo, será necessário fazer uma solicitação HTTP para o URL de mídia e gravar o fluxo de resposta em um arquivo. Se você precisar de um nome de arquivo exclusivo, poderá usar a última parte do URL da mídia. Por exemplo, suponha que o URL da mídia seja o seguinte:

https://api.twilio.com/2010-04-01/Accounts/ACxxxx/Messages/MMxxxx/Media/ME27be8a708784242c0daee207ff73db67

Você pode usar essa última parte do URL como um nome de arquivo exclusivo. Descobrir uma boa extensão para usar é um pouco mais complicado. Se você estiver esperando apenas imagens, poderá presumir uma extensão ".jpg". Para obter um pouco mais de flexibilidade, você pode pesquisar o tipo mime e determinar uma boa extensão para usar com base nele.

Este é o código completo da nossa visualização, que salva cada anexo MMS na pasta atual.

<code sample: receive-mms-sinatra repo>

Loading Code Sample...
        
        

        Receive MMS images with Ruby

        Outra ideia para esses arquivos de imagem pode ser carregá‐los em um serviço de armazenamento em nuvem, como Azure Blob Storage ou Amazon S3. Você também pode salvá‐los em um banco de dados, se necessário. São apenas arquivos regulares neste momento. Varie. Nesse caso, estamos salvando‐os no banco de dados para recuperá‐los mais tarde.

        Exclua a mídia da Twilio

        Se você estiver baixando os anexos e não precisar mais deles para serem armazenados pela Twilio, poderá excluí‐los facilmente. Você pode enviar uma solicitação HTTP DELETE para o URL da mídia e ele será excluído, mas você precisará ser autenticado para fazer isso.

        Loading Code Sample...
              
              

              Exclua uma mídia

              Proteja seus webhooks

              A Twilio é compatível com HTTP básico e Autenticação Digest. A autenticação permite proteger com senha seus URLs TwiML no servidor da Web para que somente você e a Twilio possam acessá‐los. Saiba mais sobre a autenticação HTTP e a validação de pedidos recebidos aqui.

              O que vem a seguir?

              Se você precisa se aprofundar um pouco mais, pode seguir para nossa Referência de API e saber mais sobre a solicitação de webhook da Twilio e o recurso de mídia da API REST. Além disso, você deve estar ciente do preço de armazenamento de todos os arquivos de mídia que mantém nos servidores da Twilio.

              Adoraríamos saber o que você cria com isso.

              Kevin Segovia Daniel Erazo
              Classifique esta página:

              Precisa de ajuda?

              Às vezes, todos nós precisamos; a programação é difícil. Receba ajuda agora da nossa equipe de suporte, ou confie na sabedoria da multidão navegando pelo Stack Overflow Collective da Twilio ou buscando a tag Twilio no Stack Overflow.

              Loading Code Sample...
                    
                    
                    

                    Obrigado pelo seu feedback!

                    Selecione o(s) motivo(s) para seu feedback. As informações adicionais que você fornece nos ajudam a melhorar nossa documentação:

                    Enviando seu feedback...
                    🎉 Obrigado pelo seu feedback!
                    Algo deu errado. Tente novamente.

                    Obrigado pelo seu feedback!

                    thanks-feedback-gif