2017-12-01 15 views
2

에서 my question on getting text messages into Azure 나는 SMS의 메시지를 Azure Table Store로 가져올 수있었습니다.Azure Logic 앱을 사용하여 Twilio를 사용하여 Azure Blob 저장소로 보낸 MMS에서 이미지를 추출하려면 어떻게해야합니까?

텍스트 메시지에 이미지가 포함되어있어 MMS로 전송 된 경우 Azure Blob Storage에 이미지를 다운로드하고 싶습니다.

Twilo는

a guide on how to download and receive images을 가지고하지만 내가 this Twilio guide 연구를 시도하고 GitHub의에서 코드를 복제 논리 앱

와이 활용하는 방법을 잘 모르겠습니다. DownloadMmsImages는 BlockSpamCalls 프로젝트와 동일한 솔루션에 있습니다. 나는 두 프로젝트 사이의 관계에 대해 명확하지 않았다.

메시지 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는 "통합 시나리오의 한 단계에서 고도로 맞춤화 된 변환이나 특수 코드가 필요한 경우 함수를 작성하고 논리 응용 프로그램의 동작으로 함수를 트리거합니다." Looks 내가 함수를 하나의 단계로 호출 할 필요가있는 것처럼 보입니다. –

+0

당신은 _need_하지 않지만, 많은 것들을 단순화 할 것입니다. Azure Logic Apps를 Azure 기능과 함께 사용할 계획이라고 말한 것을 기억하십시오. 복잡한 문서를 처리 할 수있는 방법입니다. –

답변

2

부인입니다. Twilio에 대한 계정이 없으므로 솔루션을 전체적으로 테스트 할 수 없습니다. 원하는 결과를 얻는 데 필요한 주요 단계와 주요 세부 사항을 보여줄 것으로 예상되는 초안으로 생각하십시오.

메시지

당신이 메시지 (또는 메시지의 미디어)를 검색하려고 SID

얻기, 당신은 참으로 메시지 및/또는 기본적으로 자신의 식별자 인 미디어의 SID/ SIDs를 제공해야합니다. Logic App의이 인스턴스는 들어오는 HttpRequest 트리거의 일부로 SID를 수신한다고 가정합니다.

예를 들어 Logic App 사용자가 아래 그림과 같이 HTTP GET 요청의 URL에 SID 메시지를 제공하도록 요구할 수 있습니다.

HttpGet

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

그런 다음, 당신은 당신의 논리 응용 프로그램의 추가 단계에서이 SID를 참조 할 수 있습니다. 나는 간단히 Twilio 커넥터를 쳐다 보면서 내가 그것을 당신의 논리 앱 많은을 복잡 것 때문에 당신이 그것을 사용하지 않는 것이 좋습니다하자

메시지를 가져 오는

UseSid

{ 
    "inputs": { 
    "host": { 
     "connection": { 
     "name": "@parameters('$connections')['twilio']['connectionId']" 
     } 
    }, 
    "method": "get", 
    "path": "/Messages/@{encodeURIComponent(triggerOutputs()['relativePathParameters']['mms_message_sid'])}.json", 
    "authentication": "@parameters('$authentication')" 
    } 
} 
.

대신 HTTP 커넥터를 통해 Get Media API을 사용할 수 있습니다.다음과 같은 형식의 URL을 구성해야합니다 https://api.twilio.com/2010-04-01/Accounts/{account_sid}/Messages/{mms_message_sid}/Media.json

retrive_media_list

그런 다음이 포함 된 응답을 받아야하는 메시지의 content_typemedia_listuri 당신은 MMS의 실제 콘텐츠를 다운로드 할 수 있습니다. 응답 본문은 JSON 문서는 문자열로 표현하기 때문에

{ 
    "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 배열을 반복 할 수 없습니다.

이전 단계 (HTTP)의 body을 콘텐츠로 사용하는 구문 분석 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 헤더를 지정하고자 할 수 있습니다. 그 주위를 놀고 어떤 것이 작동하는지 확인하십시오. 당신은, 당신은 이미 SMS 동안 그 작업을 수행하는 방법을 알고 말했기 때문에 내가 여기에 어떤 정보를 제공하지 않습니다 저장 푸른 물방울 저장

retrieve_media_content

. HTTP2 (내부, 내부)에 필요한 단계를 추가했는지 확인하십시오.

희망, 도움이됩니다. 논리 응용 프로그램은 "쉬운 peasy integration squeeze"가 아닙니다.

+0

감사합니다. "논리 응용 프로그램의 소비자"는 무엇을 의미합니까? 상대 경로에 대한 제안을 시도하면 " 논리 응용 프로그램 mmsreceiver를 저장하지 못했습니다. 'inputs.relativePath'속성에서 'message/{mms_message_sid'값 '워크 플로우'유형 '요청' 값은 쿼리 매개 변수없이 잘 구성된 URI 상대 경로 여야합니다 세부 정보 : 'UriTemplate은'{mms_message_sid} '를 세그먼트 또는 쿼리 부분의 유효한 형식으로 지원하지 않습니다.'" –

+0

요청 본문 JSON 스키마를 표시하도록 질문을 업데이트했습니다. –

+0

무료 Twilio 시험판을 사용하고 있습니다. –