node.js - 无法使用 slackbots (javascript) 通过 Slackbot 发送图像

标签 node.js json axios bots slack-api

我正在使用 slackbots ( https://github.com/mishk0/slack-bot-api ) 创建一个交互式机器人。 作为用户,我可以在聊天中发送消息,并让我的机器人根据我写的内容给我答案。就像我输入:!weekend 一样,我的机器人将通过获取 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 文档显示图像的 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!!

最佳答案

这个库只是将参数转发到相应的 Slack API 方法,即 chat.postMessage

要使用 Slack 发布图像,您需要在 attachment 中包含图像 URL。 (过时)或 blocks .

例如要附加带有附件的图像,您可以通过 params 添加此数组:

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

关于node.js - 无法使用 slackbots (javascript) 通过 Slackbot 发送图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60074708/

相关文章:

ios - 无法上传图片(React native,Laravel)

javascript - 如何在 JavaScript 中将字符串转换为 bigInt

javascript - Nodejs只能向所有者消息发送者发送消息

mysql - 类型错误 : Cannot read property 'query' of undefined?

json - 使用新数据启动 D3.js 数据映射

node.js - Node 服务器无法检索react axios请求头参数的值

reactjs - 在自定义 React hook 中使用 axios

css - 自动生成 web-/iconfont

ios - 如何使用 AFNetworking-2.0 执行 JSON 编码的 GET 请求?

java - 用于比较两个列表的所有对象的循环