2017-02-10 68 views
1

沒有到達我想要實現一個解決方案時一定事件發生時自動調用別人的基礎上,Twilio,Azure的自動化和SCOM。此外,有人可能會撥打號碼,並觸發相同的流程。Azure的自動化網絡掛接 - Twilio StatusCallback在JSON

的Twilio帳戶/ Phonenumber來設置和工作正常。當我這樣做的Twilio號碼的呼叫我成功地接收到我的Azure的自動化網絡掛接HTTP POST和運行手冊被激發。

我現在面臨的唯一問題是我無法使用cmdlet ConvertFrom-Json來提取WebhookBody。

這是使用cmdlet時出現錯誤:

ConvertFrom-JSON:無效的JSON原始:調用。在行:13字符:11 + $輸入= ConvertFrom-JSON $ webhookdata.RequestBody + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~ + CategoryInfo:NotSpecified:(:) [ConvertFrom JSON的],ArgumentException的 + FullyQualifiedErrorId信息:System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand

而這是輸入到達在天青自動化網絡掛接從Twilio:

{ 「WebhookName」: 「Twilio 端點」, 「RequestBody」:「調用=%2B41815880262 &使用toState =庫爾& CallerCountry = CH &方向=入站&時間戳=週五%2C%2010%20Feb%202017%2009%3A07%3A35%20%2B0000 & CallbackSource =呼叫進程的事件& CallerState = & ToZip = &的SequenceNumber = 0 & CallSid = CA7c152287d945595fe600614fe7778f8a &要=%2B41815880262 & CallerZip = & ToCountry = CH & ApiVersion = 2010-04-01 & CalledZip = & CalledCity = & CallStatus =完成時間& = 1 &從=%2BMYTELNUZMBER & CallDuration = 8 & AccountSid =糠& CalledCountry = CH & CallerCity = &主叫=%2Bmybnumber & FromCountry = CH & ToCity = & FromCity = & CalledState =庫爾& FromZip = & FromState = 「 」RequestHeader「:{ 」緩存控制「:」最大年齡= 259200" , 「連線」: 「關閉」, 「接受」: 「/」, 「主機」: 「s2events.azure-automation.net」, 「用戶代理」:「TwilioProxy/1。1" , 「X-Twilio簽名」: 「pq2jYVGN3H5LmanwId0xCvp69tM =」, 「X-MS-請求-ID」: 「bc1cf55a-33b2-4046-a343-199d1a7fac4a」}}

當我簡單地輸出的與此CMD網絡掛接的數據,我可以看到,Twilio Repsonse看起來有些奇怪(Heade看起來不錯,雖然):

$WebhookName = $WebhookData.WebhookName 
$WebhookHeaders = $WebhookData.RequestHeader 
$WebhookBody = $WebhookData.RequestBody 

Write-Output $WebhookHeaders 
Write-Output $WebhookBody 

輸出:

緩存控制:最大年齡= 259200連接:關閉接受 :/主機:s2events.azure-automation.net用戶代理
:TwilioProxy/1.1 X-Twilio簽名:xmEbt23prT + W8zJrRZE5pdKullE = X-MS-請求-ID:bdca412c-584e-體42Ba-ACBB-969cdf9c1ec0

調用=%2B41815880262 &使用toState =庫爾& CallerCountry = CH &方向=入站&時間戳=星期三%2C%2008%20Feb%202017%2013%3A18%3A27%20%2B0000 & CallbackSource =呼叫進程的事件& CallerState = & ToZip = & SequenceNumber = 0 & CallSid = CALLSID & To =%2B418158 80262 & CallerZip = & ToCountry = CH & ApiVersion = 2010-04-01 & CalledZip = & CalledCity = & CallStatus =完成時間& = 1 &從=%2BMYNUMBER & CallDuration = 7 & AccountSid =糠& CalledCountry = CH & CallerCity = &主叫=%2BMYBNUMBER & FromCountry = CH & ToCity = & FromCity = & CalledState =庫爾& FromZip = & FromState =

有沒有人有一個想法,我可以做什麼,而不是寫我自己的「轉換器」從TWILIO HTTP POST獲取值?或者我可能會做一些可怕的錯誤?

回答

1

Twilio開發者傳道這裏。

當Twilio向您的URL發送webhook請求時,它不會被編碼爲JSON。這就是您的JSON轉換失敗的原因。

Twilio sends the data as either URL encoded parameters in the body of a POST request or URL query parameters for GET requests。這與通過在瀏覽器中提交表單進行請求的情況相同。

我對Azure cmdlet不熟悉,但是如果有解析URL編碼數據的人,那麼您需要使用它。或者,@ 4c74356b41提供了一個體面的實現。

+0

非常感謝!我認爲這樣我可能會對Twilios的迴應/請求產生幻想。 –

3

所以,我想我理解你的問題。你這樣做是不太正確:$webhook數據已經是一個對象,其中有你需要的一切:你只需要解析RequestBody成有意義的事情

$WebhookData.WebhookName 
$WebhookData.RequestHeader 
$WebhookData.RequestBody 

$data = @{ }; 

foreach ($item in $WebhookData.RequestBody.Split('&')) { 
    try { 
     $item = $item.Split('='); 
     $data.Add($item[0], [System.Net.WebUtility]::UrlDecode($item[1]))   
    } 
    catch { 
     Write-Warning -Message ('Possible null parameter value for {0}' -f $item[0]); 
    } 
} 
+0

工作就像一個魅力!非常感謝你提供的功能:) –

+0

你應該將此標記爲在這種情況下的答案;)@y_maurer – 4c74356b41

+0

謝謝,我試圖,但我想現在我已經找到了按鈕;) –