开发者社区 问答 正文

钉钉机器人发送钉钉卡片消息

卡片消息构成为图片和底部确认收到按钮,群里人员点击确认收到按钮后可以在消息下方显示自己的id?如何实现?

展开
收起
游客apahcmofzql6y 2024-03-30 07:59:23 96 分享 版权
阿里云 AI 助理回答

要实现卡片消息中包含图片和底部确认收到按钮,并在群里人员点击“确认收到”按钮后,在消息下方显示自己的ID,可以按照以下步骤进行设计和开发。以下是基于钉钉开放平台的实现方案:


1. 创建应用并获取必要凭证

  • 创建钉钉应用

    1. 访问钉钉开放平台,选择“应用开发”,创建一个新的钉钉应用。
    2. 填写应用名称、描述并上传图标,保存后生成应用。
  • 获取凭证

    • 在应用详情页的“凭证与基础信息”中,复制 Client IDClient Secret,用于后续集成。

2. 创建卡片模板

  • 设计卡片消息模板
    1. 访问钉钉卡片平台,选择“新建模板”。
    2. 在模板编辑页面,设计卡片内容,包括:
      • 图片区域:用于展示图片。
      • 确认按钮:添加一个交互按钮,命名为“确认收到”。
      • 动态显示区域:用于展示点击“确认收到”按钮的用户ID列表。
    3. 保存并发布模板,复制模板ID以供后续使用。

3. 授予发送卡片消息权限

  • 在钉钉应用的“开发配置 > 权限管理”中,为应用申请以下权限:
    • Card.Streaming.Write:允许发送流式卡片消息。
    • Card.Instance.Write:允许实例化卡片消息。

4. 实现卡片消息的发送逻辑

  • 发送卡片消息
    1. 使用钉钉开放API或AppFlow连接流,调用发送卡片消息接口。
    2. 在请求中指定以下参数:
      • 模板ID:使用上一步获取的卡片模板ID。
      • 接收群组:指定目标群组ID。
      • 动态数据:初始化卡片中的动态显示区域为空(即未有用户点击时)。

5. 处理用户点击事件

  • 监听用户点击事件

    1. 钉钉机器人支持通过回调机制监听用户对卡片按钮的点击事件。
    2. 配置回调URL,当用户点击“确认收到”按钮时,钉钉会向该URL发送POST请求,携带以下信息:
      • 用户ID(userId)。
      • 消息ID(messageId)。
      • 按钮标识(actionKey)。
  • 更新卡片内容

    1. 在接收到回调请求后,解析出用户ID和消息ID。
    2. 调用钉钉API更新卡片消息内容,将用户的ID追加到动态显示区域。
    3. 更新后的卡片消息会实时同步到群聊中,所有成员均可看到新增的用户ID。

6. 示例代码

以下是一个简化的示例代码,用于处理用户点击事件并更新卡片内容:

后端处理逻辑(Java示例)

@PostMapping("/cardCallback")
public void handleCardCallback(@RequestBody Map<String, Object> payload) {
    // 解析回调数据
    String userId = (String) payload.get("userId");
    String messageId = (String) payload.get("messageId");

    // 获取当前卡片内容
    CardMessage currentCard = getCardMessageById(messageId);

    // 更新用户ID列表
    List<String> confirmedUsers = currentCard.getConfirmedUsers();
    if (!confirmedUsers.contains(userId)) {
        confirmedUsers.add(userId);
    }

    // 更新卡片消息
    updateCardMessage(messageId, confirmedUsers);
}

private CardMessage getCardMessageById(String messageId) {
    // 根据消息ID从数据库或缓存中获取卡片内容
    return cardRepository.findById(messageId);
}

private void updateCardMessage(String messageId, List<String> confirmedUsers) {
    // 调用钉钉API更新卡片内容
    DingTalkClient client = new DefaultDingTalkClient("https://api.dingtalk.com/v1.0/card/update");
    UpdateCardRequest request = new UpdateCardRequest();
    request.setMessageId(messageId);
    request.setCardContent(buildCardContent(confirmedUsers));
    client.execute(request);
}

private String buildCardContent(List<String> confirmedUsers) {
    // 构建新的卡片内容
    return "{ \"content\": \"已确认收到的用户:" + String.join(", ", confirmedUsers) + "\" }";
}

7. 注意事项

  • 权限管理:确保应用已正确申请并授权相关权限,否则无法发送或更新卡片消息。
  • 并发处理:如果多个用户同时点击“确认收到”按钮,需考虑并发场景下的数据一致性问题,建议使用分布式锁或事务机制。
  • 用户体验:动态显示区域应限制显示的用户ID数量,避免因过多用户点击导致卡片内容过长。

通过上述步骤,您可以实现一个包含图片和确认按钮的卡片消息,并在用户点击按钮后动态显示其ID的功能。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答