Slack 机器人无法通过 chat.postMessage 将消息发送到受限的通用频道
Slack bot fails to send message to restricted general channel via chat.postMessage
这是我第一次尝试创建一个 slack 机器人,我遵循这个 template code 这个词,我没有做任何更改,只是在出现故障时重新混合,正确地复制粘贴了身份验证令牌,一切正常。
直到我将#general 频道限制为 Full Member
用户。
这是我在故障日志中看到的错误。
PostMessage Error: restricted_action
除了 bot
之外,我还需要设置其他范围吗?
这是工作区的用户权限,我是这个工作区的所有者。
代码如下:
const postAnnouncementToChannel = (user, announcement) => {
const { title, details, channel } = announcement;
let announcementData = {
token: process.env.SLACK_ACCESS_TOKEN,
channel: channel,
text: `:loudspeaker: Announcement from: <@${user}>`,
attachments: JSON.stringify([
{
title: title,
text: details,
footer: 'DM me to make announcements.'
}
])
};
send(announcementData, user);
}
const send = async(data) => {
data.as_user = true; // send DM as a bot, not Slackbot
const result = await axios.post(`${apiUrl}/chat.postMessage`, qs.stringify(data))
try {
if(result.data.error) console.log(`PostMessage Error: ${result.data.error}`);
} catch(err) {
console.log(err);
}
}
正在通过
进行测试
https://api.slack.com/methods/chat.postMessage/test
使用 bot-token 表示
{
"ok": false,
"error": "restricted_action"
}
使用 xoxp-token 对此进行测试得到:-
{
"ok": false,
"error": "missing_scope",
"needed": "chat:write:user",
"provided": "identify,bot"
}
没有。您没有遗漏任何范围。只是您用来授权您的应用程序的用户无法 post 进入通用频道。显然,管理员限制了谁可以 post 在该频道中发消息,例如仅限管理员。
要么使用对该频道具有 posting 权限的用户来验证您的应用,要么切换到其他频道进行测试。
机器人不是正式成员,所以我不得不使用用户令牌
xoxp-token
到post到chat.postmessage,以及
as_user:false
并且必须添加一个 missing_scope 即
chat:write:user
然后我就可以正常工作了。
感谢@girliemac 在这方面的帮助。
https://github.com/slackapi/template-announcement-approvals/issues/6
谢谢
这是我第一次尝试创建一个 slack 机器人,我遵循这个 template code 这个词,我没有做任何更改,只是在出现故障时重新混合,正确地复制粘贴了身份验证令牌,一切正常。
直到我将#general 频道限制为 Full Member
用户。
这是我在故障日志中看到的错误。
PostMessage Error: restricted_action
除了 bot
之外,我还需要设置其他范围吗?
这是工作区的用户权限,我是这个工作区的所有者。
代码如下:
const postAnnouncementToChannel = (user, announcement) => {
const { title, details, channel } = announcement;
let announcementData = {
token: process.env.SLACK_ACCESS_TOKEN,
channel: channel,
text: `:loudspeaker: Announcement from: <@${user}>`,
attachments: JSON.stringify([
{
title: title,
text: details,
footer: 'DM me to make announcements.'
}
])
};
send(announcementData, user);
}
const send = async(data) => {
data.as_user = true; // send DM as a bot, not Slackbot
const result = await axios.post(`${apiUrl}/chat.postMessage`, qs.stringify(data))
try {
if(result.data.error) console.log(`PostMessage Error: ${result.data.error}`);
} catch(err) {
console.log(err);
}
}
正在通过
进行测试https://api.slack.com/methods/chat.postMessage/test 使用 bot-token 表示
{
"ok": false,
"error": "restricted_action"
}
使用 xoxp-token 对此进行测试得到:-
{
"ok": false,
"error": "missing_scope",
"needed": "chat:write:user",
"provided": "identify,bot"
}
没有。您没有遗漏任何范围。只是您用来授权您的应用程序的用户无法 post 进入通用频道。显然,管理员限制了谁可以 post 在该频道中发消息,例如仅限管理员。
要么使用对该频道具有 posting 权限的用户来验证您的应用,要么切换到其他频道进行测试。
机器人不是正式成员,所以我不得不使用用户令牌
xoxp-token
到post到chat.postmessage,以及
as_user:false
并且必须添加一个 missing_scope 即
chat:write:user
然后我就可以正常工作了。 感谢@girliemac 在这方面的帮助。
https://github.com/slackapi/template-announcement-approvals/issues/6
谢谢