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 C#

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 C#.

Criar projeto de processamento de MMS

Crie um projeto ASP.NET MVC

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. NET é usar ASP.NET MVC. Você pode já ter um projeto ASP.NET MVC existente ou pode criar um novo do zero. Certifique‐se de incluir as referências MVC ao passar pelo assistente do projeto. Se precisar de ajuda para criar um novo projeto ASP.NET MVC, confira nosso miniguia sobre o tópico.

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

Para instalar a biblioteca, abra o Console de gerenciamento do pacote e execute o seguinte comando:

Install Twilio.AspNet.Mvc Package

Crie um controlador

Adicione um novo controlador chamado MmsController (novamente, confira nosso miniguia se não tiver certeza de como fazer isso). Teremos essa classe herdada do TwilioController para nos dar uma sintaxe um pouco mais fácil para retornar o TwiML. Aqui está um controlador simples que apenas recebe uma mensagem e envia uma mensagem de resposta "Hello World".

Loading Code Sample...
        
        

        C# Hello World SMS 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 nosso método de ação (digite SmsRequest). No entanto, um parâmetro que ele não possui é NumMedia. Felizmente, podemos fazer com que o ASP.NET MVC facilmente mapeie este parâmetro adicionando‐o à assinatura do nosso método de ação, desta forma:

        public TwiMLResult Index(SmsRequest request, int numMedia)

        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 coleção ASP.NET Request.Form desta maneira:

        for (var i = 0; i < numMedia; i++)
        {
            var mediaUrl = Request.Form[$"MediaUrl{i}"];
        }

        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.

        for (var i = 0; i < numMedia; i++)
        {
            var mediaUrl = Request.Form[$"MediaUrl{i}"];
            var contentType = Request.Form[$"MediaContentType{i}"];
        }

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

              Process MMS Media with C#

              Observe que tornamos nossa ação do controlador async. Isso é altamente recomendado, pois faremos uma solicitação de rede que pode levar um pouco de tempo. Fazer isso de forma assíncrona significa que não bloquearemos outras solicitações de serem processadas enquanto o arquivo é baixado.

              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. Para facilitar isso, você pode usar a Biblioteca auxiliar para C# da Twilio.

              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.

                    David Prothero 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