給企業微信加個羣機器人

如今不少企業在使用企業微信或釘釘進行工做交流,咱們能夠在羣裏添加一個自定義羣機器人,定時發送一些提醒或諮詢信息,它能夠做爲一個小組手,也爲工做增長一點樂趣。javascript

羣機器人

下面是企業微信和釘釘的羣機器人文檔:java

企業微信羣機器人文檔node

釘釘羣機器人文檔ios

它們的功能和用法基本是一致的,本文將以企業微信爲例進行講解。web

咱們在羣裏添加一個機器人後,能夠獲取到這個機器人的 Webhook:axios

經過向這個地址發起 POST 請求,就能夠實現機器人在羣裏發送消息。c#

羣機器人是要在羣裏才能添加的,但這裏有個小技巧,咱們能夠先拉一個羣而後把別人都踢掉,這樣就變成本身一我的的羣了。這樣方便咱們測試,也能夠建立一個私人的小組手。api

Hello World

萬物源於 Hello World,羣機器人也不例外。其實就是發起一個 POST 請求而已,用什麼開發語言看我的愛好了。bash

我這裏以 node.js 爲例,添加了請求庫 axios 的依賴,代碼以下:服務器

const axios = require('axios')

axios.post('https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx', {
        "msgtype": "text",
        "text": {
            "content": "Hello World"
        }
    })
    .then(response => {
        console.log(response.data);
    })
    .catch(error => {
        console.log(error)
    })
複製代碼

不出意外的話,運行這段代碼,就能在羣裏看到機器人發的消息了:

知乎日報

肯定能夠發送成功以後,咱們就能夠開發更多的玩法了。好比經過調用一些開放接口,獲取到數據後轉發到羣裏。

這裏以知乎日報爲例,代碼以下:

const axios = require('axios')

postZhiHu()

function postZhiHu() {
    axios.get('https://news-at.zhihu.com/api/4/news/latest')
        .then(response => {
            var stories = response.data.stories
            postMessage(stories)
        })
        .catch(error => {
            console.log(error);
        })
}

function postMessage(stories) {
    var articles = []
    stories.forEach(story => {
        articles.push({
            "title": story.title,
            "url": story.url,
            "picurl": story.images[0]
        })
    })
    axios.post('https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx', {
            "msgtype": "news",
            "news": {
                "articles": articles
            }
        })
        .then(response => {
            console.log(response.data);
        })
        .catch(error => {
            console.log(error);
        })
}
複製代碼

運行上面代碼,就能收到機器人發的知乎日報了:

機器人能夠發多種樣式的消息,這裏的知乎日報是圖文類型的,具體有哪些類型你們能夠看官方文檔。

定時任務

咱們天然是但願機器人能夠自動發消息的,這時候就要用到定時任務了。

在 node.js 上能夠用 schedule 實現定時任務:

const schedule = require('node-schedule')

schedule.scheduleJob({hour: 9, minute: 30}, function(){
    postZhiHu()
})
複製代碼

上面代碼可讓機器人在天天上午九點半的時候,發送一條知乎日報的消息。

但爲了保證天天都能收到消息,就須要計算機一直運行這個定時任務,關機或待機的時候就收不到消息了。你能夠把任務運行在服務器上,或者是用下面教你們的方法。

雲函數

騰訊雲提供的雲函數服務,可讓咱們在指定條件下運行代碼,特別適合咱們的羣機器人使用,提供的免費額度對羣機器人來講是綽綽有餘的。雲函數的具體使用方法,你們能夠看官方文檔:

雲函數文檔

下面給你們簡單講一下用雲函數實現羣機器人。

依賴配置

咱們依舊使用 node.js 做爲運行環境。咱們可使用模板建立雲函數,但若是是添加了第三方依賴,在新建雲函數時須要把 node_modules 文件夾一塊兒打包上傳。

在新建雲函數的時候,提交方法選擇「本地上傳zip包」:

而後把 index.js 文件和 node_modules 文件夾打包成 zip 上傳:

這樣就能愉快的在雲函數裏使用第三方依賴了。

函數代碼

main_handler 是雲函數的執行入口,咱們對上面知乎日報的代碼作一點小小的改造,把下面代碼添加到雲函數的 index.js 中:

const axios = require('axios')

exports.main_handler = (event, context, callback) => {
    axios.get('https://news-at.zhihu.com/api/4/news/latest')
        .then(response => {
            stories = response.data.stories
            postMessage(stories)
        })
        .catch(error => {
            console.log(error);
        })
}

function postMessage(stories) {
    var articles = []
    stories.forEach(story => {
        articles.push({
            "title": story.title,
            "url": story.url,
            "picurl": story.images[0]
        })
    })
    axios.post('https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx', {
            "msgtype": "news",
            "news": {
                "articles": articles
            }
        })
        .then(response => {
            console.log(response.data);
        })
        .catch(error => {
            console.log(error);
        })
}
複製代碼

點擊下面的保存後,再點擊測試,就能看機器人的知乎日報消息了,跟在本地執行是同樣的效果。

觸發方式

在雲函數裏添加觸發方式,可讓雲函數在指定條件下自動執行。

咱們添加一個觸發方式,使用定時觸發。好比我想在週一到週五天天的上午九點半發送消息,就能夠這樣設置:

關於 Cron 表達式,具體用法你們能夠參考文檔:

定時觸發器文檔

更多玩法?

到這裏,咱們基本就能夠玩轉企業微信和釘釘的羣機器人功能了。除了上面說的知乎日報,咱們還能夠給機器人添加天氣、新聞、吃飯提醒、會議提醒等消息。

不知道你們還能想到什麼有趣的功能,歡迎留言討論。

相關文章
相關標籤/搜索