在GCP(Google Cloud Platform)的Cloud Function用node製作Slack Bot

前情提要

最近公司正在改组,手上的工作都完成了,我所处的部门正在交接工作给其它团队準备转调新部门。
正处在无聊的时候主管交给我一个新任务,我们的品管部门想要有一个通知浏览器更新资讯的服务以能够在第一时间进行测试。

我在这里只会提到製作流程,不会提到这个需求的实作,所以想了解这个需求详细如何实作的朋友,先在此说声抱歉了!

使用到的工具

Web api服务

Cloud Function

语言及套件

node.js 10

套件
express (如果架在自已的server可以用这个开web api接口,这篇使用GCP用不到)
request (发送http request)

让我们开始吧

1. 开始使用GCP Cloud Function

首先在左侧导览选单找到运算大类的Cloud Functions
http://img2.58codes.com/2024/20127235ISo7SreQ6O.png

点击建立函式
http://img2.58codes.com/2024/20127235EXgqnQrMYF.png

基本设定
http://img2.58codes.com/2024/20127235OUUOdc9Ckp.png

编缉器介绍
http://img2.58codes.com/2024/20127235OZ01hptqYZ.png

2. 部属开发套件

这次我们用到的套件有requestcheerio,知道node的朋友可能会用npm在command下这样的指令npm install request cheerio,但在GCP内我们需要直接编缉package.json来部属开发套件,所以打开package.json输入下图的内容吧!

{  "name": "sample-http",  "version": "0.0.1",  "dependencies": {    "request": "latest"  }}

*简单介绍一下package.json

package.json可以进行开发环境基本资料的定义,例如要跑一个node server需要在这定义程式进入点、作者是谁、如果要发布到公开环境上别人要用什么关键字来找到你的专案,甚至是定义一个脚本。

在这里我们只用到name (专案名称) version (专案版本号) dependencies (使用的相依套件),我们要加入的内容在dependencies内,格式是。
"套件名称": "版本"
在这里我们只使用最新版就好,其它的详细设定参数可以参考这篇https://reurl.cc/ldy9Nj

3. 设定Slack App

在写功能前,我们先申请好Slack的接口再进行开发,申请网址https://api.slack.com
进入网页后点击右上角的Your Apps,接下来点击Create New App会出现下图的Dialog,设定好后按下Create App
http://img2.58codes.com/2024/20127235r5P2IqXEf8.png

在这篇的需求中所需要达到的效果是得到浏览器版本后,发送讯息至Slack的频道内,所以我们所需要用到的是Incoming Webhooks,开启这个功能就可以发送一个Http Request POST method到Slack提供的api位址,Slack就会根据你的发送内容发讯息。
http://img2.58codes.com/2024/2012723583AekTxJ2V.png

将Incoming Webhooks打开 OFF -> ON
http://img2.58codes.com/2024/201272354bbtm4fKpZ.png

打开后会出现以下画面,接下来我们要开启Slack的Webhook api,点击下图红框的Add New Webhook to Workspace按钮
http://img2.58codes.com/2024/201272356rJMQ5qB1F.png

接下来选择要发送的频道,按下Allow,需要注意的是要发送到N个频道就要开N个Webhook
http://img2.58codes.com/2024/2012723594kt9FfGRj.png

得到Webhook api接口了~
http://img2.58codes.com/2024/20127235RuFKuBrddK.png

4. 开始撰写Slack Bot

拿到Webhook api接口后就可以撰写Slack Bot了,以下提供一个範例程式,这里需要注意的是

SLACK_URL要替换成刚刚拿到的api接口herders要依slack api设定页面上它所提示的讯息加上application/json这个Content-type
const request = require('request')exports.helloWorld = (req, res) => {  let result = {    text: 'Hello Slack!!'  }  let options = {    url: SLACK_URL,    method: 'POST',    headers: {      'Content-type': 'application/json',    },    body: result  }  request(options, (err, res) => {    if (!err && res.statusCode == 200) {        // do something    } else {        // do something    }  }  let message = req.query.message || req.body.message || 'Hello World!';  res.status(200).send(message);};

5. 测试Slack bot

撰写完程式后按下部属

*部属失败

部属失败时会出现下图状况,此时点击名称进入此程式的仪表板
http://img2.58codes.com/2024/20127235A7omjhNGIa.png

点击详细资料会提示错误讯息,知道错误讯息了点击上方的编缉去改到对吧!
http://img2.58codes.com/2024/201272355ln7UVdYsF.png
http://img2.58codes.com/2024/20127235VubwaCACIb.png

注意

这部份GCP有个比较要注意的点是部属失败有时错误的程式码不会被储存,点击编缉时的版本会是上个部属成功的版本而不是现在这个失败的版本,这时候可以在仪表板点来源页籤,去将你错误的程式码复製起来再进编缉贴上。

*部属成功

部属失败时会出现下图绿色勾勾
http://img2.58codes.com/2024/20127235ZqjW4uhEcl.png

这时候就可以使用动作测试函式去看看我们写的Slack Bot有没有正常动作了!
http://img2.58codes.com/2024/20127235zbotGJdiHi.png
http://img2.58codes.com/2024/20127235S7khwOiYWe.png

6. 完成!

最后如果想要在其他地方使用这个Cloud Function,只要在仪表板的触发条件页籤内,将URL复製起来,就可以在你想要的地方去调用这个Slack Bot啰!!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章