Не удается отправить изображение с помощью Slackbot с помощью slackbots (javascript) - PullRequest
1 голос
/ 05 февраля 2020

Я использую slackbots (https://github.com/mishk0/slack-bot-api) для создания интерактивного бота. Я могу, как пользователь, отправлять сообщения в чате, и мой бот дает мне ответ в зависимости от того, что я написал. Например, если я напечатаю:! Уик-энд, мой бот ответит, если выходные близки или нет, загрузив API.

Так работает

bot.on('message', data => {
    if (data.type !== 'message') {
        return;
    }

    handleMessage(data.text);
});

function handleMessage(message) {

    switch (message) {
        case '!weekend':
        case '!we':
            fetchWeekendData();
            break;
        case '!apero':
        case '!biere':
        case '!pastis':
            fetchAperoData();
            break;
        case '!meteo':
            fetchWeatherData();
            break;
        case '!metro':
            fetchMetroData('A');
            fetchMetroData('R');
            break;
        case '!features':
            getFeatures();
            break;
    }
}

function fetchWeekendData() {
    axios.get('https://estcequecestbientotleweekend.fr/api',
    ).then(res => {
        const weText = res.data.text;
        postToChannel(`_Bientôt le week end ?_ : *${weText}*`);
    });
}

function postToChannel(message) {
    bot.postMessageToChannel(
        'général',
        message,
        params
    )
}

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

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

function fetchWeatherData() {
    axios.get('http://api.weatherstack.com/current?access_key=myAPIkey&query=Paris&units=m',
    ).then(res => {
        const location = res.data.location.name;
        const icon = res.data.current.weather_icons;
        const temperature = res.data.current.temperature;
        const feelslike = res.data.current.feelslike;
        const humidity = res.data.current.humidity;
        postToChannel(`Météo à *${location}* : ${icon} \n>_Température_ : *${temperature}* °C _Ressenti_ : *${feelslike}* °C\n\n>_Humidité_ : *${humidity}* %`)
    });
}

Если кто-то уже использовал slack-bot-api и публиковал изображения со своим ботом, я хотел бы знать, как вы это сделали, потому что у меня заканчиваются идеи, slack api docs показывает JSON вложения для изображений, но я не знаю, как использовать его с этим пакетом.

РЕДАКТИРОВАТЬ: Хорошо, это решено, таким образом

function postToChannelWithImage() {
    bot.postMessageToChannel(
        'général',
        'yikes itis working',
        params = {
            "icon_url": "https://avatars.slack-edge.com/2020-02-04/935676215584_38623245747b942874b5_192.jpg",
            "attachments":
                [
                    {
                        "fallback": "this did not work",
                        "image_url": "https://a.slack-edge.com/80588/img/blocks/bkb_template_images/beagle.png"
                    }
                ]
        }
    )
}

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

Большое спасибо @Erik Kalkoken !!

1 Ответ

0 голосов
/ 05 февраля 2020

В этой библиотеке выполняется просто перенаправление параметров в соответствующий метод Slack API, который равен chat.postMessage.

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

, например, чтобы прикрепить изображение с вложениями, вы бы добавили этот массив через params:

{
    "attachments":
    [
        {
            "fallback": "this did not work",
            "image_url": "https://a.slack-edge.com/80588/img/blocks/bkb_template_images/beagle.png"
        }       
    ]
}
...