其实作为一个运维,接触到开发的东西非常的有限,平常使用python无非就是想要优化一下工作流,写一点小工具来辅助一下,要求不高,也不深。毕竟时间有限Python作为脚本语言配合各自即使通讯平台的api应该是非常方便的。比较平常大多数时间不是对着问题就是对着钉钉或者是飞书,所以把这些工具的通知给直接发到钉钉或者飞书上非常方便。
之前公司使用的飞书,虽然功能并不多但是完全够用,并且能够很容易理解文档,每一次更新都能看到易用性上是有很大提高的,现在我更换了公司,这家公司使用的是钉钉,便小试了一下钉钉。先从周边开始说起。
之前飞书开发的过程中感觉有点问题,那第一时间我就想找一下有没有相关的开发者社区呢? 我们很容易就能在开发者文档的开发者广场中找到组织,在里面提问和交流,非常方便。
来 找一下他们的交流社区到底在哪里
fine你得到里面发帖,但是他这个论坛登录是阿里云账号过一会儿还会自动退出属实是难用,也有可能我不会用,我想找一个交流群可以么。ok 论坛右侧就有两个二维码,有兴趣可以扫一下试试。
你会发现一个都不存在,why?后面发现文档的右下角有一个小阿里头点一下里面可以提工单,好吧,那我提工单,提了是拉进一个群,我问他要了一个交流群,然后我是两天前要的,申请了,两天都没加入成功,直到我在右下角发现有二维码可以加入群,核对以后发现是同一个群,我第二次申请。这次我终于通过并加入群中了😁
用飞书的api接口,python会帮你写好示例,很方便就是用requests写的的,稍微会一点python我想随便看一眼就会了。飞书如下:
当然了,又是用python又是调用Api能多复杂呢?钉钉给了我一个非常响亮的答案!
python# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import sys
from typing import List
from alibabacloud_dingtalk.oauth2_1_0.client import Client as dingtalkoauth2_1_0Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_dingtalk.oauth2_1_0 import models as dingtalkoauth_2__1__0_models
from alibabacloud_tea_util.client import Client as UtilClient
class Sample:
def __init__(self):
pass
@staticmethod
def create_client() -> dingtalkoauth2_1_0Client:
"""
使用 Token 初始化账号Client
@return: Client
@throws Exception
"""
config = open_api_models.Config()
config.protocol = 'https'
config.region_id = 'central'
return dingtalkoauth2_1_0Client(config)
@staticmethod
def main(
args: List[str],
) -> None:
client = Sample.create_client()
get_access_token_request = dingtalkoauth_2__1__0_models.GetAccessTokenRequest()
try:
client.get_access_token(get_access_token_request)
except Exception as err:
if not UtilClient.empty(err.code) and not UtilClient.empty(err.message):
# err 中含有 code 和 message 属性,可帮助开发定位问题
pass
@staticmethod
async def main_async(
args: List[str],
) -> None:
client = Sample.create_client()
get_access_token_request = dingtalkoauth_2__1__0_models.GetAccessTokenRequest()
try:
await client.get_access_token_async(get_access_token_request)
except Exception as err:
if not UtilClient.empty(err.code) and not UtilClient.empty(err.message):
# err 中含有 code 和 message 属性,可帮助开发定位问题
pass
if __name__ == '__main__':
Sample.main(sys.argv[1:])
我截不下了家人们,只能加代码块 这是一段获取accesstoken的python示例代码,谢谢你,本来能用的看了你的sdk我完全不会了。 应该是我的水平太垃圾了吧,我完全不明白为什么会有这么多包引来引去就是为了拿token,有可能全学会了我会更容易使用dingding的API了?但是我又没有找到关于他pythonSDK的说明。这是2.0,也就是新版sdk,那这个这么复杂1.0相比一定更复杂吧?
???这是1.0的sdk,我一度以为这才是2.0,我以为sdk更新一定是往更易用的方向去的,很明显阿里程序员并不这么觉得。
其实也是小问题,比较有了地址参数,作为调参工程师也可以用的,就是有时候脑子抽抽的时候想看一眼示例代码会非常头疼,接下来就到了一个非常实际的问题上了,我想要使用机器人功能发送信息到群中。 我从飞书来的思路,我创建一个应用,设置机器人,将机器人拉进需要发信息的群中,然后我要找一下有没有什么接口可以获得群的id什么的。很顺畅啊,但是钉钉并不能如我愿,他没有,不知道是不是我的问题,反正我没有看见相关的文章如何直接获取机器人所在群的id,但是这在飞书当中是非常方便的,
文档给我指的明路,就是创建群。好吧,那我不想重新创群但是要拉机器人怎么办呢,按照经验我可以使用webhook机器人,那我应该找一下webhook机器人怎么使用,怎么传参数。我下意识觉得他应该在下图的信息发送类目中有所展示吧?
我大概找了有少说十几二十分钟,我当时很烦躁,因为我目录上搜webhook是没有相关类目的,我全局搜索确实是搜到了一篇文章,但是我没有找到如何传参,当然了现在我已经找到他在哪里了,重新回去看这篇文章的时候确实也给我指了明路。
没错 最后一句话确实告诉我了,虽然我觉得没什么道理,但是webhook发送信息的示例在“消息类型”类目当中...... 在文档中同样是基本信息一栏,就是包含请求方式和请求链接的那一部分不知道为什么会有两种呈现方式
这是一种
这是另外一种,当然了这也不是不能用,但是文档间切换的时候有点变扭。 用webhook进行信息发送应该是最方便的一种方式,但是我最后还是没有用,因为我需要机器做应答,而能够进行应答在之前webhook有一种叫做Outgoing模式,是可以进行应答的,现在他关闭了。 所以现在我如果后续要实现一个应答的功能的机器人只能使用自建应用,还记得我之前的需求么?“我希望在已有群中拉进一个机器人进行应答”,如果使用自建机器人那么我将无法将其加入一个已有群后推送信息,如果使用webhook那就可以对一个已有群进行推送但是无法应答。 所以最后留给我的其实只有一条路,新建一个群。 太抽象了,我不清楚为什么要做成这样,太难用了!
文档示例中也有一些我无法理解的问题比如我接触最多的这个信息类型文档中
可以明显发现右侧示例图片中是有图片显示的,但是在左侧示例代码中完全没有相关的代码,当然了也不是一点都找不到踪迹哈,我在下方信息类型的webhook章节中找到了端倪
你说你不说我怎么知道里面能传markdown呢,况且上方的信息类型中markdown是有专门的一类的,当然我也要提一下这个markdown类型的客户端展现方式。 当我使用markdown类型的时候这是我桌面端的展现方式
除了有一个灰色丑丑的底,但是其实也算是能用了,我测完了接下来准备看一下手机
????为什么?手机端完全不支持显示?那干脆就不要出这个功能得了,我还研究啥呢?
最后还有最后一个问题,就是钉钉的接口文档的baseurl是不统一的,有https://oapi.dingtalk.com/ 还有 https://api.dingtalk.com/ 当然这也是小问题了,在中间遇到的各种各样变扭的地方太多了,到今天我都想不太起来了还有什么其他让我变扭的地方了,什么时候我想到了我再说吧。