Как использовать блоки Slack из полного заполнения Dialogflow? - PullRequest
0 голосов
/ 18 июня 2019

Я пишу бот 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:"
                  }
                }]
            }
        }
    }
};

Этот код возвращает HTTP 200 с телом JSON. Он отлично работает, когда я использую text полезную нагрузку:

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

Поддерживает ли Dialogflow блоки Slack? Есть ли пример этого онлайн? Как мне лучше отладить мои взаимодействия с Dialogflow?

1 Ответ

0 голосов
/ 27 июня 2019

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

{
  "slack": {
    "attachments": [
      {
        "blocks":[
          {
            "type": "section",
            "text": {
              "type": "mrkdwn",
              "text": "_No logs matched_"
            }
          }
        ]
      }
    ]
  }
}
  • Если вам не нужен необычный пользовательский интерфейс, такой как Block Kit, и вы согласны с ответом в формате вложений, проверьте, что может слабые вложения .
    Вы можете проверить это, добавив ответ Пользовательская полезная нагрузка в диалоговом потоке

  • Если вы хотите использовать Block Kit, а не в формате вложения. Вы можете ответить на запрос выполнения пустым ответом. Затем используйте slack API методы chat.postMessage , чтобы отправить сообщение непосредственно с сервера на slack в формате набора блоков.

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)
    }
})

Надеюсь, приведенная выше информация будет полезной и отвечу на ваши вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...