2017-12-01 19 views
2

my question on getting text messages into Azure 私はAzure Table StoreにSMSのメッセージを受け取ることができました。Azure Logicアプリケーションを使用して、Twilioを使用してAzure Blobストレージに送信したMMSから画像を抽出するにはどうすればよいですか?

テキストメッセージに画像が含まれているため、MMSとして送信された場合、画像をAzure Blob Storageにダウンロードしたいと考えています。

Twiloは

a guide on how to download and receive imagesを持っているしかし、私はthis Twilio guideを勉強しようとしたのGitHubからコードをクローン化されたロジックのApp

でこれを利用する方法がわからないです。 DownloadMmsImagesは、BlockSpamCallsプロジェクトと同じソリューションです。私は2つのプロジェクトの関係について不明であった。

私は、私はSIDが体であるメッセージに入れてするように求められていますが唯一の財産TwilioのGetMessageアクションを追加してみました。

(やや難読化)リクエストボディのJSONスキーマは、この回答で何かがかなりの仕事をしていない場合、私は事前に謝罪

{ 
    "body": { 
    "$content": "VG9Db3VudHJ etc", 
    "$content-type": "application/json", 
    "$formdata": [ 
     { 
     "key": "ToCountry", 
     "value": "AU" 
     }, 
     { 
     "key": "ToState", 
     "value": "" 
     }, 
     { 
     "key": "SmsMessageSid", 
     "value": "SMeda21902 etc" 
     }, 
     { 
     "key": "NumMedia", 
     "value": "0" 
     }, 
     { 
     "key": "ToCity", 
     "value": "" 
     }, 
     { 
     "key": "FromZip", 
     "value": "" 
     }, 
     { 
     "key": "SmsSid", 
     "value": "SMeda2 etc" 
     }, 
     { 
     "key": "FromState", 
     "value": "" 
     }, 
     { 
     "key": "SmsStatus", 
     "value": "received" 
     }, 
     { 
     "key": "FromCity", 
     "value": "" 
     }, 
     { 
     "key": "Body", 
     "value": "Tskez7" 
     }, 
     { 
     "key": "FromCountry", 
     "value": "AU" 
     }, 
     { 
     "key": "To", 
     "value": "+61 etc" 
     }, 
     { 
     "key": "ToZip", 
     "value": "" 
     }, 
     { 
     "key": "NumSegments", 
     "value": "1" 
     }, 
     { 
     "key": "MessageSid", 
     "value": "SMeda2 etc" 
     }, 
     { 
     "key": "AccountSid", 
     "value": "AC7aa etc" 
     }, 
     { 
     "key": "From", 
     "value": "+61 etc" 
     }, 
     { 
     "key": "ApiVersion", 
     "value": "2010-04-01" 
     } 
    ] 
    }, 
    "headers": { 
    "Accept": "*/*", 
    "Cache-Control": "max-age=259200", 
    "Connection": "close", 
    "Content-Length": "381", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "etc.logic.azure.com:443", 
    "User-Agent": "TwilioProxy/1.1", 
    "X-Twilio-Signature": "sQf etc" 
    } 
} 
+0

申し訳ありませんが、答えを書く時間を見つけるのに3日かかりました... –

+0

https://docs.microsoft.com/en-us/azure/azure-functions/functions-compare-logic-apps-ms -flow-webjobsは次のように述べています。「統合シナリオの一歩が高度なカスタム変換や特殊コードを必要とする場合は、関数を記述し、ロジックアプリケーションのアクションとして関数をトリガーします。私はステップの1つとして関数を呼び出す必要があるように見える –

+0

あなたはそれを必要としませんが、それは多くの事を単純化します。 Azureの機能を持つAzure Logic Appsを使用する予定だと言ったことを覚えておいてください。複雑な文書を処理するには、実行可能な方法です。 –

答えて

2

免責です。私はTwilioのアカウントを持っておらず、ソリューションをエンドツーエンドでテストすることができません。希望の結果を達成するために必要な主要なステップと主要な詳細を示すドラフトとして考えてください。

メッセージ

メッセージ(またはメッセージのメディア)を取得しようとSID

を取得、あなたは確かにメッセージおよび/または基本的に自分の識別子であり、メディアの SID/ SIDsを提供する必要があります。私は、Logic Appのこのインスタンスが着信HttpRequestトリガーの一部としてSIDを受信して​​いると仮定します。

はたとえば、以下に示すように、HTTPのGETリクエストのURLにメッセージSIDを提供するために、論理アプリケーションの消費者が必要な場合があります。

{ 
    "kind": "Http", 
    "inputs": { 
    "schema": {}, 
    "method": "GET", 
    "relativePath": "message/{mms_message_sid}" 
    } 
} 

HttpGet

その後、あなたはあなたのロジックアプリケーションのさらなるステップで、このSIDを参照することができるようになります。私は簡単にTwilioコネクタを見て、私はあなたのロジックのApp たくさんを複雑にするために起こっているので、あなたがそれを使用しないことをお勧めしましょう

