Slack API提供了与工作空间互动的各种方法,为您提供了很多选择。
要创建一个Slack应用程序,请按照以下步骤:
- 访问https://api.slack.com/apps开始创建您的应用。
- 命名您的应用程序并选择工作区。
- 创建应用程序后,您将被带到应用程序的环境。
- 在左侧菜单中,选择“基本信息”以访问您的应用程序凭据。 就是这样!你们都准备开始构建您的Slack应用程序。
要获得发布消息的机器人令牌,请按照以下步骤:
- 单击左侧的“ OAuth&Permissions”选项
- 向上滚动到OAuth&Permissions页面的顶部,然后单击“安装应用程序到工作区”按钮。
- 单击“允许”,然后返回页面oauth&permissions菜单向下滚动以滚动示波器并添加范围。
- 要生成一个机器人令牌,您需要指定机器人范围。对于我们的实现,选择以下范围:“ chat:写”,“用户:读”,“频道:读”,和“命令”。
添加bot示波器后会自动生成bot令牌。
项目:
使用Firebase设置(React-Firebase)或您的愿望创建任何项目
将firebase配置到项目中,然后添加firebase云功能设置。
在终端中,运行命令npm i @slack/web-api
以安装软件包。此软件包允许您与Slack Workspace进行交互并执行诸如发送消息,触发模式之类的操作!
const { WebClient } = require("@slack/web-api");
const botToken="xoxb-565644"//paste your bot token
const web = new WebClient(botToken);
已配置的Web,现在我们可以使用它来发布消息,触发模式,获取用户/频道等。
获取Slack Workspace的所有频道:
exports.channelsList = functions.https.onCall(async (data, context) => {
try {
const response = await web.conversations.list();
const channels = response.channels;
return channels; //return channel list & info
} catch (error) {
console.error("Error:", error);
return error.message;
}
});
运行firebase emulators:start --only functions
获取本地URL,您可以在Postman上运行本地URL并检查响应
不要忘记在体内添加{data:{}}
获取Slack Workspace的所有用户:
exports.usersList = functions.https.onCall(async (data, context) => {
try {
const response = await web.users.list();
const users = response.members;
return users;//returns users of workspace with user related info
} catch (error) {
console.error("Error:", error);
}
});
向您的Slack Workspace频道发布消息:
exports.sendMessageToChannel = functions.https.onCall(
async (data, context) => {
try {
//we can get channelid in two ways
//1. go to slack click on channel now on top click on channel name now scroll down you can see id
//2.run the above channelsList endpoint copy the channelid from response
await web.chat.postMessage({
channel: channelId, //paste channel id
text: message,
});
return "Message sent successfully.";
} catch (error) {
console.error("Error:", error);
return "Error while posting message to channel";
}
}
);
您可以通过映射获得的列表
向所有用户和频道发布消息要触发使用“ Slack上的快捷方式”的模态,请按照以下步骤:
请记住需要创建HTTPS终点URL
这触发了Slack上任何互动的请求有效载荷! 在这里,我们利用Firebase云功能部署和检索已部署的URL。
- 从左侧菜单中,选择“互动和快捷方式”并启用互动性。
- 在“快捷方式”下,单击“创建新快捷方式”,然后填写所需的详细信息以创建全局快捷方式。完成后,创建快捷方式。
- 在任何Slack通道中,导航到消息输入区域并输入斜线('/')字符。现在,您将看到您创建的快捷方式的名称。
- 要接收包含有效载荷的请求,请在“互动请求URL”下添加您已部署的端点的URL。
- 通过完成这些步骤,您可以启用交互性,创建全局快捷方式并配置端点URL以接收有效载荷的请求。
- 在这里,我们正在创建一个端点来触发模态并从模态回响应
设计了一种模态,该模态显示了两个带有评分选择选项的会议
从用户中获取选定的会议评级,然后将消息发布到频道
exports.handleMeetingsShortcut = functions.https.onRequest(async (req, res) => {
try {
const payload = JSON.parse(req.body.payload);
const trigger_id = payload?.trigger_id;
const view = { //to design custom blocks to show on modal
type: "modal",
callback_id: "meetings_rating",//created shortcut id
title: {
type: "plain_text",
text: "Modal Title",
},
blocks: [
{
type: "section",
text: {
type: "mrkdwn",
text: "*Meeting 1*\nTopic: Project Updates\nTime: 10:00 AM - 11:00 AM",
},
accessory: {
type: "static_select",
action_id: "meeting1_rating_select",
placeholder: {
type: "plain_text",
text: "Rate this meeting",
},
options: [
{
text: {
type: "plain_text",
text: "⭐️⭐️⭐️⭐️⭐️",
},
value: "5",
},
{
text: {
type: "plain_text",
text: "⭐️⭐️⭐️⭐️",
},
value: "4",
},
{
text: {
type: "plain_text",
text: "⭐️⭐️⭐️",
},
value: "3",
},
{
text: {
type: "plain_text",
text: "⭐️⭐️",
},
value: "2",
},
{
text: {
type: "plain_text",
text: "⭐️",
},
value: "1",
},
],
},
},
{
type: "section",
text: {
type: "mrkdwn",
text: "*Meeting 2*\nTopic: Sales Strategy\nTime: 2:00 PM - 3:00 PM",
},
accessory: {
type: "static_select",
action_id: "meeting2_rating_select",
placeholder: {
type: "plain_text",
text: "Rate this meeting",
},
options: [
{
text: {
type: "plain_text",
text: "⭐️⭐️⭐️⭐️⭐️",
},
value: "5",
},
{
text: {
type: "plain_text",
text: "⭐️⭐️⭐️⭐️",
},
value: "4",
},
{
text: {
type: "plain_text",
text: "⭐️⭐️⭐️",
},
value: "3",
},
{
text: {
type: "plain_text",
text: "⭐️⭐️",
},
value: "2",
},
{
text: {
type: "plain_text",
text: "⭐️",
},
value: "1",
},
],
},
},
],
submit: {
type: "plain_text",
text: "Submit",
},
};
if (payload.type === "shortcut") {//triggered shortcut
const response = await web.views.open({
trigger_id,
view,
});
if (response.ok) {
res.sendStatus(200);
} else {
throw new Error(response.error || "Failed to open modal.");
}
} else if (
//on click submit aftr selecting rating
payload.type === "view_submission" &&
payload.view.callback_id === "meetings_rating"
) {
const user = payload.user.username;
const values = payload.view.state.values;
let meeting1Rating, meeting2Rating;
//get the selected ratings, based on action_id
for (const key of Object.keys(values)) {
const obj = values[key];
if (obj && obj.meeting1_rating_select) {
meeting1Rating = obj.meeting1_rating_select.selected_option.value;
break;
}
}
for (const key of Object.keys(values)) {
const obj = values[key];
if (obj && obj.meeting2_rating_select) {
meeting2Rating = obj.meeting2_rating_select.selected_option.value;
break;
}
}
const messageText = `*Meeting Ratings*\n\n${user} has rated the meetings:\n\nMeeting 1: ${meeting1Rating}\nMeeting 2: ${meeting2Rating}`;
//post message to channel with username & selected ratings
const result = await web.chat.postMessage({
channel: "C05788W6A",
text: messageText,
});
if (result.ok) {
res.send();
} else {
console.error(result.error || "Failed to post message to channel.");
res.status(500).send("Failed to post message to channel.");
}
} else {
console.error("Failed load payload");
res.sendStatus(200);
}
} catch (err) {
console.error(err, "error");
res.sendStatus(500);
}
});
- 使用
firebase deploy function:handleMeetingsShortcut
部署功能3 - 检查您的firebase项目上已部署的URL
- 粘贴URL在互动性的url 下
在这里有效载荷保留一切
- 如果触发快捷方式,它将返回有效载荷中的类型快捷方式
- 如果您单击“模态触发器有效载荷”,则使用类型 查看提交。 此外,您可以利用块来创建自定义设计并增强Slack应用程序中的用户体验。
文档:
https://api.slack.com/block-kit/interactivity-设计区块
https://firebase.google.com/docs/functions/get-started?gen=1st-设置Firebase
结论:
作为初学者,试图探索Slack API。我们如何通过“兴奋我”与Slack互动.....
Slack API文档提供了有关
的更多信息
将消息发布到Slack作为文本,阻止和触发模式。