2016-11-19 8 views
0

スラッシュ 'スラッシュ'コマンドと統合する単純なAzure関数を設定しようとしています。 Slackが 'application/x-www-form-urlencoded'というコンテンツタイプを送信する以外はすべて接続しているようですが、Azure関数は対処方法を知らないようです。Azure関数でスラック "スラッシュコマンド"を使用できません

Azureが "Slack"用の特定のWebフック設定を持っていることを除いて、私は "un-doable"と言いますが、これで動作するはずです。

どのように私はこれを働かせることができますか?

+0

これが簡単に見つかるようにタグが追加されました。以下の答えが役立つことを願っています。 –

答えて

1

Slack WebHooksは確かにAzure関数でサポートされています。私はそれが、詳細ではなかったとして、あなたは何に走ったエラーわからないんだけど、ここに戻って、ユーザーにメッセージをエコーし​​ますスラッシュコマンド機能の簡単な例です:

コード:

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 
} 

TIP:言及する価値一つは、検証が、それはスラックから来たのを確認するためにスラックの要求に対して実行されるということです。スラックは関数の秘密をトークンとして持ってこないので、逆のことをしたい(あなたの関数にスラックトークンを持って秘密として使う)。これを行うには、あなたのスラックトークンをつかんで、あなたの関数の "キー"パネルを開き、あなたの関数レベルの "default"キーを削除して、スラックから得たトークンを貼り付けることによってそれを再作成してください(名前は "default") 。

0

私はFabioの方法を試しましたが、うまくいきませんでしたので、私はポストを送るために新しいURLを与えなければならないと確信していました(URLのTriedバリエーションですが、メッセージ)。私はフォームデータを手動で解析するだけでした。これは毎回うまくいくようです。

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]); 

    } 
} 
関連する問題