如何在所有直接消息渠道中发布临时消息?

时间:2019-08-02 09:05:40

标签: slack slack-api

我创建了一个Slack应用程序,该应用程序在用户执行某项操作后,应发布此操作结果的短暂消息。 但是,当尝试将消息发送到不包含安装该应用程序的用户的直接消息通道中时,出现channel_not_found错误。

使用旧版工作区应用程序,此问题很容易解决,因为可以将松弛的应用程序邀请到直接消息通道,因此将获得发布到该通道的许可。但是,随着Slack强制使用仅机器人和用户令牌的新方法,解决起来似乎并不容易。该漫游器无法加入直接消息通道,因此无法获得在这些通道中发布的权限。

有没有直接解决此问题的方法?

1 个答案:

答案 0 :(得分:1)

如果您想响应操作而发布临时消息,则只需使用slack请求中的response_url并将POST请求和包含临时消息的JSON有效负载发送到此url。

有关更多信息,请参见https://api.slack.com/actions #Response to Action。

这是我在Golang中的代码(我正在使用nlopes中的slack软件包:https://godoc.org/github.com/nlopes/slack

    msg := slack.Msg{
        Attachments: []slack.Attachment{
            attach,
        },
        ResponseType: "ephemeral",
    }

    b, err := json.Marshal(msg)
    if err != nil {
        err = errors.Wrap(err, "Post failed")
        logger.LogError(err)
        return nil
    }
    reader := bytes.NewReader(b)
    _, err = http.Post(
        c.ResponseURL, // the response URL from slack request
        "application/json",
        reader,
    )