2016-11-19 37 views
0

我想設置一個簡單的Azure函數來與Slack「斜槓」命令集成。似乎除了Slack發送內容類型爲'application/x-www-form-urlencoded'這似乎是連接,這顯然Azure函數不知道如何處理。無法使用Azure函數獲得Slack「slash命令」

我會讓它變成「un-doable」,除非Azure爲「Slack」設置了特定的Web鉤子設置,這使得我相信它應該能夠工作。

關於如何讓這個工作的任何提示?

+0

添加標籤以確保很容易找到。希望下面的答案有所幫助。 –

回答

1

Azure函數確實支持Slack WebHooks。我不知道你碰到了,因爲這不是什麼具體錯誤,但這裏是一個斜槓命令功能,將回顯信息返回給用戶的一個簡單的例子:

代碼:

using System.Collections.Specialized; 

public static async Task<string> Run(HttpRequestMessage req, TraceWriter log) 
{ 
    NameValueCollection data = await req.Content.ReadAsFormDataAsync(); 

    return data["text"]; 
} 

功能配置(注意網絡掛接式):

{ 
    "bindings": [ 
    { 
     "type": "httpTrigger", 
     "direction": "in", 
     "webHookType": "slack", 
     "name": "req" 
    }, 
    { 
     "type": "http", 
     "direction": "out", 
     "name": "res" 
    } 
    ], 
    "disabled": false 
} 

提示:有一兩件事值得一提的是,驗證將在鬆弛的要求進行,以確保它確實來自懈怠。由於Slack不允許您將函數密碼作爲標記,所以您希望做相反的操作(將Slack標記帶入您的函數,以便用作祕密)。爲了做到這一點,抓住你的Slack令牌,打開你的功能的「按鍵」面板,刪除你的功能級別「默認」鍵,並通過粘貼你從Slack獲得的令牌重新創建(將其命名爲「默認」) 。

0

我試着法比奧的方法,但無法讓它工作,因爲我不知道如果我們應該給鬆懈一個新的URL發送帖子(試圖變種的網址,但不斷得到客戶端錯誤信息)。我最終只是手動解析表單數據。這似乎每次都很好。

string responseURL = ""; 
string command = ""; 
string content = await req.Content.ReadAsStringAsync(); 
string formdata = content.Split(';')[0]; 
string[] namevalues = formdata.Split('&'); 
NameValueCollection col = new NameValueCollection(); 

foreach (string value in namevalues) 
{ 
    string[] nameValueItem = value.Split('='); 
    col.Add(nameValueItem[0], nameValueItem[1]); 
    log.Info(nameValueItem[0] + " - " + nameValueItem[1]); 
    if(nameValueItem[0] == "response_url") 
    { 
     responseURL = System.Web.HttpUtility.UrlDecode(nameValueItem[1]); 
    } 
    else if(nameValueItem[0] == "command") 
    { 
     command = System.Web.HttpUtility.UrlDecode(nameValueItem[1]); 

    } 
}