メッセージを取得

UseSid

代わりに、あなたは、HTTPコネクタを介してGet Media APIを使用することができます。あなたは、次の形式のURLを構築する必要があります。https://api.twilio.com/2010-04-01/Accounts/{account_sid}/Messages/{mms_message_sid}/Media.json

retrive_media_list

あなたは、メッセージのmedia_listcontent_type、あなたはMMSの実際のコンテンツをダウンロードするために使用することができますuriとを含む応答を受け取る必要があります。

{ 
    "first_page_uri":"/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages/MM800f449d0399ed014aae2bcc0cc2f2ec/Media.json?PageSize=50&Page=0", 
    "media_list":[ 
    { 
    "sid":"ME85ebf7e12cb821f84b319340424dcb02", 
    "account_sid":"ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 
    "parent_sid":"MM800f449d0399ed014aae2bcc0cc2f2ec", 
    "content_type":"image/png", 
    "date_created":"Wed, 25 Sep 2013 22:47:18 +0000", 
    "date_updated":"Wed, 25 Sep 2013 22:47:19 +0000", 
    "uri":"/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages/MM800f449d0399ed014aae2bcc0cc2f2ec/Media/ME85ebf7e12cb821f84b319340424dcb02.json" 
    }, 
    { 
    "sid":"ME8d8f717e2d6e5383055b3cd150ac5f54", 
    "account_sid":"ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 
    "parent_sid":"MM800f449d0399ed014aae2bcc0cc2f2ec", 
    "content_type":"image/png", 
    "date_created":"Wed, 25 Sep 2013 22:47:18 +0000", 
    "date_updated":"Wed, 25 Sep 2013 22:47:19 +0000", 
    "uri":"/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages/MM800f449d0399ed014aae2bcc0cc2f2ec/Media/ME8d8f717e2d6e5383055b3cd150ac5f54.json" 
    } 
    ], 
    "previous_page_uri":null, 
    "uri":"/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages/MM800f449d0399ed014aae2bcc0cc2f2ec/Media.json?PageSize=50&Page=0", 
    "page_size":50, 
    "next_page_uri":null, 
    "page":0 
} 

レスポンスボディは、JSON文書が文字列として表現されているので、我々はいくつかのフープを介してジャンプしない限り、我々は、media_list配列を反復処理することができませんレスポンスにJSON

を解析します。

前の手順のbodyHTTP)をコンテンツとして使用する解析JSONステップを追加するだけです。スキーマのために、次の文書提供:media_list`

`を通じて

{ 
    "inputs": { 
    "content": "@body('HTTP')", 
    "schema": { 
     "type": "object", 
     "properties": { 
     "first_page_uri": { 
      "type": "string" 
     }, 
     "media_list": { 
      "type": "array", 
      "items": { 
      "type": "object", 
      "properties": { 
       "sid": { 
       "type": "string" 
       }, 
       "account_sid": { 
       "type": "string" 
       }, 
       "parent_sid": { 
       "type": "string" 
       }, 
       "content_type": { 
       "type": "string" 
       }, 
       "date_created": { 
       "type": "string" 
       }, 
       "date_updated": { 
       "type": "string" 
       }, 
       "uri": { 
       "type": "string" 
       } 
      }, 
      "required": [ 
       "sid", 
       "account_sid", 
       "parent_sid", 
       "content_type", 
       "date_created", 
       "date_updated", 
       "uri" 
      ] 
      } 
     }, 
     "previous_page_uri": {}, 
     "uri": { 
      "type": "string" 
     }, 
     "page_size": { 
      "type": "number" 
     }, 
     "next_page_uri": {}, 
     "page": { 
      "type": "number" 
     } 
     } 
    } 
    } 
} 

parse_HTTP_response_body_json

反復を今のものが比較的容易です。前の手順のmedia_listを対象とするFor Eachステップを追加します。

各メディアについて、実際にバイナリコンテンツを取得するAPI呼び出しを行う必要があります。メディアタイプに関連するHTTPヘッダーを指定することができます。その周りを再生し、何が動作するかを確認します。

retrieve_media_content

Azureブロブストレージに保存

あなたはすでにSMSのためにそれを行う方法を知って、言ったので、私はここにすべての詳細を提供しません。 HTTP2(inside For Eachステップ)の直後に必要なステップを追加してください。

希望、それは役に立ちます。ロジックアプリケーションは「簡単な統合統合」ではありません。

+0

ありがとうございました。 "ロジックアプリケーションの消費者"とはどういう意味ですか?私は、相対パスの提案をしようとすると、 " ロジックアプリケーションmmsreceiverを保存できませんでした。プロパティ 'inputs.relativePath'ワークフローで 'message'/'mms_message_sid'詳細: 'UriTemplateは' {mms_message_sid} 'をセグメントまたはクエリ部分の有効な形式としてサポートしていません。'" –

+0

リクエストボディJSONスキーマを表示するための質問が更新されました –

+0

無料のTwilioトライアルを使用しています –

関連する問題