我使用Python 2.7和python-slackclient。我有一个像这样的附件结构:
self.msg = {
"attachments": [
{
"fallback": "%s, %s" % (self.jiraIssueObj.fields.summary, self.link),
"pretext": "Detail summary for %s" % self.jiraIssueObj,
"title": self.jiraIssueObj.fields.summary,
"title_link": self.link,
"text": self.jiraIssueObj.fields.description[0:self.maxSummary],
"color": "#7CD197",
"mrkdwn_in": ["text", "pretext", "fields"]
}
]
}
然后,
def Send(self):
if (self.msg):
slack_client.api_call("chat.postMessage", channel=self.channel, text=self.msg, as_user=True)
self.msg = None
然而,当这个帖子发布时,它只是发布明文,没有格式化:
{"附件":[{"标题":"将Grafana升级到3.0","颜色":" #7CD197 "," text":"嘿伙计们,我已经添加了JIRA maillist所以这封电子邮件 将创建一个我们可以将其排队支持的票据。\ u00a Eric如果你 我不介意只是回复这封电子邮件 信息?\ n \ n \ u00a \ n \ n \ u00a0 \ n \ n发布时间:8月8日星期四 25,2016 11:41 AM \ n"," title_link": " https://jira.jr.com/browse/ops-164"," mrkdwn_in":[" text", "借口","字段"],"借口":" ops-164"的详细摘要, "后退":"将Grafana升级到3.0, https://jira.jr.com/browse/ops-164"}]}
我做错了什么?我已尝试在attachments=self.msg
调用中执行Send()
,但在执行此操作时,我根本没有得到任何输出。
答案 0 :(得分:6)
事实证明,呼吁
svn update
apears为您添加顶层slack_client.api_call("chat.postMessage", channel=self.channel, attachments=self.msg, as_user=True)
。因此,将我的{ "attachments": ... }
更改为:
self.msg
没有这个外部self.format = [{
"fallback": "%s, %s" % (self.jiraIssueObj.fields.summary, self.link),
"pretext": "Detail summary for %s" % self.jiraIssueObj,
"title": self.jiraIssueObj.fields.summary,
"title_link": self.link,
"text": self.jiraIssueObj.fields.description[0:self.maxSummary],
#"color": "#7CD197",
"mrkdwn_in": ["text", "pretext", "fields"]
}]
包装器,api能够按预期发布消息附件。
答案 1 :(得分:1)
chat.postMessage方法有一些怪癖 - 像大多数Slack的Web API一样,它只支持application/x-www-form-urlencoded
内容类型,并且不支持JSON。更奇怪的是,attachments
参数采用URL编码的JSON数组。现在,您似乎正在向text
参数发送本机Python数组。
为了让Slack理解该结构,您首先需要将其转换为JSON字符串。您正在使用的API包装器可能会处理转换为URL编码表示的下一步。
最后,附件本身不会放在消息的text
中 - 这是一个单独的字段。在将JSON字符串定义为self.attachments
后,您需要指定更类似的内容:
slack_client.api_call("chat.postMessage", channel=self.channel, attachments=self.attachments, as_user=True)
包含附件后,text
字段将成为可选字段。