給企業(yè)微信加個(gè)群機(jī)器人

現(xiàn)在很多企業(yè)在使用企業(yè)微信或釘釘進(jìn)行工作交流,我們可以在群里添加一個(gè)自定義群機(jī)器人,定時(shí)發(fā)送一些提醒或咨詢信息,它可以作為一個(gè)小組手,也為工作增加一點(diǎn)樂趣。

群機(jī)器人

下面是企業(yè)微信和釘釘?shù)娜簷C(jī)器人文檔:

企業(yè)微信群機(jī)器人文檔

釘釘群機(jī)器人文檔

它們的功能和用法基本是一致的,本文將以企業(yè)微信為例進(jìn)行講解。

我們?cè)谌豪锾砑右粋€(gè)機(jī)器人后,可以獲取到這個(gè)機(jī)器人的 Webhook:

通過向這個(gè)地址發(fā)起 POST 請(qǐng)求,就可以實(shí)現(xiàn)機(jī)器人在群里發(fā)送消息。

群機(jī)器人是要在群里才能添加的,但這里有個(gè)小技巧,我們可以先拉一個(gè)群然后把別人都踢掉,這樣就變成自己一個(gè)人的群了。這樣方便我們測(cè)試,也可以創(chuàng)建一個(gè)私人的小組手。

Hello World

萬物源于 Hello World,群機(jī)器人也不例外。其實(shí)就是發(fā)起一個(gè) POST 請(qǐng)求而已,用什么開發(fā)語(yǔ)言看個(gè)人愛好了。

我這里以 node.js 為例,添加了請(qǐng)求庫(kù) 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)
    })

不出意外的話,運(yùn)行這段代碼,就能在群里看到機(jī)器人發(fā)的消息了:

知乎日?qǐng)?bào)

確定可以發(fā)送成功之后,我們就可以開發(fā)更多的玩法了。比如通過調(diào)用一些開放接口,獲取到數(shù)據(jù)后轉(zhuǎn)發(fā)到群里。

這里以知乎日?qǐng)?bào)為例,代碼如下:

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

運(yùn)行上面代碼,就能收到機(jī)器人發(fā)的知乎日?qǐng)?bào)了:

機(jī)器人可以發(fā)多種樣式的消息,這里的知乎日?qǐng)?bào)是圖文類型的,具體有哪些類型大家可以看官方文檔。

定時(shí)任務(wù)

我們自然是希望機(jī)器人可以自動(dòng)發(fā)消息的,這時(shí)候就要用到定時(shí)任務(wù)了。

在 node.js 上可以用 schedule 實(shí)現(xiàn)定時(shí)任務(wù):

const schedule = require('node-schedule')

schedule.scheduleJob({hour: 9, minute: 30}, function(){
    postZhiHu()
})

上面代碼可以讓機(jī)器人在每天上午九點(diǎn)半的時(shí)候,發(fā)送一條知乎日?qǐng)?bào)的消息。

但為了保證每天都能收到消息,就需要計(jì)算機(jī)一直運(yùn)行這個(gè)定時(shí)任務(wù),關(guān)機(jī)或待機(jī)的時(shí)候就收不到消息了。你可以把任務(wù)運(yùn)行在服務(wù)器上,或者是用下面教大家的方法。

云函數(shù)

騰訊云提供的云函數(shù)服務(wù),可以讓我們?cè)谥付l件下運(yùn)行代碼,特別適合我們的群機(jī)器人使用,提供的免費(fèi)額度對(duì)群機(jī)器人來說是綽綽有余的。云函數(shù)的具體使用方法,大家可以看官方文檔:

云函數(shù)文檔

下面給大家簡(jiǎn)單講一下用云函數(shù)實(shí)現(xiàn)群機(jī)器人。

依賴配置

我們依舊使用 node.js 作為運(yùn)行環(huán)境。我們可以使用模板創(chuàng)建云函數(shù),但如果是添加了第三方依賴,在新建云函數(shù)時(shí)需要把 node_modules 文件夾一起打包上傳。

在新建云函數(shù)的時(shí)候,提交方法選擇「本地上傳zip包」:

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

這樣就能愉快的在云函數(shù)里使用第三方依賴了。

函數(shù)代碼

main_handler 是云函數(shù)的執(zhí)行入口,我們對(duì)上面知乎日?qǐng)?bào)的代碼做一點(diǎn)小小的改造,把下面代碼添加到云函數(shù)的 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);
        })
}

點(diǎn)擊下面的保存后,再點(diǎn)擊測(cè)試,就能看機(jī)器人的知乎日?qǐng)?bào)消息了,跟在本地執(zhí)行是一樣的效果。

觸發(fā)方式

在云函數(shù)里添加觸發(fā)方式,可以讓云函數(shù)在指定條件下自動(dòng)執(zhí)行。

我們添加一個(gè)觸發(fā)方式,使用定時(shí)觸發(fā)。比如我想在周一到周五每天的上午九點(diǎn)半發(fā)送消息,就可以這樣設(shè)置:

關(guān)于 Cron 表達(dá)式,具體用法大家可以參考文檔:

定時(shí)觸發(fā)器文檔

更多玩法?

到這里,我們基本就可以玩轉(zhuǎn)企業(yè)微信和釘釘?shù)娜簷C(jī)器人功能了。除了上面說的知乎日?qǐng)?bào),我們還可以給機(jī)器人添加天氣、新聞、吃飯?zhí)嵝?、?huì)議提醒等消息。

不知道大家還能想到什么有趣的功能,歡迎留言討論。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 點(diǎn)擊查看原文 Web SDK 開發(fā)手冊(cè) SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 14,286評(píng)論 0 15
  • 陽(yáng)光的明媚融入到家的歡樂,看這歡樂的時(shí)刻
    竹報(bào)平安_2ed7閱讀 336評(píng)論 0 0
  • 文章來源: 原創(chuàng) 編輯: 劉恒琳 你所浪費(fèi)的今天,是昨天死去的人奢望的明天; 你所厭惡的現(xiàn)在,是未來的你回不...
    快樂每一天lhl閱讀 139評(píng)論 0 0
  • 集客的前提是要把車修好,服務(wù)閉環(huán) 客戶只給你一次機(jī)會(huì),并且只有一次 不管行業(yè)如何變化,深耕細(xì)作、練習(xí)內(nèi)功,別人家事...
    京心達(dá)張新波閱讀 186評(píng)論 0 0

友情鏈接更多精彩內(nèi)容