【问题标题】:Slack webhook html tableSlack webhook html表
【发布时间】:2016-09-02 00:20:46
【问题描述】:

我有一个 HTML 表格,我正试图通过 webhook 发布到 Slack。

有没有办法将 HTML 表格发布到 Slack?

这是 HTML 代码:

<!DOCTYPE html>
<html>
   <head>
      <title>HTML Tables</title>
   </head>
   <body>
      <table border="1">
         <tr>
            <td>Row 1, Column 1</td>
            <td>Row 1, Column 2</td>
         </tr>
         <tr>
            <td>Row 2, Column 1</td>
            <td>Row 2, Column 2</td>
         </tr>
      </table>
   </body>
</html>

【问题讨论】:

    标签: webhooks slack-api slack


    【解决方案1】:

    我已经打开了一张 Slack 支持的票,询问 Slack 的 Incoming Webhook 消息是否支持任何形式的表格(HTML 或 Markdown)。

    官方的回答是Slack 消息不支持表格

    他们建议生成一个表格并将其作为图像发布。

    他们还表示会将其添加到他们的待办事项中。

    【讨论】:

    • 谢谢。我最终向 slack 频道发送电子邮件以获取格式化表格。
    • 我想在这里重新开启相同的讨论。后端渲染表的最佳方法是什么? @PunterVicky 你找到可靠的解决方案了吗?
    • @cmertayak 我最近没试过。但是当我发布这个问题时,我已经发送了一封带有格式化 html 的电子邮件,因为我没有找到可靠的解决方案
    • 将表格作为图像发布是一个糟糕的解决方案。它们妨碍辅助技术(例如,盲人用户将无法阅读它们)并且无法搜索。我希望 Slack 只支持 Markdown 格式,就像它已经部分支持的那样,并且像许多其他在线工具一样,包括 GitHub 和 StackOverflow。
    • 这很尴尬
    【解决方案2】:

    不,我不相信有任何方法可以在 Slack 消息中绘制表格。

    以下是格式化 Slack 消息的其他可用选项:https://api.slack.com/docs/formatting

    【讨论】:

      【解决方案3】:

      您现在可以使用“字段”layout block 在 slack 中创建简单的两列表。

      你可以做两列表格:

      [
         {
              "type": "section",
              "fields": [
                  {
                      "type": "mrkdwn",
                      "text": "*Name*"
                  },
                  {
                      "type": "mrkdwn",
                      "text": "*Email*"
                  },
                  {
                      "type": "plain_text",
                      "text": "Jeff Henderson",
                      "emoji": true
                  },
                  {
                      "type": "mrkdwn",
                      "text": "jh@geemail.com"
                  },
                  {
                      "type": "plain_text",
                      "text": "Anne Polin",
                      "emoji": true
                  },
                  {
                      "type": "mrkdwn",
                      "text": "ap@geemail.com"
                  }
      
              ]
          }
      ]
      

      给你:

      或者去字段样式:

      [
          {
              "type": "section",
              "fields": [
                  {
                      "type": "plain_text",
                      "text": "Name",
                      "emoji": true
                  },
                  {
                      "type": "mrkdwn",
                      "text": "*Jeff Henderson*"
                  },
                  {
                      "type": "plain_text",
                      "text": "Email",
                      "emoji": true
                  },
                  {
                      "type": "mrkdwn",
                      "text": "jh@geemail.com"
                  },
                  {
                      "type": "plain_text",
                      "text": "Mobile Phone",
                      "emoji": true
                  },
                  {
                      "type": "mrkdwn",
                      "text": "0451000000"
                  },
                  {
                      "type": "plain_text",
                      "text": "Work Phone",
                      "emoji": true
                  },
                  {
                      "type": "mrkdwn",
                      "text": "94550000"
                  }
      
              ]
          }
      ]
      

      将产生:

      【讨论】:

      • 谢谢!!这有帮助
      • 很高兴它对你有用!
      • 这有一个不幸的限制,即在 fields 数组中只允许 10 个元素。刚刚学到了很多东西,但这里也这么说:api.slack.com/reference/messaging/blocks
      • 是的,这是正确的,值得指出。唯一的办法是“分页”成多条消息。
      • 这有帮助,但我遇到了fields 的问题,因为它最多允许 10 个元素
      【解决方案4】:

      不是专门的 html 表格,但您可以使用 console.table 之类的包将表格的数据打印到字符串变量中。然后使用triple backticks 将您的表格添加到松弛消息的文本字段中。例如:

      const cTable = require('console.table');
      const table = cTable.getTable([
        {
          name: 'foo',
          age: 10
        }, {
          name: 'bar',
          age: 20
        }
      ]);
      

      然后作为松弛消息附件的一部分:

      const attachmentList = {
              "title": "YOUR TITLE",
              "text": 'HERE IS YOUR TABLE: : \n ```'+table+'```',
          }
      

      【讨论】:

      • 不错。我喜欢这个解决方案。
      【解决方案5】:

      不幸的是,表格似乎是 Slack 目前不支持的 Markdown 标准。

      一种粗略的解决方法是在文本块中使用box-drawing characters(前后分别跟三个反引号/反引号,即 ``,在单独的行上)。

      我偶尔会使用tablesgenerator.com 即时生成它们。

      ╔══════╤══════╤══════════╗
      ║ Dog  │ Cat  │ Bird     ║
      ╠══════╪══════╪══════════╣
      ║ Woof │ Meow │ Tweet    ║
      ╟──────┼──────┼──────────╢
      ║ Fur  │ Fur  │ Feathers ║
      ╚══════╧══════╧══════════╝
      

      它们当然不漂亮,但与 Slack 明显推荐的粘贴图像不同,它们的内容可以搜索,并且至少对我的一些同事来说,在某种程度上可以使用辅助技术。

      【讨论】:

      • tablesgenerator.com 安全吗?你知道他们是否将数据存储在他们的服务器上吗?
      • @Borderless.Nomad:我不知道;我从来没有将它用于任何敏感到让我担心的事情。不过,一些编辑器也有这方面的功能,例如vim 的vim.org/scripts/script.php?script_id=40 插件。不过,我没有使用过那个插件,因为每当 tablesgenerator.com 没有产生我想要的输出时,我总是手动复制和粘贴相关的方框图字符。所以如果是一次性的任务,也许你也可以这样做。
      【解决方案6】:

      这是此处给出的不同答案的混合。我也只能建议发送一个格式化的字符串,因为它支持两列以上。

      然而,问题是 Slack 并不像代码通常那样给每个字符提供相同数量的空间。这意味着行将无法正确对齐。因此,我建议使用需要记号(```)的代码块。

      使用格式化字符串的 Python 示例:

      monthly_numbers_str = f"```"
      monthly_numbers_str += f"{"Month".ljust(7)}{"Users".ljust(7)}\n"
      
      monthly_numbers_str += f"{"Jan".ljust(7)}{"15".ljust(7)}\n"
      monthly_numbers_str += f"{"Feb".ljust(7)}{"19".ljust(7)}\n"
      monthly_numbers_str += f"{"Mar".ljust(7)}{"30".ljust(7)}\n"
      monthly_numbers_str += f"```"
      

      输出(作为代码):

      Month  Users
      Jan    15
      Feb    19
      Mar    30
      

      【讨论】:

        【解决方案7】:

        Slack API 将块限制为仅 10 个元素,但您可以做的是添加一个带有中断的长文本,使其看起来像一张表格。这是一个例子

        [
                            {
                                "type": "section",
                                "text": {
                                    "text": "Conference Standings:",
                                    "type": "mrkdwn"
                                },
                                "fields": [
                                    {
                                        "type": "mrkdwn",
                                        "text": "*Team*"
                                    },
                                    {
                                        "type": "mrkdwn",
                                        "text": "*W-L*"
                                    },
                                    {
                                        "type": "plain_text",
                                        "text": "Team1\nTeam2\nTeam3\nTeam4\nTeam5\n"
                                    },
                                    {
                                        "type": "plain_text",
                                        "text": "1\n2\n3\n4\n5\n"
                                    }
                                ]
                            }
                        ]
        

        这是结果

        【讨论】:

        • 如果您更改屏幕尺寸,这将无济于事。
        • 这可行,但不会超过 2000 个字符
        【解决方案8】:

        我开始在我的 slackbot 中使用老式的控制台应用程序表。

        在此处查看示例:https://github.com/Robert-McGinley/TableParser

        只需将 ``` 3 个刻度线内的原始文本发送到 SlackAPI

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-11-03
          • 1970-01-01
          • 1970-01-01
          • 2018-10-05
          • 2019-09-17
          • 1970-01-01
          • 2018-04-16
          相关资源
          最近更新 更多