Skip to content

Commit

Permalink
Merge pull request #12 from open-dingtalk/features/20230809_linya_rpa…
Browse files Browse the repository at this point in the history
…card

Features/20230809 linya rpacard
  • Loading branch information
hzjiangjian authored Aug 9, 2023
2 parents e4edb7a + 96bdbba commit 6750ba7
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 2 deletions.
2 changes: 1 addition & 1 deletion dingtalk_stream/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@
from .chatbot import ChatbotHandler, AsyncChatbotHandler
from .card_replier import AICardStatus, AICardReplier, CardReplier
from .card_instance import MarkdownCardInstance, AIMarkdownCardInstance, CarouselCardInstance, \
MarkdownButtonCardInstance
MarkdownButtonCardInstance, RPAPluginCardInstance
from .card_callback import CardCallbackMessage, Card_Callback_Router_Topic
58 changes: 58 additions & 0 deletions dingtalk_stream/card_instance.py
Original file line number Diff line number Diff line change
Expand Up @@ -334,3 +334,61 @@ def reply(self, markdown: str, image_slider_list: list, button_text: str = "subm
callback_type="STREAM")

self.finish(self.card_instance_id, card_data)


class RPAPluginCardInstance(AICardReplier):

def __init__(self, dingtalk_client, incoming_message):
super(RPAPluginCardInstance, self).__init__(dingtalk_client, incoming_message)
self.card_template_id = "7f538f6d-ebb7-4533-a9ac-61a32da094cf.schema"
self.card_instance_id = None
self.goal = ""
self.corp_id = ""

def set_goal(self, goal: str):
self.goal = goal

def set_corp_id(self, corp_id: str):
self.corp_id = corp_id

def reply(self,
plugin_id: str,
plugin_version: str,
plugin_name: str,
ability_name: str,
plugin_args: dict,
recipients: list = None):
"""
回复markdown内容
:param ability_name:
:param recipients:
:param plugin_version:
:param plugin_args:
:param plugin_name:
:param plugin_id:
:return:
"""

plan = {
"corpId": self.corp_id,
"goal": self.goal,
"plan": "(function(){dd.callPlugin({'pluginName':'%s','abilityName':'%s','args':%s });})()" % (
plugin_name, ability_name, json.dumps(plugin_args)),
"planType": "jsCode",
"pluginInstances": [{
"id": "AGI-EXTENSION-" + plugin_id,
"version": plugin_version
}]
}

card_data = {
"goal": self.goal,
"processFlag": "true",
"plan": json.dumps(plan)
}

self.card_instance_id = self.create_and_send_card(self.card_template_id,
{"flowStatus": AICardStatus.PROCESSING},
recipients=recipients)

self.finish(self.card_instance_id, card_data)
3 changes: 3 additions & 0 deletions dingtalk_stream/card_replier.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# -*- coding:utf-8 -*-
import json
import uuid

import platform, requests, copy, hashlib
Expand Down Expand Up @@ -41,6 +42,8 @@ def create_and_send_card(self, card_template_id: str, card_data: dict, callback_
"""
发送卡片,两步骤:创建+投放。
https://open.dingtalk.com/document/orgapp/interface-for-creating-a-card-instance
:param callback_route_key:
:param callback_type:
:param recipients:
:param card_template_id: 卡片模板ID
:param card_data: 卡片数据
Expand Down
33 changes: 32 additions & 1 deletion dingtalk_stream/chatbot.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from concurrent.futures import ThreadPoolExecutor
import uuid
from .card_instance import MarkdownCardInstance, AIMarkdownCardInstance, CarouselCardInstance, \
MarkdownButtonCardInstance
MarkdownButtonCardInstance, RPAPluginCardInstance
import traceback


Expand Down Expand Up @@ -313,6 +313,37 @@ def reply_markdown_card(self, markdown: str, incoming_message: ChatbotMessage, t

return markdown_card_instance

def reply_rpa_plugin_card(self, incoming_message: ChatbotMessage,
plugin_id: str = "",
plugin_version: str = "",
plugin_name: str = "",
ability_name: str = "",
plugin_args: dict = {},
goal: str = "",
corp_id: str = "",
recipients: list = None) -> RPAPluginCardInstance:
"""
回复一个markdown卡片
:param ability_name:
:param incoming_message:
:param recipients:
:param corp_id:
:param goal:
:param plugin_args:
:param plugin_name:
:param plugin_version:
:param plugin_id:
:return:
"""

rpa_plugin_card_instance = RPAPluginCardInstance(self.dingtalk_client, incoming_message)
rpa_plugin_card_instance.set_goal(goal)
rpa_plugin_card_instance.set_corp_id(corp_id)

rpa_plugin_card_instance.reply(plugin_id, plugin_version, plugin_name, ability_name, plugin_args, recipients=recipients)

return rpa_plugin_card_instance

def reply_markdown_button(self, incoming_message: ChatbotMessage, markdown: str, button_list: list, tips: str = "",
title: str = "", logo: str = "") -> MarkdownButtonCardInstance:
"""
Expand Down

0 comments on commit 6750ba7

Please sign in to comment.