實(shí)現(xiàn)基于飛書webhook監(jiān)聽github代碼提交
前言
在飛書上建立一個(gè)自己一個(gè)人的群,然后在群里添加了一個(gè)機(jī)器人,這個(gè)機(jī)器人能干些什么呢?比如訂閱一些新聞,自動(dòng)推送到飛書上,或者監(jiān)聽某個(gè)項(xiàng)目的代碼提交情況。接下來的例子主要是做一個(gè)代碼提交情況推送
飛書Webhook推送
首先,先調(diào)試通飛書機(jī)器人webhook的情況,主要是使用了node寫了一個(gè)demo,具體里面的地址和參數(shù)可以詳細(xì)去查閱飛書提供的API
Demo 代碼:
const rp = require('request-promise'); (async () =>{ const result = await sendWebhook(); console.log(`發(fā)送結(jié)果:${result.StatusMessage}`) })(); async function sendWebhook() { const baseUrl = `*********`; var options = { method: 'POST', uri: baseUrl, body: { msg_type: "text", content: { text: "測(cè)試發(fā)送消息-test", }, }, json: true // Automatically stringifies the body to JSON }; const result = await rp(options); return result; }
項(xiàng)目配置webhook
既然可以成功的使得機(jī)器人推送消息,那接著給代碼庫做webhook
的基礎(chǔ)配置。
- 某個(gè)項(xiàng)目/倉庫,設(shè)置中的Webhooks菜單,進(jìn)行基礎(chǔ)配置,如下圖顯示:
主要配置四部分:
Payload URL
回調(diào)服務(wù)的地址;Content type
回調(diào)請(qǐng)求頭,建議JSON
格式;Secret
為了做安全校驗(yàn),設(shè)置后會(huì)在請(qǐng)求header
中增加如下兩個(gè)屬性,用來區(qū)分請(qǐng)求的來源,避免暴露的請(qǐng)求被惡意訪問;
X-Hub-Signature: ... X-Hub-Signature-256:...
最后我們選擇由哪些事件來觸發(fā)webhook
回調(diào),push event
(代碼推送事件)、everything
(所有事件)、某些特定事件三種。
配置完成后,嘗試提交代碼下,然后從Recent Deliveries中你會(huì)發(fā)現(xiàn)有調(diào)用webhook的記錄,但是數(shù)據(jù)格式不是飛書webhook的數(shù)據(jù)格式要求。兩個(gè)不兼容的接口要怎么讓他們可以連接起來?
解決方案:中間服務(wù),github webhook回調(diào)到我的中間服務(wù),中間服務(wù)將數(shù)據(jù)封裝成飛書webhook可接收的數(shù)據(jù)格式,然后調(diào)用飛書的webhook地址。從而實(shí)現(xiàn)一個(gè)代碼提交情況的推送。
中間服務(wù)
中間服務(wù)使用Koa框架,并監(jiān)聽8002端口,注冊(cè)一個(gè)接收push接口,該接口主要用于接收github的send事件時(shí),解析其內(nèi)容,并將內(nèi)容轉(zhuǎn)化成飛書webhook接收數(shù)據(jù)參數(shù)。
接收github的webhook事件,數(shù)據(jù)處理并將其轉(zhuǎn)化成飛書的消息格式
router.post("/push", async (ctx) => { try { const content = JSON.parse(req.body.payload) ; const name = content.pusher.name; const message = content.before; ctx.body = { code:1,message:success }; } catch (error) { console.log(error); } });
就這樣整個(gè)Coding的部分就完成了,剩余就是進(jìn)行調(diào)試驗(yàn)證了。如下圖,經(jīng)過一番調(diào)試后在飛書上成功接收到信息:
整個(gè)過程,其實(shí)還是很簡單的,主要是中間服務(wù)承接github發(fā)送的數(shù)據(jù)然后封裝成飛書的消息格式進(jìn)而進(jìn)行請(qǐng)求轉(zhuǎn)發(fā)。當(dāng)然,github發(fā)送的數(shù)據(jù)中有些數(shù)據(jù)我們無法獲取到,可以去調(diào)用其他接口去獲取你想要的數(shù)據(jù)。同時(shí)飛書也支持多種消息格式,所以有時(shí)間可以對(duì)此功能升級(jí),去訂閱一些新聞或者自己完成腳本的抓取進(jìn)行推送。
以上就是實(shí)現(xiàn)基于飛書webhook監(jiān)聽github代碼提交的詳細(xì)內(nèi)容,更多關(guān)于飛書webhook監(jiān)聽github代碼提交的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
微信小程序?qū)崿F(xiàn)錨點(diǎn)定位樓層跳躍的實(shí)例
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)錨點(diǎn)定位樓層跳躍的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05小程序開發(fā)實(shí)戰(zhàn):實(shí)現(xiàn)九宮格界面的導(dǎo)航的代碼實(shí)現(xiàn)
本篇文章主要介紹了小程序開發(fā)實(shí)戰(zhàn):實(shí)現(xiàn)九宮格界面的導(dǎo)航的代碼實(shí)現(xiàn),具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01微信小程序 小程序制作及動(dòng)畫(animation樣式)詳解
這篇文章主要介紹了微信小程序 小程序制作及動(dòng)畫詳解的相關(guān)資料,這里對(duì)小程序制作進(jìn)行了詳解,介紹動(dòng)畫部分的知識(shí),需要的朋友可以參考下2017-01-01JavaScript立即執(zhí)行函數(shù)用法解析
這篇文章主要介紹了JavaScript立即執(zhí)行函數(shù),我們知道,在一般情況下,函數(shù)必須先調(diào)用才能執(zhí)行,如下所示,我們定義了一個(gè)函數(shù),并且調(diào)用,下面一起進(jìn)入文章來接具體的使用方法吧2021-12-12JS圖形編輯器場(chǎng)景坐標(biāo)視口坐標(biāo)的相互轉(zhuǎn)換
這篇文章主要為大家介紹了JS圖形編輯器之場(chǎng)景坐標(biāo)視口坐標(biāo)的相互轉(zhuǎn)換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01