如何使用Dialogflow填充中的Slack块?

时间:2019-06-18 03:45:55

标签: dialogflow

我正在使用Dialog流编写一个Slack机器人。我想使用Slack blocks来响应履行请求。不幸的是,每当我在回复中加入blocks时,我的机器人就会停止工作。

这就是我现在拥有的:

return {
    status_code: 200,
    headers: { "Content-Type": "application/json" },
    body: {
        payload: {
            slack: {
                blocks: [{
                  type: "section",
                  text: {
                    type: "mrkdwn",
                    text: "_No logs matched_  :iggy-ghastly:"
                  }
                }]
            }
        }
    }
};

此代码返回带有JSON正文的HTTP 200。当我使用text负载时,效果很好:

payload: {
    slack: {
        text: "this shows up"
    }
}

Dialogflow是否支持Slack块?有网上的例子吗?如何更好地调试与Dialogflow的交互?

1 个答案:

答案 0 :(得分:0)

块工具包的有效负载将需要用于Dialogflow的响应有效负载的附件。

{
  "slack": {
    "attachments": [
      {
        "blocks":[
          {
            "type": "section",
            "text": {
              "type": "mrkdwn",
              "text": "_No logs matched_"
            }
          }
        ]
      }
    ]
  }
}
  • 如果您不需要像Block Kit这样的精美UI,并且对附件格式的响应没问题,请查看slack attachements可以做什么。
    您可以通过在对话框流中添加响应custom payload来进行测试

  • 如果要使用Block Kit而不是附件格式。您可以使用空响应来响应履行请求。然后使用slack API chat.postMessage methods将消息直接从服务器发布到散件套件格式的备用邮件中。

const rp = require('request-promise');

let postOptions = {
    uri: 'https://slack.com/api/chat.postMessage',
    method: 'POST',
    headers: {
        'Content-type': 'application/json',
        'Authorization': `Bearer ${YOUR_BOT_TOKEN}`,
    },
    json: {
        //Watch out dialogflow has different fulfillment request body 
        depends on if the user typed or clicked buttons

        "channel": req.OriginalRequest.data.event.channel,
        "blocks": [
            {
                "type": "section",
                "text": {
                    "type": "mrkdwn",
                    "text": "_No logs matched_"
                }
            }
        ]
    }
}
rp(postOptions, (error, response, body) => {
    if (error) {
        console.log(error)
    }
})

希望以上信息对您有所帮助。