Laravel 5.7: Могу ли я программно заставить Slack не разбивать длинное сообщение на два или более? - PullRequest
0 голосов
/ 05 января 2019

Забавный случай, я написал Slack Notification, который отправляется каждый раз, когда задание cron очищает некоторые файлы.

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

public function toSlack()
{
    return (new SlackMessage)
        ->success()
        ->content(sprintf('*Garbage Collector*```%s```', $this->message));
}

Путем разделения сообщения конечный результат состоял в том, что первое слабое сообщение имело открывающий тег pre, но не имело закрывающего, в то время как второе не имело открывающего и имело закрывающий. Визуальным результатом было то, что оба сообщения не отображались в виде простого текста.

Желаемый эффект (возникает, когда содержимое не слишком длинное):

enter image description here

Поведение я считаю ошибкой, которую не знаю, как исправить (происходит когда содержимое слишком длинное):

enter image description here

Вторая часть:

enter image description here

Заглушка, которую я использую с str_replace ниже:

Garbage Collected

Environment:     {app_env}
Date:            {date}
{separator}

List of files deleted from the temporary directory:

{garbage}
{separator}
Reason:          {reason}
Space recovered: {garbage_size}

Have a nice day!

Могу ли я как-нибудь исправить это в Laravel или это зависит от мальчиков из Slack?

1 Ответ

0 голосов
/ 05 января 2019

После небольшого тестирования вот список соответствующих ограничений для создания сообщений в Slack:

  • Сообщения будут автоматически разделены:> 4.000 символов в text (без документов)
  • Сообщения будут обрезаны:> 40 000 символов в text ( Источник )
  • Вложение будет усечено:> 8.000 символов в attachments / text (без документов)

Насколько я знаю, поведение нельзя изменить и оно одинаково для всех различных способов отправки сообщения:

  • через веб-API (chat.postMessage)
  • через Incoming Webhook
  • как ответ на запрос Slack (косая черта / интерактивное сообщение)

Вот несколько идей для обхода проблемы:

  1. Разделите текст в вашем приложении и отправьте его как отдельные сообщения в Slack
  2. Создайте текст так, чтобы вырез в 4.000 всегда находился вне каких-либо тегов форматирования
  3. Загрузить весь текст в виде фрагмента текста с помощью file.upload. После этого Slack автоматически покажет предварительный просмотр текста, и пользователь может открыть его целиком, щелкнув по нему.

Я бы предложил 3. так как он более удобный для пользователя.

Также см. эту документацию для обзора всех известных ограничений текста в сообщениях Slack.

...