我目前正在尝试为我的软件团队创建一些非常定制的功能,并想到使用松弛事件订阅的一个很好的解决方案。问题是,我在获取事件信息时遇到问题...到目前为止,我已设法配置slack来调用我的WCF服务,但是,包含我所依赖的信息的'event'参数始终是空。
这是我到目前为止所做的:
[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对象是有问题的代码,因为我希望它包含Slack根据this文档发送的信息。其他参数都正确填充,而不是slackEvent对象:(
起初我认为这是因为参数名称并不完全匹配,但即使使用@event(因为事件是C#中的关键字)似乎也不起作用。我不确定我是否错误地使用了Newtonsoft JSON库,或者是否还有其他我缺少的东西。
编辑: 以正确格式捕获数据的新方法
string SlackPost(string token, string team_id, string api_app_id, SlackEvent slackEvent, string type, string[] authed_users, string event_id, string event_time);
SlackEvent结构:
[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 :(得分:0)
C#有点生疏,但据我所知,你的SlackTrelloService
类实现看起来不完整。
Slack发送两个不同的事件请求:验证握手和实际事件。你的课程接缝旨在涵盖一个课程中的两种类型,我认为它不会像当前实现的那样工作。
验证握手仅在事件订阅期间使用一次,并且不包含任何事件信息。它看起来像这样:(来自官方文档)
{
"token": "Jhj5dZrVaK7ZwHHjRyZWjbDl",
"challenge": "3eZbrw1aBm2rZgRNFdxV2595E9CY3gmdALWMmHkvFXO7tYXAYM8P",
"type": "url_verification"
}
您的应用需要正确回复验证握手才能成功订阅活动。
以后发送的实际事件如下所示:(再次来自官方文档)
{
"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
属性,而是有许多其他属性。
你也接缝只返回班级中的challenge
,而不是实际的事件信息。
所以这是我的建议:
确保您已成功订阅Slack应用中的活动。如果不是您目前获得的是验证握手,则不包括该事件。
单独实施以处理验证握手和事件请求