Level up your Twilio API skills in TwilioQuest, an educational game for Mac, Windows, and Linux. Download Now

メニュー

Expand
Rate this page:

Thanks for rating this page!

We are always striving to improve our documentation quality, and your feedback is valuable to us. How could this documentation serve you better?

C#で着信MMS(日本未対応)の画像を受信、ダウンロードする

SMSを受信、返信する方法についてはマスターできました。 では、ダウンロードしたい画像の含まれるMMSを受信する場合はどうでしょうか。 C#を使用してその画像、および他の受信MMSを取得できるようにする方法を学びましょう。

Create MMS Processing Project

ASP.NETのMVCプロジェクトを作成する

Twilioがアカウントの電話番号に対してメッセージを受信した場合、開発者の作成したWebhookに対してHTTP呼び出しを発行することができます。 .NET上でHTTPリクエストを処理するもっとも簡単な方法はASP.NET MVCを使用する方法です。 すでにASP.NET MVCプロジェクトをお持ちかもしれませんし、空のプロジェクトを新規に作成することも可能です。 プロジェクトウィザードの操作時に、MVCの参照が含まれていることを確認してください。 新規のASP.NET MVCプロジェクトの作成については、このミニガイドをチェックしてみてください。

すべて順調な場合は最低限、Webhookは200 OKのレスポンスを返すことをTwilioは期待しています。 しかししばしば、レスポンスにはいくばくかのTwiMLを返すこともあるでしょう。 TwiMLはメッセージに対して応答する方法をTwilioに指示するための一連のXMLコマンドにすぎません。 手動でXMLを生成する代わりに、TwiMLおよびその他のWebhookのボイラープレートコードを簡単に生成することのできるTwilio.AspNet.Mvcヘルパーライブラリーを使用します。

ライブラリーをインストールするには、パッケージマネージャーコンソールを開いて下記のコマンドを実行します。

Install Twilio.AspNet.Mvc Package

コントローラーを作成する

Add a new controller called MmsController (again, check out our mini-guide if you are unsure of how to do this). We’ll have this class inherit from TwilioController to give us a little easier syntax for returning TwiML. Here’s a simple controller that just receives a message and sends a “hello world” reply message.

        
        
        
        

        MMSメッセージと画像を受信する

        受信メッセージの詳細を取得する

        When Twilio calls your webhook, it sends a number of parameters about the message you just received. Most of these, such as the To phone number, the From phone number, and the Body of the message are available as properties of the request parameter to our action method (type SmsRequest). However, one parameter it doesn’t have is NumMedia. Thankfully, we can have ASP.NET MVC easily map this parameter for us by adding it to our action method’s signature like so:

        public TwiMLResult Index(SmsRequest request, int numMedia)
        

        メディアへのURLを取得する

        MMSメッセージには複数の添付ファイルを含めることができるため、MediaUrlXという変数で送信します。 Xは0ではじまる通し番号です。 したがってたとえば、最初のメディア添付に対するURLはMediaUrl0パラメーターに保存され、2番目はMediaUrl1に、といった具合になります。

        可変数の添付ファイルを処理するには、次のようにASP.NETのRequest.Formから複数のURLを取得します。

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

        メディアのコンテントタイプを決定する

        MMSメッセージへの添付ファイルはさまざまなファイルタイプたり得ます。 JPGおよびGIF画像、またMP4および3GPファイルはいずれも一般的です。 Twilioはファイルタイプを決定するため、MediaContentTypeXパラメーターから標準的なMIME型を取得できます。 写真を期待する場合、image/jpegのMIME型を持つ多数の添付ファイルを確認できるでしょう。

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

        MMS画像を処理する

        メディアURLを保存する

        ユースケースによっては、画像(またはビデオなどどのようなものでも)へのURLを保存するだけで事足りることがあります。 これらのURLにはアプリケーション内の使用にとって非常に応用の利くふたつの鍵となる特徴があります。

        1. 共有を簡単にするため、認証の必要なく公開アクセスが可能になっています。
        2. (後述するように明示的にメディアを削除しない限り)無期限で保存されます。

        For example, if you are building a browser-based app that needs to display the images, all you need to do is drop an <img src="twilio url to your image"> tag into the page. If this works for you, then perhaps all you need is to store the URL in a database character field.

        ローカルのファイルシステムにメディアを保存する

        メディアの添付ファイルを保存したい場合、メディアURLに対してHTTPリクエストを発行し、ファイルにレスポンスストリームを書き込む必要があります。 一意なファイル名が必要な場合、メディアURLの末尾部分が使用できます。 たとえば、メディアURLが下記のようだったとしましょう:

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

        You can use that last part of the URL as a unique filename. Figuring out a good extension to use is a little trickier. If you are only expecting images, you could just assume a “.jpg” extension. For a little more flexibility, you can look up the mime type and determine a good extension to use based on that.

        下記に、各MMSの添付ファイルをApp_Dataフォルダーに保存するコントローラー用の全コードを示します。

              
              
              
              

              非同期でコントローラーアクションを作成したことに注目してください。 少々時間のかかる必要のあるネットワークリクエストを発行するため、これは高く推奨されます。 これを非同期で実行するということは、ファイルのダウンロード中に処理されている他のリクエストをブロックしないことを意味します。

              これらの画像の別のアイディアとしては、Azure Blob StorageAmazon S3といったクラウドストレージサービスにアップロードすることです。 また必要に応じてデータベースに保存することもできます。 現時点では、これらは何の変哲もないファイルです。 気が変になりそうですね。

              Twilioからメディアを削除する

              If you are downloading the attachments and no longer need them to be stored by Twilio, you can easily delete them. You can send an HTTP DELETE request to the media URL and it will be deleted, but you will need to be authenticated to do this. To make this easy, you can use the Twilio C# Helper Library.

                    
                    
                    
                    

                    Protect your webhooks

                    Twilio supports HTTP Basic and Digest Authentication. Authentication allows you to password protect your TwiML URLs on your web server so that only you and Twilio can access them. Learn more about HTTP authentication and validating incoming requests here.

                    次は?

                    完全な動作可能なプロジェクト中の全コードがGitHubにて利用可能です。 もう少し掘り下げて学びたい場合は、APIリファレンスを参照してTwilio Webhookリクエスト、およびREST APIのMediaリソースについて参照してください。 また、Twilioのサーバー上に保存される全メディアファイルのストレージの価格についてもご確認ください。

                    この製品で構築したものをお知らせください

                    David Prothero Jose Oliveros Agustin Camino Mica Swyers Kat King
                    Rate this page:

                    ヘルプが必要ですか?

                    誰しもが一度は考える「コーディングって難しい」。そんな時は、お問い合わせフォームから質問してください。 または、Stack Overflow でTwilioタグのついた情報から欲しいものを探してみましょう。