2017-04-14 17 views
0

私は現在、ソフトウェアチームのために非常に特化した機能を作成しようとしており、スラックイベントサブスクリプションを使って素晴らしい解決策を考えています。問題は、私が後になっているイベント情報を取得する際に問題が発生していることです。これまでのところ、WCFサービスを呼び出すために余裕を設定することができましたが、後の情報を含む 'イベント'パラメータは常にヌル。ここでSlackイベントのサブスクリプション

は、私がこれまで持っているものです。

[ServiceContract] 
public interface ISlackTrelloService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", UriTemplate = "SlackPost", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)] 
    string SlackPost(string type, string token, string challenge, string team_id, SlackEvent slackEvent); 
} 

具体的な実装:

public class SlackTrelloService : ISlackTrelloService 
{ 
    public string SlackPost(string type, string token, string challenge, string team_id, SlackEvent slackEvent) 
    { 
     return challenge; 
    } 
} 

SlackEventクラス:

[JsonObject(Id = "event", Description = "event", Title = "event")] 
public class SlackEvent 
{ 
    [JsonProperty(PropertyName = "type")] 
    public string Type { get; set; } 

    [JsonProperty(PropertyName = "event_ts")] 
    public string EventTimestamp { get; set; } 

    [JsonProperty(PropertyName = "user")] 
    public string User { get; set; } 

    [JsonProperty(PropertyName = "ts")] 
    public string Timestamp { get; set; } 

    [JsonProperty(PropertyName = "item")] 
    public string Item { get; set; } 
} 

、SlackEventオブジェクトには問題が少しあります私はそれがによるとスラックによって送信された情報を格納したいのでドキュメント。 (

最初は、パラメータ名が正確には一致しなかったと思っていましたが、@event(イベントはC#のキーワードなので)を使用してもdidn 「tは私が間違ってNewtonsoft JSONライブラリを使用していますかはわからない、または私が行方不明です何か他のものがある場合に動作するようには思え

EDIT:。 新しい方法をデータをキャプチャするために正しい形式で

string SlackPost(string token, string team_id, string api_app_id, SlackEvent slackEvent, string type, string[] authed_users, string event_id, string event_time); 

Slackイベントの構造:

[JsonObject("event")] 
public class Event 
{ 
    [JsonProperty(PropertyName = "type")] 
    public string Type { get; set; } 

    [JsonProperty(PropertyName = "channel")] 
    public string Channel { get; set; } 

    [JsonProperty(PropertyName = "user")] 
    public string User { get; set; } 

    [JsonProperty(PropertyName = "text")] 
    public string Text { get; set; } 

    [JsonProperty(PropertyName = "ts")] 
    public string TimeStamp { get; set; } 
} 

答えて

0

C#は少し錆びていますが、あなたのSlackTrelloServiceクラスの実装が不完全であるかのようにわかります。

スラックは2つの異なるイベント要求を送信します。検証ハンドシェイクと実際のイベントです。あなたのクラスの継ぎ目は、私が現在実装されている方法ではうまくいかないと思う、1つのクラスで両方のタイプをカバーすることを目指しています。

確認ハンドシェイクは、イベント登録時に1回のみ使用され、イベント情報は含まれません。

{ 
    "token": "Jhj5dZrVaK7ZwHHjRyZWjbDl", 
    "challenge": "3eZbrw1aBm2rZgRNFdxV2595E9CY3gmdALWMmHkvFXO7tYXAYM8P", 
    "type": "url_verification" 
} 

正常にイベントを購読できるようにするには、確認ハンドシェイクに正しく返信する必要があります。あなたはそれがchallenge性質を持っていない参照が、その代わりに他の多くのように(再び公式ドキュメントから)

{ 
     "token": "z26uFbvR1xHJEdHE1OQiO6t8", 
     "team_id": "T061EG9RZ", 
     "api_app_id": "A0FFV41KK", 
     "event": { 
       "type": "reaction_added", 
       "user": "U061F1EUR", 
       "item": { 
         "type": "message", 
         "channel": "C061EG9SL", 
         "ts": "1464196127.000002" 
       }, 
       "reaction": "slightly_smiling_face" 
     }, 
     "event_ts": "1465244570.336841", 
     "type": "event_callback", 
     "authed_users": [ 
       "U061F7AUR" 
     ] 
} 

実際のイベントには、次のようになり、後に送信します。

また、実際のイベント情報ではなく、クラス内でchallengeだけを返すようにseamを設定します。だからここ

は私の提案です:

  1. あなたが正常にスラックアプリ内のイベントをサブスクライブしていることを確認します。そうでない場合は、イベントを含まない確認ハンドシェイクがすべて表示されます。

  2. は、個別の実装は、検証握手に対処するために作成し、イベントが

+0

私のクラスは非常に不完全であると私は、しかし...(私はメソッドの情報を受け入れるために別の方法を必要とする)まさにその考えを要求しますイベントリクエストを実際にトリガーする方法についての情報は見つけられません。つまり、スラックに別のメソッドを呼び出す方法を教えてください。 現在呼び出されているメソッドは動作しています。なぜなら、Slackに設定オプションがあり、これにより、検証用の特定のURLを指定できるからです。 – spuriousGeek

+0

ok、cool。私たちは正しい道にいると思う。スラックは、両方のリクエストタイプを、設定ウィンドウで指定したものと同じURLに送信します。確認ハンドシェイクが完了すると(設定ウィンドウに表示されます)、登録したイベントが発生すると、イベントリクエストを受け取ります。私は[メッセージ](https://api.slack.com/events/message)を購読して、チャンネルでsthをポーズしてトリガーすることを推奨します。 –

+0

元の投稿を編集して、発生したイベントデータをキャプチャするために行った変更を反映しました。私は今、イベント情報(私が実際にやっているビット!)を除いて、すべてのデータを正しく受信しています。私は、イベントオブジェクトをキャプチャしようとするためにNewtonsoft JSONライブラリを使用していますが、おそらくslackEventが常にnullであるために何かを誤解しています。正確な「イベント」にマップする必要があるかもしれませんが、キーワードであるため、作成したデータ構造のID、つまり[JsonObject( "event")]を設定しようとしました。 – spuriousGeek

関連する問題