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 Java

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 Java.

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 em Java é usar a estrutura da Web do Spark.

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", que pode facilitar bastante a geração do TwiML e do resto da estrutura de webhook.

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 parâmetro de solicitação para as visualizações do Spark.

Obtenha o número de anexos

Podemos receber mais de uma mídia por mensagem, portanto, esse parâmetro nos informa quantas recebemos. Usamos uma classe personalizada parseBody para obter o valor e fundi-lo com um número inteiro, para ser usado em um loop.

Map<String, String> parameters = parseBody(req.body());
String numMediaStr = parameters.get("NumMedia");
int numMedia = Integer.parseInt(numMediaStr);

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, fazemos loop em todos os URLs disponíveis:

while (numMedia > 0) {
    numMedia = numMedia - 1;
    String mediaUrl = parameters.get(String.format("MediaUrl%d", numMedia));
}

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.

while (numMedia > 0) {
    numMedia = numMedia - 1;
    String mediaUrl = parameters.get(String.format("MediaUrl%d", numMedia));
    String contentType = parameters.get(String.format("MediaContentType%d", numMedia));
}

Processar imagens MMS

Salve os URLs de mídia

Dependendo do seu caso de uso, armazenar os URLs para as 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 para o nosso controlador que salva cada anexo MMS na pasta App_Data:

Loading Code Sample...
        
        

        Saves MMS attachment with Java

        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.

        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?

              Todo o código, em um projeto de trabalho completo, está disponível no GitHub. 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