我在slack上建立了一个斜杠命令,它试图利用slack的内置文件上传,并接受文本和媒体文件(如果存在特定关键字,则将其发布到另一个频道)。
然而,每当我得到命令的有效负载时,我只得到消息的文本部分,而忽略了图像/视频/语音备忘录。
是否有可能通过斜杠命令或slack bot获得用户上传的文件?我该怎么做呢?
我已经尝试添加范围files:read
和files:write
(连同标准commands
),并发送了一条带有上传图像或语音备忘录(通过slack录制)的消息。
在这两种情况下,我只得到命令的文本部分:
token=<TOKEN>&team_id=<TEAM_ID>&team_domain=<DOMAIN>&channel_id=<CHANNEL_ID>&channel_name=directmessage&user_id=<USER_ID>&
user_name=<USERNAME>&command=%2Fcreate&text=can+I+send+a+%23voice+%23memo&
api_app_id=<APP_ID>&is_enterprise_install=false&
response_url=https%3A%2F%2Fhooks.slack.com%2F<...>&trigger_id=<TRIGGER_ID>
我最终使用了Slack Bolt库,它支持所有新的Slack功能和事件。通过这样做,您可以访问完整的消息body
,其中还包括event
属性,您可以在其中找到files
数组。
代码示例:
const { App } = require('@slack/bolt');
const app = new App({
token: process.env.SLACK_BOT_TOKEN,
signingSecret: process.env.SLACK_SIGNING_SECRET,
socketMode: true,
appToken: process.env.SLACK_APP_TOKEN
});
// Listens to incoming messages that contain "hello"
app.message('hello', async ({ message, say, logger, body, event }) => {
// notice event.files
logger.info('Body', body, 'Files', event.files);
await say(`Hey there <@${message.user}>!`);
});
此消息将对任何包含&;hello&;的消息作出反应,记录files
数组在event
中,并以友好的消息回复。
日志记录器记录的files
数组示例(在本例中为3秒语音备忘录):
[
{
id: '<file-id>',
created: 1671452738,
timestamp: 1671452738,
name: 'audio_message.webm',
title: 'audio_message.webm',
mimetype: 'audio/webm',
filetype: 'webm',
pretty_type: 'WebM',
user: '<user-id>',
user_team: '<team-id>',
editable: false,
size: 39033,
mode: 'hosted',
is_external: false,
external_type: '',
is_public: false,
public_url_shared: false,
display_as_bot: false,
username: '',
subtype: 'slack_audio',
transcription: { status: 'processing' },
url_private: 'https://files.slack.com/files-tmb/<ids>/audio_message_audio.mp4',
url_private_download: 'https://files.slack.com/files-tmb/<ids>/download/audio_message_audio.mp4',
duration_ms: 2421,
aac: 'https://files.slack.com/files-tmb/<ids>/audio_message_audio.mp4',
audio_wave_samples: [
1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 12, 37, 47, 54, 62, 68, 79, 80, 58,
39, 30, 22, 18, 46, 82, 87, 90, 94, 100, 96, 72,
51, 76, 77, 62, 38, 47, 51, 51, 60, 68, 70, 60,
52, 42, 54, 66, 62, 61, 63, 50, 53, 55, 58, 47,
40, 36, 32, 27, 23, 16, 11, 6, 4, 4, 4, 3,
2, 2, 4, 5, 4, 3, 3, 3, 2, 2, 2, 2,
1, 1, 1, 1
],
media_display_type: 'audio',
permalink: 'https://<workplace-id>.slack.com/files/<file-id>/audio_message.webm',
permalink_public: 'https://slack-files.com/<file-id>',
has_rich_preview: false,
file_access: 'visible'
}
]
我找不到任何关于向slack bot发送文件的具体文档,希望能有所帮助。