【问题标题】:How to get the Profile Pic & Post to Channel in Slack如何在 Slack 中获取个人资料图片并发布到频道
【发布时间】:2019-07-17 05:50:42
【问题描述】:

我正在学习 Slack,目前我正在尝试获取用户的个人资料图片并将其发布在 Slack 通用频道中。

我尝试了users.profile.get api,我能够获得一些 JSON 响应,但不清楚将图像发布到频道。

收到的回复:

{
    "ok": true,
    "profile": {
        "title": "",
        "phone": "",
        "skype": "",
        "real_name": "azeez.gaa",
        "real_name_normalized": "azeez.gaa",
        "display_name": "",
        "display_name_normalized": "",
        "fields": null,
        "status_text": "",
        "status_emoji": "",
        "status_expiration": 0,
        "avatar_hash": "gd6ada77a40d",
        "email": "XXXXXXXXXXX",
        "image_24": "https:\/\/secure.gravatar.com\/avatar\/d6ada88a40de8504c6b6068db88266ad.jpg?s=24&d=https%3A%2F%2Fslack.com%2Fdev-cdn%2Fv%2Fimg%2Favatars%2Fsmiley_blobs%2Fava_0016-24.png",
        "image_32": "https:\/\/secure.gravatar.com\/avatar\/d6ada88a40de8504c6b6068db88266ad.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F27b6e%2Fimg%2Favatars%2Fsmiley_blobs%2Fava_0016-32.png",
        "image_48": "https:\/\/secure.gravatar.com\/avatar\/d6ada88a40de8504c6b6068db88266ad.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F27b6e%2Fimg%2Favatars%2Fsmiley_blobs%2Fava_0016-48.png",
        "image_72": "https:\/\/secure.gravatar.com\/avatar\/d6ada88a40de8504c6b6068db88266ad.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F27b6e%2Fimg%2Favatars%2Fsmiley_blobs%2Fava_0016-72.png",
        "image_192": "https:\/\/secure.gravatar.com\/avatar\/d6ada88a40de8504c6b6068db88266ad.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F27b6e%2Fimg%2Favatars%2Fsmiley_blobs%2Fava_0016-192.png",
        "image_512": "https:\/\/secure.gravatar.com\/avatar\/d6ada88a40de8504c6b6068db88266ad.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F27b6e%2Fimg%2Favatars%2Fsmiley_blobs%2Fava_0016-512.png",
        "status_text_canonical": ""
    }
}

我看过files.upload api 但不知道如何传递内容参数。

以下是用于向 Slack 发送消息的代码:

for (i = 0; i < arrayList.length; i++)
{
var rm = new sn_ws.RESTMessageV2();
rm.setHttpMethod('POST');
rm.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
rm.setEndpoint('https://slack.com/api/chat.postMessage');
var bodyString = '';
bodyString += 'token=' + encodeURIComponent('TOKEN');
bodyString += '&channel=' + encodeURIComponent('CKZLVKNFM');
bodyString += '&text=' + encodeURIComponent('HBD ' + arrayList[i]);
rm.setRequestBody(bodyString);
var response1 = rm.execute();
var responsebody = response1.getBody();
var statuscode = response1.getStatusCode();
response1.getAllHeaders();}

运行以下代码后,从 SLACK 获取响应:

var rm = new sn_ws.RESTMessageV2();
     rm.setLogLevel('all');
    rm.setHttpMethod('POST');
    rm.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    rm.setEndpoint('https://slack.com/api/users.info');
    //encodeURIComponent
    var bodyString = '';
    bodyString += 'token=' + encodeURIComponent('xoxb-691106198192-692978264951-MxWbFRMgjb8xo6B9I3yHEu3i');
    bodyString += '&user=' + encodeURIComponent('UL4NBK3BK');
    //bodyString += 
    //bodyString += '&text=' + encodeURIComponent('HBD ' + arrayList[i] + ', ');
    rm.setRequestBody(bodyString);
    var response1 = rm.execute();
    var responsebody = response1.getBody();
    var statuscode = response1.getStatusCode();
    response1.getAllHeaders();
gs.info("Response: " +responsebody);
//var js = JSON.parse(responsebody);
//var jsf = JSON.stringify(responsebody);

var jss = JSON.stringify(JSON.parse(responsebody));
gs.info('Response Parsing: ' +jss);
gs.info('Response Parsing 11' +jss.user.profile.real_name);

粘贴收到的响应:

Response Parsing: 

