如何将个人资料照片和发布到Slack的频道

时间:2019-07-17 05:50:42

标签: javascript slack slack-api slack-commands

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

我尝试了users.profile.get API,并且能够得到一些JSON响应,但不清楚将图像发布到Channel上。

已收到回复:

{
    "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,但不确定如何传递content参数。

以下是用于向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

1 个答案:

答案 0 :(得分:1)

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

这是一种非常强大的API方法,但是在您的情况下,由于配置文件映像已托管在Slack云中,因此可能是不必要的。

相反,我建议仅将图像URL包含在普通邮件中。由于这些网址是公开的,因此可以正常工作。

JSON中的示例消息,用于与chat.postMessage等一起发送:

{
    "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条消息。

我也许还会在消息中为每个用户添加一个提及,您可以通过在文本中添加<@U1234567>(具有正确的用户ID)来实现。