Загрузка и прикрепление изображений к личным сообщениям от ботов в Slack - PullRequest
0 голосов
/ 26 июня 2018

У меня есть служба узла, которая использует WebClient из @slack/client.

Я использую токен доступа бота для загрузки изображения с помощью метода web.files.upload API. Затем я хочу отправить загруженное изображение пользователю в виде вложения в личное сообщение (то есть канал, начинающийся с D). Я хочу, чтобы доступ к этому изображению был ограничен пользователями Slack в этой команде (так же, как когда вы делитесь документом или другим файлом).

Я попытался сделать это с ответом от функции files.upload, но, похоже, нет свойства res.file, которое дает мне URL-адрес, доступный для всех членов этой команды Slack:

conversationId = 'Dxxxxxxxx'; // ID of private channel between bot and user

web.chat
  .postMessage({
    channel: conversationId,
    text: 'Hello there',
    attachments: [
      {
        fallback: 'Required plain-text summary of the attachment.',
        color: '#36a64f',
        title: 'Slack API Documentation',
        title_link: 'https://api.slack.com/',
        text: 'Optional text that appears within the attachment',
        image_url: res.file.permalink_public,
        ts: 123456789
      }
    ]
  });

Начиная с документов , похоже, что этот файл является личным для бота, пока не будет отправлен на общедоступный канал.

Альтернативой, которую я рассмотрел, была загрузка файла в канал личных сообщений между пользователем и ботом, однако это выдает мне следующую ошибку:

{ Error: An API error occurred: invalid_channel
  code: 'slackclient_platform_error',
  data:
  { ok: false,
    error: 'invalid_channel',
    channel: '["Dxxxxxxxx"]',
    scopes: [ 'identify', 'bot:basic' ],
    acceptedScopes: [ 'files:write:user', 'post' ] } }

Нет ли способа добиться того, чего я добиваюсь?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Моя ошибка произошла из-за неправильного прочтения документов - API files.upload ожидает разделенную запятыми строку для свойства channel, и я передавал массив.

Как только я исправил это, я мог успешно загружать файлы и делиться ими с пользователем в частном порядке (идентификаторы каналов, начинающиеся с 'D') и в общедоступных каналах (идентификаторы каналов, начинающиеся с 'C').

Копирование URL-адреса изображения и вставка его в браузер привело меня к странице входа в систему, поэтому по умолчанию они являются частными для команды Slack, как я и надеялся.

0 голосов
/ 26 июня 2018

Чтобы использовать URL-адрес изображения во вложении сообщения, у этого изображения должен быть общедоступный URL-адрес, иначе он не будет работать. Загруженные файлы имеют ограничения доступа и по умолчанию не являются общедоступными (например, вам необходимо предоставить аутентификацию вместе с вашим URL).

Если вы хотите использовать это изображение во вложении, вам сначала нужно получить общедоступный URL-адрес. Тем не менее, распространение этого «в публичном канале» недостаточно. Вам нужно сделать файл общедоступным с помощью метода API files.sharedPublicUrl.

В качестве альтернативы вы можете использовать внешний сервис изображений для загрузки файла изображения и получения общедоступного URL, например, imgur имеет API для загрузки и обмена файлами изображений.

...