Receber e baixar imagens de mensagens MMS recebidas com Node.js
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 Node.js.
Criar projeto de processamento de MMS
Crie um aplicativo em Express
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 com Node é usar Express.
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 o módulo Twilio.twiml.MessagingResponse
na biblioteca auxiliar, que pode facilitar bastante a geração do TwiML e do resto da estrutura de webhook.
Para instalar a biblioteca, execute:
npm install twilio
Crie um roteador
Adicione um novo roteador chamado MessagingRouter que processa uma solicitação SMS recebida.
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 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:
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
.
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:
- Eles são acessíveis publicamente sem a necessidade de autenticação para facilitar o compartilhamento.
- Eles são permanentes (a menos que você exclua explicitamente a mídia).
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 e procurar a extensão de arquivo correspondente para o tipo mime.
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 diretório público para utilizá‐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. Para facilitar isso, você pode usar a Biblioteca auxiliar para Node da Twilio. Conforme mostrado aqui:
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.
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.