如今不少企業在使用企業微信或釘釘進行工做交流,咱們能夠在羣裏添加一個自定義羣機器人,定時發送一些提醒或諮詢信息,它能夠做爲一個小組手,也爲工做增長一點樂趣。javascript
下面是企業微信和釘釘的羣機器人文檔:java
企業微信羣機器人文檔node
釘釘羣機器人文檔ios
它們的功能和用法基本是一致的,本文將以企業微信爲例進行講解。web
咱們在羣裏添加一個機器人後,能夠獲取到這個機器人的 Webhook:axios
經過向這個地址發起 POST 請求,就能夠實現機器人在羣裏發送消息。c#
羣機器人是要在羣裏才能添加的,但這裏有個小技巧,咱們能夠先拉一個羣而後把別人都踢掉,這樣就變成本身一我的的羣了。這樣方便咱們測試,也能夠建立一個私人的小組手。api
萬物源於 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 表達式,具體用法你們能夠參考文檔:
到這裏,咱們基本就能夠玩轉企業微信和釘釘的羣機器人功能了。除了上面說的知乎日報,咱們還能夠給機器人添加天氣、新聞、吃飯提醒、會議提醒等消息。
不知道你們還能想到什麼有趣的功能,歡迎留言討論。