Skip to content

Commit 21c654b

Browse files
authored
feat: 支持卡片回调的示例,以及修复回调的数据回传问题 (#10)
1. feat: 支持卡片回调的示例 2. fix: 修复回调的数据回传问题 Signed-off-by: Ke Jie <[email protected]>
1 parent 87c48b4 commit 21c654b

File tree

3 files changed

+75
-5
lines changed

3 files changed

+75
-5
lines changed

dingtalk_stream/handlers.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import logging
1+
import json
22

33
from .frames import Headers
44
from .frames import AckMessage
@@ -9,10 +9,12 @@
99

1010

1111
class CallbackHandler(object):
12+
TOPIC_CARD_CALLBACK = '/v1.0/card/instances/callback'
13+
1214
def __init__(self):
1315
self.dingtalk_client = None
1416
self.logger = setup_default_logger('dingtalk_stream.handler')
15-
17+
1618
def pre_start(self):
1719
return
1820

@@ -25,8 +27,7 @@ async def raw_process(self, callback_message: CallbackMessage):
2527
ack_message.code = code
2628
ack_message.headers.message_id = callback_message.headers.message_id
2729
ack_message.headers.content_type = Headers.CONTENT_TYPE_APPLICATION_JSON
28-
ack_message.message = message
29-
ack_message.data = callback_message.data
30+
ack_message.data = {"response": message}
3031
return ack_message
3132

3233

dingtalk_stream/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
VERSION_STRING = '0.8.1'
1+
VERSION_STRING = '0.9.0'

examples/cardcallback/cardcallback.py

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# !/usr/bin/env python
2+
3+
import argparse
4+
import logging
5+
from dingtalk_stream import AckMessage
6+
import dingtalk_stream
7+
8+
def setup_logger():
9+
logger = logging.getLogger()
10+
handler = logging.StreamHandler()
11+
handler.setFormatter(
12+
logging.Formatter('%(asctime)s %(name)-8s %(levelname)-8s %(message)s [%(filename)s:%(lineno)d]'))
13+
logger.addHandler(handler)
14+
logger.setLevel(logging.INFO)
15+
return logger
16+
17+
18+
def define_options():
19+
parser = argparse.ArgumentParser()
20+
parser.add_argument(
21+
'--client_id', dest='client_id', required=True,
22+
help='app_key or suite_key from https://open-dev.digntalk.com'
23+
)
24+
parser.add_argument(
25+
'--client_secret', dest='client_secret', required=True,
26+
help='app_secret or suite_secret from https://open-dev.digntalk.com'
27+
)
28+
options = parser.parse_args()
29+
return options
30+
31+
32+
class CardCallbackHandler(dingtalk_stream.CallbackHandler):
33+
def __init__(self, logger: logging.Logger = None):
34+
super(dingtalk_stream.CallbackHandler, self).__init__()
35+
if logger:
36+
self.logger = logger
37+
38+
async def process(self, callback: dingtalk_stream.CallbackMessage):
39+
# 卡片回调的数据构造详见文档:https://open.dingtalk.com/document/orgapp/instructions-for-filling-in-api-card-data
40+
response = {
41+
'cardData': {
42+
'cardParamMap': {
43+
'intParam': '1',
44+
'trueParam': 'true',
45+
}},
46+
'privateData': {
47+
'myUserId': {
48+
'cardParamMap': {
49+
'floatParam': '1.23',
50+
'falseparam': 'false',
51+
},
52+
}
53+
}
54+
}
55+
return AckMessage.STATUS_OK, response
56+
57+
def main():
58+
logger = setup_logger()
59+
options = define_options()
60+
61+
credential = dingtalk_stream.Credential(options.client_id, options.client_secret)
62+
client = dingtalk_stream.DingTalkStreamClient(credential)
63+
client.register_callback_hanlder(dingtalk_stream.CallbackHandler.TOPIC_CARD_CALLBACK,
64+
CardCallbackHandler(logger))
65+
client.start_forever()
66+
67+
68+
if __name__ == '__main__':
69+
main()

0 commit comments

Comments
 (0)