{"ok":true,
"user":{
"id":"UL4NBK3BK","team_id":"TLB345U5N","name":"azeez.gaa","deleted":false,"color":"9f69e7","real_name":"azeez.gaa","tz":"Asia/Kolkata","tz_label":"India Standard Time","tz_offset":19800,
"profile":{"title":"","phone":"","skype":"","real_name":"azeez.gaa","real_name_normalized":"azeez.gaa","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd6ada88a40d","email":"azeez.gaa@gmail.com",
"image_24":"https://secure.gravatar.com/avatar/d6ada88a40de8504c6b6068db88266ad.jpg?s=24&d=https%3A%2F%2Fslack.com%2Fdev-cdn%2Fv%2Fimg%2Favatars%2Fsmiley_blobs%2Fava_0016-24.png",
"image_32":"https://secure.gravatar.com/avatar/d6ada88a40de8504c6b6068db88266ad.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F27b6e%2Fimg%2Favatars%2Fsmiley_blobs%2Fava_0016-32.png",
"image_48":"https://secure.gravatar.com/avatar/d6ada88a40de8504c6b6068db88266ad.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F27b6e%2Fimg%2Favatars%2Fsmiley_blobs%2Fava_0016-48.png",
"image_72":"https://secure.gravatar.com/avatar/d6ada88a40de8504c6b6068db88266ad.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F27b6e%2Fimg%2Favatars%2Fsmiley_blobs%2Fava_0016-72.png",
"image_192":"https://secure.gravatar.com/avatar/d6ada88a40de8504c6b6068db88266ad.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F27b6e%2Fimg%2Favatars%2Fsmiley_blobs%2Fava_0016-192.png",
"image_512":"https://secure.gravatar.com/avatar/d6ada88a40de8504c6b6068db88266ad.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F27b6e%2Fimg%2Favatars%2Fsmiley_blobs%2Fava_0016-512.png","status_text_canonical":"","team":"TLB345U5N"},
"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1562821220}}

我现在收到了回复,但请检查我能够发送消息但无法发布图像的编码 URI。我可以手动设置网址,现在可以看到图片了。

var rm1 = new sn_ws.RESTMessageV2();
    //rm.setLogLevel('all');
    rm1.setHttpMethod('POST');
    rm1.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    rm1.setEndpoint('https://slack.com/api/chat.postMessage');
    //encodeURIComponent
    var bodyString1 = '';
    bodyString1 += 'token=' + encodeURIComponent('xoxb-691106198192-692978264951-MxWbFRMgjb8xo6B9I3yHEu3i');
    bodyString1 += '&channel=' + encodeURIComponent('CKZLVKNFM');
bodyString1 += '&image_url=' +encodeURIComponent(grimage.user.profile.image_512);
    bodyString1 += '&text=' + encodeURIComponent('Congrats hhhh' );
    rm1.setRequestBody(bodyString1);

    var response11 = rm1.execute();
    var responsebody1 = response11.getBody();
    var statuscode1 = response11.getStatusCode();
    response11.getAllHeaders();

日志

token=xoxb-692206198192-692978264951-MxWbFRMgjb8xo6B9I3yHEu3i&channel=CKZLVKNFM&image_url=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2Fd6ada88a40de8504c6b6068db88266ad.jpg%3Fs%3D512%26d%3Dhttps%253A%252F%252Fa.slack-edge.com%252F27b6e%252Fimg%252Favatars%252Fsmiley_blobs%252Fava_0016-512.png&text=Congrats%20hhhh

【问题讨论】:

  • 如果您使用的是 node.js,我建议您查看 Slack 的官方 Slack API 库。它使 Slack API 的开发变得更容易:github.com/slackapi/node-slack-sdk
  • kk。您可以选择任何以image_ 开头的网址。它们都是相同的图像,只是分辨率不同。所以image_512 是 512x512 像素。
  • 我建议先将您从 API 获得的 JSON 转换为带有 JSON.parse 的对象。然后你可以更好地使用 URL。
  • 您在 cmets 中发布的代码具有 JSON 格式的 URL,这将不起作用。您需要先将它们解析为 JS 对象。使用 JSON.parse()
  • 刚刚更新了完整的代码和响应接收

标签: javascript slack slack-api slack-commands


【解决方案1】:

files.upload 要求您先将图像下载到本地服务器,然后再将其上传到 Slack。

这是一种非常强大的 API 方法,但在您的情况下可能没有必要,因为个人资料图片已经托管在 Slack 云上。

相反,我建议只在普通消息帖子的附件中包含图像 URL。由于这些 URL 是公开的,因此它们可以正常工作。

使用chat.postMessage 等发送的 JSON 格式的示例消息:

{
    "channel": "test",
    "attachments":
    [
        {
            "text": "Profile pic",
            "image_url": "https://secure.gravatar.com/avatar/d6ada88a40de8504c6b6068db88266ad.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F27b6e%2Fimg%2Favatars%2Fsmiley_blobs%2Fava_0016-512.png"
        }

    ]
}

如果您想知道示例中 URL 中的额外反冲。该字符串是 JSON 编码的,需要先解码(我为 URL 做了解码)。

以下是有关如何向频道发送带有个人资料图片的用户的消息的概述:

  1. 使用他们的 Slack 用户 ID 获取您要向其发送消息的用户列表(如果您没有 Slack 用户 ID,请致电 users.list 并根据电子邮件地址进行匹配)。
  2. 为每个用户致电users.get.profile 以获取他们的图片网址
  3. 向每个用户发送消息。将图片 URL 添加为附件(参见我的示例)。

确保遵守 API 调用的速率限制,例如最大限度。每秒 1 条消息。

我可能还会在消息中添加对每个用户的提及,您可以通过在文本中添加 &lt;@U1234567&gt;(使用正确的用户 ID)来做到这一点。

【讨论】:

  • 如果您仍想使用files.upload,请在此处查看有关它如何在 SO 上工作的许多问题和示例。如果您需要更多帮助,请确保将您当前的代码添加到问题中。
  • 嗨 Erik,议程是根据我们需要发送消息和照片的生日向 Slack 用户发送生日消息。目前我们有 Servicenow 到 Slack 的集成,现在我们正在从 ServiceNow 中提取 DOB,并使用 chat.postMessage api 在 Slack 中发布消息。现在的挑战是发送用户的图片。你能帮我解决这个问题吗???
  • 下面是我如何使用 javascript 发布消息://
  • 下面是我如何使用 javascript 发布消息: for (i = 0; i slack.com/api/chat.postMessage'); //encodeURIComponent var bodyString = ''; bodyString += 'token=' + encodeURIComponent('TOKEN'); bodyString += '&channel=' + encodeURIComponent('CKZLVKNFM'); bodyString += bodyString += '&text=' + encodeURIComponent('HBD' + arrayList[i] + ', '); rm.setRequestBody(bodyString);
  • 我刚刚添加到问题中。很抱歉造成混乱
猜你喜欢
  • 2013-08-19
  • 2016-12-12
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
相关资源
最近更新 更多