# DeBox 开发者文档 > DeBox 开发者文档:机器人 OpenAPI、Go / Node.js / Python SDK、开放能力与常见问题。 本文件遵循 llmstxt.org 标准,包含 DeBox 开发者文档的全部正文(Markdown 格式),适合一次性喂给大模型做全量索引或离线参考。只需按章节定位页面时,用更省 token 的索引 https://docs.debox.pro/llms.txt。 ## DeBox 使用指南 ![Docs Version Dropdown](https://docs.debox.pro/assets/images/header-60779eee23ec507736b4fd9bff5ba777.png) ## DeBox 能为我做什么? **DeBox 是一站式 Web3 社区管理工具,旨在建立一个可信的数据生态。使用 Web3 钱包登录,可以私聊、小群聊天、Club 聊天、DAO/NFT 聊天(持仓聊天),并发布动态、查看所有人的动态、查看关注人的链上动态。** :::tip 开始体验 - **官网** - **Web App** - **新手社区** ::: :::info 技术支持 - 欢迎加入DeBox技术讨论群:点击加入 - 问题反馈:【我的】- 右上角【设置】-【问题反馈】提交 ::: ## DeBox 官方发行了哪些 NFT? ### DeBox Guardians Penguin(DGP) > 昵称: 企鹅 > 企鹅是 OG ,在社区中具有重要的治理权限和影响力。 ### DeBox Guardians Eagle(DGE) > 昵称:小鹰 > 小鹰是执法者 ,进行监督和管理社区,确保社区成员遵守规则和准则。 ### DeBox Guardians Rabbit(DGR) > 昵称:小兔 > 小兔是建设者,推动社区发展,通常是开发人员。 ### DeBox Guardians Cobra(DGC) > 昵称:小蛇 > 小蛇是基金会,推动社区的发展和治理,为用户提供更加优质的 Web3 社交体验。 ### DeBox Guardians Shark(DGS) > 昵称:鲨鱼 > 鲨鱼是开拓者,他们勇敢而强大。他们探索着DeBox的边界,并增强了整个DeBox生态系统的稳健性。 ![Docs Version Dropdown](https://docs.debox.pro/assets/images/12-15f552c7a6c0734025b87238c23d87d1.jpg) ## 如何登录 DeBox? DeBox 有两种钱包登录形式,使用本地钱包登录【推荐】或者连接钱包 App 登录; ### 没有钱包直接创建 App 左上角【Account】-【添加】-【创建钱包】- 设置密码 - 成功创建后 - 备份个人助记词。需要说明的是 DeBox 服务器不会保存个人的私钥。请您务必备份助记词,妥善保管助记词以及私钥,以确保资产安全。 ![Docs Version Dropdown](https://docs.debox.pro/assets/images/3-1-a9732cb0d9f5eec77bc0da966fddddf5.jpg) ### 已经有钱包去导入 App 左上角【添加钱包】-【导入钱包】- 复制私钥或者助记词 - 设置密码 -【导入】 ![Docs Version Dropdown](https://docs.debox.pro/assets/images/3-2-f164c97a32961ada5832cd8e759fdbaa.jpg) ### 如果不想导入私钥 左上角【添加钱包】- 选择 WalletConnect 或者 TokenPocket - 跳转授权确认,授权过程需要网络服务支持,若无法成功授权并跳转,请检查个人网络或者使用本地钱包登录。 ![Docs Version Dropdown](https://docs.debox.pro/assets/images/3-3-95614edae334b65d6776e50166df964c.jpg) ## 如何将自己的 NFT 设置为头像? ### 如何将自己的 NFT 设置为头像? 【个人主页】-【编辑】- 头像 - 选择拥有的 NFT -【保存】。 ![Docs Version Dropdown](https://docs.debox.pro/assets/images/4-1-3547483db428098535ceaee8b6dbae44.jpg) ### 如何将域名设置为昵称? 【个人主页】-【编辑】- 点击【DID】- 选择 DID -【保存】。 ![Docs Version Dropdown](https://docs.debox.pro/assets/images/4-2-a0a0f73a253c8e3d461c9ba877e2feb9.jpg) ## 我如何私信我的好友? ### 我如何私信我的好友? 点一下【对方头像】- 关注按钮旁边的【聊天按钮】。如果无法聊天,表示对方并没有打开对您的私聊权限。另外,更改设置个人私信权限,【我的】-【设置】-【隐私】-【私信权限】。为了避免无效信息过多默认【只允许我关注的人私信我】,可以选择【任何人都可以私信我】或者【不允许任何人私信我】。 ![Docs Version Dropdown](https://docs.debox.pro/assets/images/5-1-23390f8a0eccc89b41385d95a975da10.jpg) ## 我如何创建一个群组? 小群是500人以内的多人群聊。您可以邀请多位好友进行小群聊天。在事件板块发现各类热门活动,并加入对应的聊天小群进行实时讨论。 ### 如何创建? 底部【聊天】- 右上角的【+】-【创建小群】-【朋友】-【立即创建】。如果人数达到上限,请进入 Web App【社区】-【管理】- 升级成 Club 群聊 - 升级人数。 ![Docs Version Dropdown](https://docs.debox.pro/assets/images/6-1-41a1fff93946648f680f5203cd421281.jpg) ## 我怎么创建/加入俱乐部? 俱乐部 Club 是超过500人的群聊,Club 中有群主和管理员,有群工具。 ### 创建 Club 前往 Web App - 顶部【社区】- 左下角【创建】-【创建 Club】- 选择一个 DeBox Guardians NFT 进行质押 - 设置对应的名称、图标和加入条件 - 创建(该过程需要一定 GAS 费)。 ### 加入 Club 底部【社区】- 进入社区 - 选择 Club 加入。加入部分 Club 有一定门槛,由 Club 主设定,有些加入申请需要审核,有些要求您有资产,有些要求您进行付费。 ![Docs Version Dropdown](https://docs.debox.pro/assets/images/7-1-f04150d62af4891479b69b4e6f967ec0.jpg) ## 持仓聊天指的是什么? 持仓聊天是需持有相应 Token/NFT 的用户才可加入的群组。 ### 加入 DAO/NFT 底部【社区】- 选择 DAO/NFT 加入。 ![Docs Version Dropdown](https://docs.debox.pro/assets/images/8-1-0567e76325ab859e2507bfa7b69289c9.jpg) ### 创建 DAO/NFT 底部【聊天】- 右上角的【+】- 选择【创建DAO】- 选择相应的 Token/NFT - 设置名称、头像进行创建。 ![Docs Version Dropdown](https://docs.debox.pro/assets/images/8-2-f6240c4ff8d7a0add8a4aa6292301e68.jpg) ## 有哪些好玩的群工具? ### 有哪些好玩的群工具? 进入群聊 - 底部【+】- 【红包】【投票】【抽奖】【Meetup】- 参与/发起;还可以在群组聊天中通过【红包】【投票】【抽奖】【Meetup】消息卡片参与,或者右侧浮窗参与。 ![Docs Version Dropdown](https://docs.debox.pro/assets/images/9-fe086c7959e709b20ac616d3f743813d.jpg) ## 在发现页有哪些内容可以看? 发现页可以发布动态、浏览动态、评论、以及关注其他用户。 ### 看所有人动态 在【发现页】- 【探索】浏览所有人的动态, 平台根据您的喜好算法推荐优质的动态。 ### 看关注人动态 切换【探索】到【正在关注】。可以浏览关注人的实时动态和链上动态,发现交易行为,了解交易策略、投资动向和参与的项目。 ![Docs Version Dropdown](https://docs.debox.pro/assets/images/10-18f02c359d4167d424672a1cae112810.jpg) View More --- ## DeBox 开放能力 DeBox 面向外部开发者提供可落地的能力体系,可用于构建机器人、DApp 与生态协作产品。 ## 能力地图 ### 1. DeBox 去中心化小程序(DApp) - 在 DeBox 内承载 Web 应用体验。 - 通过注入钱包对象(`window.deboxWallet`、`window.ethereum`、`window.solana`)完成 Web3 交互。 - 接入说明见:[DeBox DApp 去中心化小程序](/MiniApp)。 ### 2. OpenClaw 安装 DeBox 插件 - 将 OpenClaw 工作流接入 DeBox Bot Channel。 - 适合已经使用 OpenClaw 做多渠道自动化的团队。 - 安装配置见:[OpenClaw 安装 DeBox 插件](/APIs/OpenClaw-Plugin-Install)。 ### 3. DeBox Shares 无许可自动分佣协议 - 在业务支付链路中集成自动分佣能力。 - 支持链上支付的分佣拆分与结算模式。 - 接入文档见:[DeBox Shares 无许可的自动分佣协议](/Shares)。 ### 4. DeBox Grant 扶持计划 - 项目完成 DeBox 能力接入后,可申请生态扶持。 - 计划说明与申请方式见:[DeBox Grant 扶持计划](/OpenPlatformGrant)。 ## 推荐接入顺序 1. 明确产品形态:Bot、DApp,或两者结合。 2. 先完成机器人能力接入: [DeBox Bot 聊天机器人](/APIs/BotGuide)。 3. 按接口文档对接: [DeBox 开发者 OpenAPI](/ApiOnePage)。 4. Go 技术栈按接收模式二选一: [Go SDK(Long Polling)](/GO-SDK) 或 [Go SDK Webhook](/GO-SDK-Webhook)。 5. 核心能力稳定后,再扩展 Shares 与 Grant 生态合作。 ## 技术支持 - 开发者平台:[developer.debox.pro](https://developer.debox.pro) - 开发者排障文档:[开发者 FAQ / 排障](/APIQA) --- ## DeBox DApp 去中心化应用 面向开发者的 DApp 接入指南(当前版本)。 ## 1. DApp 是什么 DeBox DApp 是运行在 DeBox 内置浏览器中的 H5 应用(HTML/CSS/JS)。 你可以: - 复用现有 H5 页面快速接入 - 调用注入的钱包对象进行链上交互 - 通过服务端调用 DeBox OpenAPI 完成消息、用户、群组等能力接入 ## 2. 快速开始 1. 在 [DeBox 开放平台](https://developer.debox.pro) 创建应用并获取 `API Key`。 2. 准备一个可公网访问的 HTTPS 页面。 3. 按本文完成 DeBox 环境检测与钱包能力接入。 4. 把 OpenAPI 调用放在后端服务,不在前端暴露密钥。 ## 3. 运行环境检测 ```js const isDeBoxUA = !!window?.navigator?.userAgent?.includes("DeBox") const hasDeBoxWallet = typeof window?.deboxWallet !== "undefined" const hasEthereum = typeof window?.ethereum !== "undefined" const hasSolana = typeof window?.solana !== "undefined" ``` 建议: - 以 `hasDeBoxWallet || hasEthereum` 作为 EVM 主判断。 - 非 DeBox 环境给出降级提示,不直接报错。 ## 4. 钱包与用户信息能力 `window.deboxWallet` 是主要入口(与 `window.ethereum` 兼容)。 ### 4.1 请求权限 ```js await window.deboxWallet.request({ method: "wallet_requestPermissions", params: [{ eth_accounts: { debox_getUserInfo: {} } }], }) ``` ### 4.2 获取用户公开信息 ```js const userInfo = await window.deboxWallet.request({ method: "debox_getUserInfo", params: [], }) ``` 返回示例(字段因客户端版本可能有差异): ```json { "uid": "jkdi123", "address": "0xa56b4f0c7622bd076c2ba48b17d1e8d3fbf5303e", "name": "张三", "avatar": "https://...png" } ``` ## 5. 后端调用 OpenAPI(推荐架构) 安全原则: - 前端只负责采集输入和调用你自己的后端 API。 - `X-API-KEY`、签名参数、App Secret 全部保留在后端。 主文档入口: - [DeBox 开发者 OpenAPI](/ApiOnePage) ## 6. 消息发送(新版接口示例) 以下示例基于当前公开接口:`POST /openapi/bot/sendMessage` ```bash curl -X POST "https://open.debox.pro/openapi/bot/sendMessage" \ -H "Content-Type: application/json" \ -H "X-API-KEY: YOUR_APP_KEY" \ -d '{ "chat_id": "cc0onr82", "chat_type": "group", "content": "Hello from DApp", "parse_mode": "richtext" }' ``` 参数要点: - `chat_type`:`group` 或 `private` - `chat_id`: - `group` 时填群 `gid` - `private` 时填用户 `user_id` - `content`:消息主体 - `parse_mode` 默认 `richtext` ## 7. 上线检查清单 1. 页面 HTTPS 可访问,移动端适配完成。 2. DeBox 环境检测与非 DeBox 降级逻辑可用。 3. 钱包授权流程可追踪(拒绝/取消/成功)。 4. OpenAPI 调用全部走后端,密钥不下发前端。 5. 错误日志有 request-id、用户标识、接口名。 ## 8. 常见问题 1. 前端直接调 OpenAPI 报鉴权或 CORS: - 属于预期,改为后端代调。 2. 发送消息失败: - 检查 `chat_type/chat_id` 是否匹配。 - 检查 `content` 非空、`parse_mode` 合法。 3. 钱包对象不存在: - 当前不在 DeBox 容器或客户端版本不满足。 ## 9. 相关文档 - [DeBox 开发者 OpenAPI](/ApiOnePage) - [DeBox Bot 聊天机器人](/APIs/BotGuide) - [DeBox 机器人 Go SDK](/GO-SDK) - [DeBox 机器人 Go SDK Webhook](/GO-SDK-Webhook) --- ## OpenClaw 安装 DeBox 插件 # 在 OpenClaw 安装 DeBox 插件 本教程用于指导 DeBox 用户在 OpenClaw 上安装并启用官方 DeBox 插件。 ## 前置条件 - 你已安装 OpenClaw。 - 你已通过 **BotMother** 创建 DeBox Bot。 - `yourDeBoxBotToken` 即该 Bot 在 BotMother 中获取到的 **API Key**。 ## 第一步:安装插件 ```bash openclaw plugins install @descartes_1/debox@latest ``` ## 第二步:添加 DeBox Channel 并配置 Token ```bash openclaw channels add --channel debox --token "yourDeBoxBotToken" ``` ## 第三步:重启网关 ```bash openclaw gateway restart ``` ## 验证是否安装成功 执行: ```bash openclaw channels list ``` 如果配置成功,输出中会看到 DeBox channel/account 已启用。 --- ## DeBox Shares 无许可的自动分佣协议 ## DeBox Shares 自动分佣协议,无需许可,配置后自动生效 :::tip Shares V2 🎉 DeBox Shares V2 协议已正式上线!​ ⚡ 若您先前已集成 Shares V1,无需修改代码即可自动升级至 V2,享受更高佣金、更强功能、更优体验! 🚀 立即接入 DeBox Shares 协议,开启全新收益模式! ::: ## DeBox Shares介绍 ### 1、DeBox Shares是什么? - DeBox Shares是基于DeBox产品独创的连接项目方与DeBox群组的底层分佣协议。 - 它基于DeBox的产品与社交关系来运营。 - 项目方接入无需许可,简单、快捷10分钟即可完成接入。 - 群组与邀请人可以获得项目方高达80%的即时返佣。基于DeBox Shares协议和DeBox群组功能,人人都可以开万物上链之后的去中心化交易所。 - DeBox Shares协议为无许可去中心化协议,DeBox平台无法也不会对任何接入DeBox Shares项目进行背书。 ### 2、项目方开通DeBox Shares有什么好处? - 通过DeBox Shares可以触达1000万真实用户与30万个私域群组,在任意群组里面推荐项目可以获得群主的认可与支持。 ## Shares 支持哪些参与方式? 1. 支持链上 Token 支付:调用 DeBox-Shares 合约,略微调整 DAPP 的付款处合约代码即可; 2. 支持多种网络:目前已支持 ETH, Arbitrum, Base, BSC, OP, Polygon 网络资产(不断更新中)。 ## 如何接入 Shares? ### 1. 支付接入 Shares - DeBox Shares 协议是一个专为项目方设计的自动分佣工具,旨在简化交易分配流程。 - 开发者只需设置分配金额,无需处理复杂的分享者、邀请码等逻辑,DeBox Shares 协议即可自动完成每笔交易的收益分配。 - 接入过程包含两个主要步骤:连接钱包并获取授权、调用支付完成支付。支付完毕后可以查看支付详细信息。以下是详细步骤和使用方法: #### 1.1 连接钱包并请求授权 - 通过`window.deboxWallet`调用区块链所有能力,包括用户信息获取,请参考Web3交互。 ```jsx await window.deboxWallet.request({ "method": "wallet_requestPermissions", "params": [{ eth_accounts: { "debox_getUserInfo": {} } }], }); ``` ```jsx await window.deboxWallet.request({ "method": "debox_getUserInfo", "params": [], }); ``` ### 2. 链上支付接入 Shares 链上 Shares 是一种实时的分佣方式。当用户使用 Token 进行支付时,部分支付金额会被自动捐赠给 DeBox Shares 协议进行分佣,完成收益分配。 开发者只需微调 Dapp 支付部分逻辑,即可快速实现高度定制化的链上支付分佣功能。 #### 2.1 链上支付分佣的调用过程 链上支付的分佣有两类:链上原生代币(ETH)支付分佣;ERC20代币支付分佣: **2.1.1 链上原生代币(ETH)支付分佣** 链上原生代币(ETH)支付分佣分两步:计算分佣金额;调用合约的捐赠函数以触发分佣。 1. **计算分佣金额** - Dapp 根据业务设计,计算通过 DeBox Shares 分配的分佣金额额。 2. **调用 `donationToShares`方法,同时传入分佣金额,触发后续分佣逻辑:** ```jsx // ... uint256 donatedAmountETH = amountAcquiredETH / 10; // 计算分佣金额 doxShares.donationToShares{ value: donatedAmountETH }(); // 触发后续分佣逻辑 // ... ``` 3. **示例合约逻辑** - Dapp 合约集成 Shares 协议示例: ```solidity // SPDX-License-Identifier: Apache License 2.0 pragma solidity ^0.8.22; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import { IDeBoxShares } from "@debox/deboxdapp/interfaces/facets/IShares.sol"; import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; contract PlayGameWithShares { IDeBoxShares public doxShares; event GamePlayed(address player, IERC20 token, uint256 amount); constructor(IDeBoxShares _doxShares) { doxShares = _doxShares; } // Dapp中,集成了Shares协议的ETH支付函数 function playGameWithETH() external payable { uint256 amount = msg.value; uint256 donatedAmount = amount / 10; if (donatedAmount > 0) { doxShares.donationToShares{ value: donatedAmount }(); } emit GamePlayed(msg.sender, IERC20(address(0)), amount); } } ``` **2.1.2 ERC20代币支付分佣** ERC20代币支付分佣分两步:计算分佣金额并授权 DeBox Shares 合约;调用合约的捐赠函数以触发后续处理。 1. **计算分佣金额,将权限授予 DeBox-Shares 合约** - 首先,Dapp将用户支付的代币转入Dapp合约,并根据业务设计,计算通过 DeBox Shares 分配的分佣金额。 - 然后,合约调用 `safeIncreaseAllowance` 方法,将分佣金额的使用权限授予 DeBox Shares 合约地址。 ... //将用户支付的代币转入 Dapp 合约 SafeERC20.safeTransferFrom(token, msg.sender, address(this), amount); //计算通过 DeBox Shares 分配的分佣金额 uint256 donatedAmount = amountAcquired / 10; //将分佣金额的使用权限授予 DeBox Shares 合约 SafeERC20.safeIncreaseAllowance(token, address(doxShares), donatedAmount); ... // //触发分佣逻辑 doxShares.donationToShares(token, donatedAmount); 2. **示例合约逻辑** - Dapp 合约集成 Shares 协议示例: ```solidity // SPDX-License-Identifier: Apache License 2.0 pragma solidity ^0.8.22; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import { IDeBoxShares } from "@debox/deboxdapp/interfaces/facets/IShares.sol"; import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; contract PlayGameWithShares { IDeBoxShares public doxShares; event GamePlayed(address player, IERC20 token, uint256 amount); constructor(IDeBoxShares _doxShares) { doxShares = _doxShares; } // Dapp中的集成了Shares协议的ERC20代币支付函数 function playGame(IERC20 token, uint256 amount) external { SafeERC20.safeTransferFrom(token, msg.sender, address(this), amount); uint256 donatedAmount = amount / 10; if (donatedAmount > 0) { SafeERC20.safeIncreaseAllowance(token, address(doxShares), donatedAmount); doxShares.donationToShares(address(token), donatedAmount); } emit GamePlayed(msg.sender, token, amount); } ``` #### 2.2 Shares 合约接口: - DeBox-shares 合约接口: ```solidity // SPDX-License-Identifier: Apache License 2.0 pragma solidity ^0.8.22; interface IDeBoxShares { event DonationToShares(address indexed contributor, address indexed token, uint256 amount); event SharesConfigSet(address vault, address weth); /** * @notice Donate tokens to the shares protocol. * @dev The donated tokens will be transferred to the vault. * before the donation, the caller must approve me to spend the token. * @param token The token to donate. must be a valid ERC20 token. * @param amount The amount of `token` to donate. must be greater than 0. */ function donationToShares(address token, uint256 amount) external; /** * @notice Donate Native coin (ETH) to the shares protocol. */ function donationToShares() external payable; function getSharesConfig() external view returns (address vault, address weth); } ``` #### 2.3 DeBox-Shares 合约部署地址: | Network | Contract Address | | --- | --- | | Ethereum | 0x2e6168f9ca3fe204a2110c4613ce18985f3fbf39 | | Arbitrum One | 0x509Ca4ff42cECAA1FF4988514211b26e72BDa840 | | Base | 0x2f8Ae1cC4ab784f7b9E07A61F714ecDe18A4A6d2 | | BSC | 0x32303FFcb9B6564C2b8a373433A043a7f17E4B37 | | Optimism | 0x18574E5a838B3FE16948653873386DD114ba1D7C | | Polygon | 0xb8Af0Fa3E38E8Cb95870091b0d4e32CA232b780D | #### 2.4 简化的链上分佣接口 对于没有复杂业务逻辑的 Dapp,DeBox 提供了简化的链上分佣接口,支持链上原生代币支付和 ERC20 代币支付过程的分佣。 ##### 支持方法: 1. **payAndShareWithETH**: 该方法用于 ETH 支付过程的分佣 - 合约方法: ```solidity /** * @notice 使用 ETH 支付并分佣,可指定收款地址和分佣金额。 * @param recipient 接收 ETH 支付的目标地址。 * @param shareAmount 在 ETH 支付总额中,用于 Shares 分佣的 ETH 量。 */ function payAndShareWithETH(address payable recipient, uint256 shareAmount) external payable; ``` - 合约方法调用示例: ```solidity contract Example { function examplePayAndShare(address payable recipient) external payable { // 假设支付 1 ETH,其中分佣 0.2 ETH payAndShareWithETH{value: 1 ether}(recipient, 0.2 ether); // 交易后,recipient 收到 0.8 ETH,0.2ETH 通过 Shares 协议完成分佣 } } ``` - ABI 接口定义: ```json [ { "type": "function", "name": "payAndShareWithETH", "inputs": [ { "name": "recipient", "type": "address", "internalType": "address payable" }, { "name": "shareAmount", "type": "uint256", "internalType": "uint256" } ], "outputs": [], "stateMutability": "payable" } ] ``` - ABI 调用示例(基于 ethers.js) ```JavaScript const { ethers } = require("ethers"); // 假设合约地址和 ABI const contractAddress = "SimplifiedSharesContractDeploymentAddress"; const abi = [ { "type": "function", "name": "payAndShareWithETH", "inputs": [ { "name": "recipient", "type": "address" }, { "name": "shareAmount", "type": "uint256" } ], "outputs": [], "stateMutability": "payable" } ]; // 设置 Provider 和 Signer const provider = new ethers.providers.JsonRpcProvider("https://your-rpc-url"); const signer = provider.getSigner(); const contract = new ethers.Contract(contractAddress, abi, signer); // 调用方法 async function callPayAndShare() { const recipient = "0xRecipientAddress"; const shareAmount = ethers.utils.parseEther("0.2"); const totalAmount = ethers.utils.parseEther("1.0"); const tx = await contract.payAndShareWithETH(recipient, shareAmount, { value: totalAmount }); console.log("Transaction sent:", tx.hash); // 等待交易完成 const receipt = await tx.wait(); console.log("Transaction mined:", receipt.transactionHash); } callPayAndShare(); ``` 2. **payAndShareWithERC20**:该方法用于 ERC20 代币支付过程的分佣 - 合约方法: ```solidity /** * @notice 使用 ERC20 代币执行支付并分佣,可指定收款地址、代币地址及分佣金额。 * @param recipient 接收 ERC20 代币的目标地址。 * @param tokenAddress 用于支付的 ERC20 代币的合约地址。 * @param amount 支付的 ERC20 代币总额。 * @param shareAmount 在 ERC20 代币支付总额中,用于 Shares 分佣的代币量。 */ function payAndShareWithERC20(address recipient, address tokenAddress, uint256 amount, uint256 shareAmount) external; ``` - 合约方法调用示例: ```solidity contract Example { function examplePayAndShareWithERC20( address recipient, address tokenAddress) external { // 假设支付 1000 个代币,其中分佣 200 个 payAndShareWithERC20(recipient, tokenAddress, 1000, 200); // 交易后,recipient 收到 800 个代币,200 个代币通过 Shares 协议完成分佣 } } ``` - ABI 接口定义: ```json [ { "type": "function", "name": "payAndShareWithERC20", "inputs": [ { "name": "recipient", "type": "address", "internalType": "address" }, { "name": "tokenAddress", "type": "address", "internalType": "address" }, { "name": "amount", "type": "uint256", "internalType": "uint256" }, { "name": "shareAmount", "type": "uint256", "internalType": "uint256" } ], "outputs": [], "stateMutability": "nonpayable" } ] ``` - ABI 调用示例(基于 ethers.js) ```JavaScript const { ethers } = require("ethers"); // 合约地址和 ABI const contractAddress = "SimplifiedSharesContractDeploymentAddress"; const abi = [ { "type": "function", "name": "payAndShareWithERC20", "inputs": [ { "name": "recipient", "type": "address" }, { "name": "tokenAddress", "type": "address" }, { "name": "amount", "type": "uint256" }, { "name": "shareAmount", "type": "uint256" } ], "outputs": [], "stateMutability": "nonpayable" } ]; // 初始化 Provider 和 Signer const provider = new ethers.providers.JsonRpcProvider("https://your-rpc-url"); const signer = provider.getSigner(); const contract = new ethers.Contract(contractAddress, abi, signer); async function callPayAndShareWithERC20() { const recipient = "0xRecipientAddress"; const tokenAddress = "0xTokenAddress"; const amount = ethers.utils.parseUnits("1000", 18); // 假设代币有 18 位小数 const shareAmount = ethers.utils.parseUnits("200", 18); const tx = await contract.payAndShareWithERC20( recipient, tokenAddress, amount, shareAmount ); console.log("Transaction sent:", tx.hash); // 等待交易完成 const receipt = await tx.wait(); console.log("Transaction mined:", receipt.transactionHash); } callPayAndShareWithERC20(); ``` ##### 简化的分佣合约部署地址: | Network | Contract Address | | --- | --- | | BSC | 0xf0Cc35840394eD6274e058620FC6eb3aBA27Ba2d | #### 2.5 链上支付分佣交互示例 这是一个交互式 Demo,演示了如何集成 DeBox Shares 协议以实现链上原生代币(如 ETH)和 ERC20 代币支付的分佣功能。 **示例链接:** [https://shares-test.vercel.app/bsc_new.html](https://shares-test.vercel.app/bsc_new.html) (请在 DeBox App 中打开) **使用说明:** 1. 在 DeBox App 中打开上述链接。 2. 点击页面上的按钮以调用相应的分佣方法(原生代币支付分佣、ERC20 代币支付分佣)。 3. 在页面右下角的 “vConsole” 中可以观察到详细的调用过程和执行结果。 4. 此 Demo 是一个独立的 HTML 文件,您可以在浏览器中按 F12 打开开发者工具查看其源代码,了解具体的集成方式。 --- ## DeBox Grant 扶持计划 DeBox Grant 面向已接入 DeBox 能力并能持续交付价值的生态项目,提供项目扶持与协作支持。 ## 计划重点 - 加速基于 DeBox 基础能力的可落地产品。 - 支持长期投入机器人、DApp 与协议集成的开发团队。 - 丰富生态工具供给,提升终端用户体验与活跃度。 ## 优先支持方向 ### 1. 机器人与社区工具 - 社区运营机器人 - 客服与工单机器人 - 知识库/AI 助手机器人 - 自动化流程机器人 ### 2. DApp 与产品工具 - 增长与留存类工具 - 交易与数据分析工具 - 与 DeBox 社交关系链路深度结合的功能产品 ### 3. 协议与基础设施集成 - Shares 协议集成项目 - 钱包与账号体系集成 - 具备明确采用目标的 Web3 服务集成 ## 基础申请要求 - 产品已完成至少一项 DeBox 能力接入(API/SDK/DApp/Bot)。 - 团队提供清晰的产品路线、里程碑与运营计划。 - 可提供接入证明(Demo、文档、仓库或线上使用数据)。 - 愿意配合 DeBox 生态上线与联合传播安排。 ## 入选后可获得支持 - 基于项目复杂度与影响力的潜在代币资助。 - DeBox 生态内的曝光与流量支持。 - DeBox 团队技术与生态协同支持。 ## 申请入口 - 工具页上线申请:[提交表单](https://forms.gle/jAxuHUo9bydB69iB8) - Grant 资助申请:[提交表单](https://forms.gle/9M61P812j6pfN92p9) ## 审核流程 1. 提交完整申请材料。 2. DeBox 团队进行技术与产品评审。 3. 通过初审的项目进入生态决策流程。 4. 审核通过后进入扶持与协作阶段。 --- ## DeBox 机器人 开发总览 本文是 DeBox Bot 的总览文档,覆盖从 `BotMother` 找到入口、创建机器人、管理配置,到基于 SDK 二次开发的完整路径。 ## 1. 先找到 BotMother 可以通过以下 3 种方式打开 BotMother: 1. 深链接:`https://m.debox.pro/user/chat?id=u7ooqdjt&start=` 2. 地址搜索:`0xda521900ac9dfeff8a8e692bb627ff8cd80a7b28` 3. 从 DeBox Ai 助手入口进入 按实际操作顺序,建议优先从 Ai 助手入口开始: ### 1.1 通过 Ai 助手入口找到 BotMother ![Ai 助手入口](/imgBotmother/Ai助手查找-1.jpg) ### 1.2 进入 BotMother 会话入口 ![BotMother 入口](/imgBotmother/BotMother入口-2.jpg) ### 1.3 查看 BotMother 指令菜单 ![BotMother 指令](/imgBotmother/BotMother指令-3.jpg) ## 2. 通过 BotMother 创建 Bot 在 BotMother 中按指令流程完成创建,典型步骤: 1. 输入创建指令(按 BotMother 当前提示)。 2. 设置 Bot 基础信息(名称、头像、简介等)。 3. 创建完成后进入 Bot 管理列表。 ## 3. Bot 管理与配置修改 创建后,先在管理页完成基础配置,再选择开发模式。 ### 3.1 Bot 管理首页 ![bot 管理首页](/imgBotmother/bot管理首页-4.jpg) 你可以在这里: - 查看已有 Bot 列表 - 进入单个 Bot 管理页 - 新增或删除 Bot ### 3.2 单个 Bot 管理页 ![某个 bot 管理首页](/imgBotmother/某个bot管理首页-5.jpg) 你可以在这里完成: - 基础资料修改(名称、描述、头像) - 凭证管理(`API Key`,必要时 `App Secret`) - Webhook 配置(`App Domain`、`Webhook URL`) ## 4. 两种开发模式(必须先选) DeBox Bot 提供两种收消息模式: - Webhook 模式(平台主动推送到你的服务) - Long Polling 模式(你的程序主动轮询 `getUpdates`) 两者严格互斥: - 配置了 Webhook 后,Webhook 优先生效。 - 此时 Long Polling 将收不到或几乎收不到消息。 - 若要改回 Long Polling,先清空 Webhook 配置。 ## 5. Webhook 模式怎么用 最小接入步骤: 1. 在 Bot 管理页配置 `App Domain`。 2. 配置 `Webhook URL`(公网 HTTPS 地址)。 3. 服务端实现回调接口,校验请求头 `X-API-KEY == Webhook Key`。 4. 回调处理中按业务逻辑调用 OpenAPI 回消息。 推荐参考: - [DeBox 机器人 Go SDK Webhook](/GO-SDK-Webhook) - [DeBox 开发者 OpenAPI](/ApiOnePage) ## 6. Long Polling 模式怎么用 最小接入步骤: 1. 确认平台未配置 Webhook。 2. 使用 SDK 初始化 Bot(`API Key` + `API Secret`)。 3. 开启消息监听并循环处理 `GetUpdates/GetUpdatesChan`。 4. 收到消息后调用发送接口回消息。 ## 7. 三个 SDK 选型建议 DeBox 目前提供三套官方 SDK: 1. Go SDK: - 文档:[DeBox 机器人 Go SDK](/GO-SDK) - 适合高并发后端与工程化部署。 2. Nodejs SDK: - 文档:[DeBox 机器人 Nodejs SDK](/NODE-SDK) - 适合 JS/TS 技术栈与快速迭代场景。 3. Python SDK: - 文档:[DeBox 机器人 Python SDK](/PYTHON-SDK) - 适合 AI 工作流、脚本化任务与数据处理场景。 ## 8. 接口开发主文档 SDK 负责“怎么调用”,OpenAPI 负责“参数值域和响应结构”。 新开发请同时参考: - [DeBox 开发者 OpenAPI](/ApiOnePage) - [开发者 FAQ / 排障](/APIQA) ## 9. 推荐实施路径 1. 先通过 BotMother 创建并完成基础配置。 2. 小流量阶段优先用 Webhook 模式联调。 3. 按团队语言栈选择 Go/Nodejs/Python SDK。 4. 统一以 OpenAPI 参数定义做最终校验。 --- ## DeBox 开发者 OpenAPI ## 接口清单(按路由顺序) 1. [`POST /openapi/bot/sendMessage`](#api-bot-sendmessage) 2. [`POST /openapi/bot/sendMessageToFans`](#api-bot-sendmessagetofans) 3. [`POST /openapi/bot/editMessage`](#api-bot-editmessage) 4. [`POST /openapi/bot/getMe`](#api-bot-getme) 5. [`POST /openapi/bot/getUpdates`](#api-bot-getupdates) 6. [`GET /openapi/group/info`](#api-group-info) 7. [`GET /openapi/group/is_join`](#api-group-is-join) 8. [`POST /openapi/group/admin/dao_member`](#api-group-admin-dao-member) 9. [`POST /openapi/group/admin/kick_member`](#api-group-admin-kick-member) 10. [`POST /openapi/group/admin/message/recall`](#api-group-admin-message-recall) 11. [`GET /openapi/user/info`](#api-user-info) 12. [`GET /openapi/user/is_follow`](#api-user-is-follow) 13. [`GET /openapi/token/info`](#api-token-info) 14. [`GET /openapi/box/info`](#api-box-info) ## Base URL `https://open.debox.pro` ## 鉴权 除 `GET /openapi/box/info` 外,均需请求头: ```http X-API-KEY: ``` ## 返回包裹格式 ### 标准包裹(group/user/token/box) ```json { "code": 200, "success": true, "data": {} } ``` ### Bot 包裹(bot 路由) ```json { "ok": true, "success": true, "result": {} } ``` --- ## 全局参数值域 - `chat_type`:`group` | `private` - `chat_id`: - `chat_type=group` 时:群 `gid`(如 `cc0onr82`) - `chat_type=private` 时:用户 `user_id`(invite code) - `content`:主参数 - 文本类长度上限(`text`/`richtext`/`Markdown`/`MarkdownV2`/`HTML`):5000 字符 - `parse_mode` 默认值:`richtext` - `parse_mode` 值域: - `richtext`(默认) - `text` - `Markdown` - `MarkdownV2` - `HTML` - `image` - `video` - `file` ### `content` 如何填写(关键) - `parse_mode=richtext`:填普通文本或富文本字符串(默认)。 - `parse_mode=text`:填纯文本(不解析 Markdown/HTML)。 - `parse_mode=Markdown`:填 Markdown 内容。 - `parse_mode=MarkdownV2`:填 MarkdownV2(需要按语法转义)。 - `parse_mode=HTML`:填 HTML 片段(如 `Hello`)。 - `parse_mode=image`:`content` 填可公网访问的图片 URL(如 `https://cdn.example.com/a.png`)。 - `parse_mode=video`:`content` 填可公网访问的视频 URL(如 `https://cdn.example.com/a.mp4`)。 - `parse_mode=file`:`content` 填可公网访问的文件 URL(如 `https://cdn.example.com/a.pdf`)。 ### `reply_markup` / `user_action_markup` 最小示例 ```json { "inline_keyboard": [ [ { "text": "查看详情", "url": "https://docs.debox.pro/zh/ApiOnePage" }, { "text": "回调按钮", "callback_data": "detail" } ] ] } ``` ### `mention_type` / `mention_ids` 使用建议 - 仅 `parse_mode=text` 时建议使用 `mention_type` 与 `mention_ids`。 - 富文本模式(`richtext/Markdown/MarkdownV2/HTML`)建议直接在 `content` 中写 `@` 文本,不依赖 `mention_*` 字段。 - 若不需要 @ 功能,`mention_type` 与 `mention_ids` 可省略。 --- ## 1. POST `/openapi/bot/sendMessage` {#api-bot-sendmessage} ### Curl 示例 ```bash curl -X POST "https://open.debox.pro/openapi/bot/sendMessage" \ -H "Content-Type: application/json" \ -H "X-API-KEY: YOUR_APP_KEY" \ -d '{"chat_id":"cc0onr82","chat_type":"group","content":"hello","parse_mode":"richtext"}' ``` 发送单条消息(群/私聊)。 ### 上行参数(Body,JSON) - `chat_id` string,必填 - `chat_type` string,必填,值域:`group` | `private` - `content` string,必填 - `parse_mode` string,选填,默认 `richtext` - `message_id` string,选填 - `mention_type` int,选填 - `mention_ids` string[],选填 - `reply_markup` object,选填 - `user_action_markup` object,选填 ### 成功响应示例 ```json { "ok": true, "success": true, "result": { "message_id": "01JYXXXX", "text": "Hello from DeBox", "parse_mode": "richtext" } } ``` ### 失败响应示例 ```json { "ok": false, "success": false, "message": "message can't be empty" } ``` --- ## 2. POST `/openapi/bot/sendMessageToFans` {#api-bot-sendmessagetofans} ### Curl 示例 ```bash curl -X POST "https://open.debox.pro/openapi/bot/sendMessageToFans" \ -H "Content-Type: application/json" \ -H "X-API-KEY: YOUR_APP_KEY" \ -d '{"chat_id":"cc0onr82","chat_type":"group","content":"broadcast","parse_mode":"richtext"}' ``` 向粉丝批量发送。 ### 上行参数(Body,JSON) - `chat_id` string,必填 - `chat_type` string,必填,值域:`group` | `private` - `content` string,必填 - `parse_mode` string,选填,默认 `richtext` 约束:`content` 最大 2000 字节。 ### 成功响应示例 ```json { "ok": true, "success": true, "result": true } ``` ### 失败响应示例 ```json { "ok": false, "success": false, "message": "message must be less than 2000 bytes" } ``` --- ## 3. POST `/openapi/bot/editMessage` {#api-bot-editmessage} ### Curl 示例 ```bash curl -X POST "https://open.debox.pro/openapi/bot/editMessage" \ -H "Content-Type: application/json" \ -H "X-API-KEY: YOUR_APP_KEY" \ -d '{"chat_id":"cc0onr82","chat_type":"group","message_id":"01JYXXXX","content":"edited","parse_mode":"richtext"}' ``` 编辑历史消息文本。 ### 上行参数(Body,JSON) - `chat_id` string,必填 - `chat_type` string,必填,值域:`group` | `private` - `message_id` string,必填 - `content` string,必填 - `parse_mode` string,选填,默认 `richtext` ### 成功响应示例 ```json { "ok": true, "success": true, "result": true } ``` ### 失败响应示例 ```json { "ok": false, "success": false, "message": "EditMessageText param Group Id is error" } ``` --- ## 4. POST `/openapi/bot/getMe` {#api-bot-getme} ### Curl 示例 ```bash curl -X POST "https://open.debox.pro/openapi/bot/getMe" \ -H "X-API-KEY: YOUR_APP_KEY" ``` 获取当前 API Key 绑定账户信息。 ### 上行参数 无。 ### 成功响应示例 ```json { "ok": true, "success": true, "result": { "name": "DeBox Bot", "address": "0x...", "pic": "https://...", "user_id": "u1", "level": 3, "level_icon": "https://.../icon/level/v3.png" } } ``` ### 失败响应示例 ```json { "ok": false, "success": false, "message": "invalid param" } ``` --- ## 5. POST `/openapi/bot/getUpdates` {#api-bot-getupdates} ### Curl 示例 ```bash curl -X POST "https://open.debox.pro/openapi/bot/getUpdates" \ -H "Content-Type: application/json" \ -H "X-API-KEY: YOUR_APP_KEY" \ -d '{"timeout":30}' ``` 拉取 Bot 更新(长轮询)。 注意:如果你在开放平台配置了 Webhook URL,Webhook 会成为唯一有效收消息链路;此时本接口将拿不到或几乎拿不到消息。 ### 上行参数(Body,JSON) - `timeout` int,选填,值域 `1~60`,默认 `30` ### 成功响应示例(有消息) ```json { "ok": true, "success": true, "result": [ { "id": 123, "message": { "message_id": "01JYXXXX", "from": { "user_id": "u1", "name": "Alice", "address": "0x..." }, "chat": { "id": "cc0onr82", "type": "group" }, "text": "Ping", "parse_mode": "richtext" } } ] } ``` ### 成功响应示例(超时无消息) ```json { "ok": true, "success": true, "result": [] } ``` ### 失败响应示例 ```json { "ok": false, "success": false, "message": "Invalid timeout value" } ``` --- ## 6. GET `/openapi/group/info` {#api-group-info} ### Curl 示例 ```bash curl "https://open.debox.pro/openapi/group/info?gid=cc0onr82" \ -H "X-API-KEY: YOUR_APP_KEY" ``` 查询群信息。 ### Query 参数 - `gid` string,必填 ### 成功响应示例 ```json { "code": 200, "success": true, "data": { "is_charge": false, "subchannel_number": 2, "group_name": "DeBox Dev", "gid": "cc0onr82", "group_number": 345, "group_pic": "https://...", "create_time": "2026-05-14 14:00:00", "maximum": "无限制", "mod": ["Alice", "Bob"], "mod_info": [ { "name": "Alice", "address": "0x...", "pic": "https://...", "user_id": "u1" } ] } } ``` ### 失败响应示例 ```json { "code": -3001, "success": false, "message": "No such group" } ``` --- ## 7. GET `/openapi/group/is_join` {#api-group-is-join} ### Curl 示例 ```bash curl "https://open.debox.pro/openapi/group/is_join?gid=cc0onr82&walletAddress=0x1234567890abcdef1234567890abcdef12345678" \ -H "X-API-KEY: YOUR_APP_KEY" ``` 查询钱包是否已加入群。 ### Query 参数 - `gid` string,必填 - `walletAddress` string,必填,EVM 地址 ### 成功响应示例 ```json { "code": 200, "data": true } ``` ### 失败响应示例 ```json { "error": "Bad Request", "code": 401, "message": "Param error" } ``` --- ## 8. POST `/openapi/group/admin/dao_member` {#api-group-admin-dao-member} ### Curl 示例 ```bash curl -X POST "https://open.debox.pro/openapi/group/admin/dao_member" \ -H "Content-Type: application/json" \ -H "X-API-KEY: YOUR_APP_KEY" \ -H "nonce: RANDOM_NONCE" \ -H "timestamp: 1715500000" \ -H "signature: SHA1(app_secret+nonce+timestamp)" \ -d '{"gid":"cc0onr82","page":1,"size":20}' ``` 查询群成员(需签名鉴权 + 管理员权限)。 ### 额外请求头(必填) - `nonce` string - `timestamp` string - `signature` string 签名算法:`sha1(app_secret + nonce + timestamp)`。 ### 上行参数(Body,JSON) - `gid` string,必填,长度 `1~8` - `page` int,选填,`<=0` 时按 `1` - `size` int,选填,默认 `50`,最大 `50` ### 成功响应示例 ```json { "code": 1, "success": true, "data": [ { "user_id": "u1", "name": "Alice", "pic": "https://...", "address": "0x...", "signature": "builder" } ] } ``` ### 失败响应示例 ```json { "code": -4017, "success": false, "message": "permission denied" } ``` --- ## 9. POST `/openapi/group/admin/kick_member` {#api-group-admin-kick-member} ### 接口说明 将一个或多个成员移出指定 DeBox 群组。 该接口要求当前 `X-API-KEY` 绑定的 Bot 已加入目标群组,且在该群内具备管理员或建群者权限。 ### Curl 示例 ```bash curl -X POST "https://open.debox.pro/openapi/group/admin/kick_member" \ -H "Content-Type: application/json" \ -H "X-API-KEY: YOUR_APP_KEY" \ -H "nonce: RANDOM_NONCE" \ -H "timestamp: 1715500000" \ -H "signature: SHA1(app_secret+nonce+timestamp)" \ -d '{ "gid":"cc0onr82", "user_ids":["u1","u2"] }' ``` ### 额外请求头(必填) - `nonce` string - `timestamp` string - `signature` string 签名算法:`sha1(app_secret + nonce + timestamp)`。 ### 权限要求 - `X-API-KEY` 必须合法有效。 - API Key 必须已绑定一个有效的 DeBox Bot 账号。 - 该 Bot 必须在目标群组中具备管理员或建群者权限。 ### 上行参数(Body,JSON) - `gid` string,必填,目标群组 ID,长度 `1~8` - `user_ids` string[],必填,待移出成员的 DeBox `user_id` 列表 - `user_ids` 单次最多传入 `20` 个成员 ### 参数校验与执行规则 - `user_ids` 不能为空数组。 - `user_ids` 中不允许出现空字符串。 - 重复的 `user_id` 会在服务端自动去重后再执行。 - 只要请求中的任意一个 `user_id` 无法解析为有效用户,接口会直接失败。 ### 成功响应示例 ```json { "code": 1, "success": true, "message": "success", "data": true } ``` ### 失败响应示例 ```json { "code": -2004, "success": false, "message": "uid size must be less than or equal to 20", "data": null } ``` ```json { "code": -4017, "success": false, "message": "permission denied", "data": null } ``` --- ## 10. POST `/openapi/group/admin/message/recall` {#api-group-admin-message-recall} ### 接口说明 管理员撤回群消息接口。 消息撤回后,将展示为如下群通知内容: `MOD {operator_name} 撤回了 {sender_name}的消息` ### Curl 示例 ```bash curl -X POST "https://open.debox.pro/openapi/group/admin/message/recall" \ -H "Content-Type: application/json" \ -H "X-API-KEY: YOUR_APP_KEY" \ -H "nonce: RANDOM_NONCE" \ -H "timestamp: 1715500000" \ -H "signature: SHA1(app_secret+nonce+timestamp)" \ -d '{ "gid":"cc0onr82", "user_id":"u1", "message_id":"01HXYZABCDEF1234567890" }' ``` ### 额外请求头(必填) - `nonce` string - `timestamp` string - `signature` string 签名算法:`sha1(app_secret + nonce + timestamp)`。 ### 权限要求 - `X-API-KEY` 必须合法有效。 - API Key 必须已绑定一个有效的 DeBox Bot 账号。 - 该 Bot 必须在目标群组中具备管理员或建群者权限。 ### 上行参数(Body,JSON) - `gid` string,必填,目标群组 ID,长度 `1~8` - `user_id` string,必填,原消息发送者的 DeBox `user_id` - `message_id` string,必填,待撤回消息的消息 ID ### 注意事项 - `user_id` 必须能解析到一个真实存在的 DeBox 用户。 - `message_id` 必须对应目标群组内一条可被平台修改的消息。 - 撤回通知中的操作者名称,优先取管理员 Bot 的展示名;若展示名为空,则回退为其 `user_id`。 - 原消息发送者名称同样优先取展示名,缺失时回退为其 `user_id`。 ### 成功响应示例 ```json { "code": 1, "success": true, "message": "success", "data": true } ``` ### 失败响应示例 ```json { "code": -2004, "success": false, "message": "message_id is required", "data": null } ``` ```json { "code": -2000, "success": false, "message": "recall message failed", "data": null } ``` --- ## 11. GET `/openapi/user/info` {#api-user-info} ### Curl 示例 ```bash curl "https://open.debox.pro/openapi/user/info?user_id=u1" \ -H "X-API-KEY: YOUR_APP_KEY" ``` 查询用户资料。 ### Query 参数 - `user_id` string,选填 - `address` string,选填,EVM 地址 - 至少一个必填 ### 成功响应示例 ```json { "code": 200, "success": true, "data": { "user_id": "u1", "name": "Alice", "address": "0x...", "pic": "https://...", "signature": "gm builder" } } ``` ### 失败响应示例 ```json { "code": -2004, "success": false, "message": "invalid param" } ``` --- ## 12. GET `/openapi/user/is_follow` {#api-user-is-follow} ### Curl 示例 ```bash curl "https://open.debox.pro/openapi/user/is_follow?walletAddress=0x1234567890abcdef1234567890abcdef12345678&followAddress=0xabcdefabcdefabcdefabcdefabcdefabcdefabcd" \ -H "X-API-KEY: YOUR_APP_KEY" ``` 查询用户关注关系。 ### Query 参数 - `walletAddress` string,必填,EVM 地址 - `followAddress` string,必填,EVM 地址 ### 成功响应示例 ```json { "code": 200, "data": true } ``` ### 失败响应示例 ```json { "error": "Bad Request", "code": 401, "message": "Please input the wallet address correctly" } ``` --- ## 13. GET `/openapi/token/info` {#api-token-info} ### Curl 示例 ```bash curl "https://open.debox.pro/openapi/token/info?contract_address=0x55d398326f99059fF775485246999027B3197955&chain_id=56" \ -H "X-API-KEY: YOUR_APP_KEY" ``` 查询 Token 元信息。 ### Query 参数 - `contract_address` string,必填 - `chain_id` int,选填;缺失/负值按 `0` ### 成功响应示例 ```json { "code": 200, "success": true, "data": { "chain_id": 56, "token": "0x55d398326f99059fF775485246999027B3197955", "decimal": 18, "name": "Tether USD", "symbol": "USDT", "logo_url": "https://..." } } ``` ### 失败响应示例 ```json { "code": -2004, "success": false, "message": "参数错误,contract_address must be a valid contract address" } ``` --- ## 14. GET `/openapi/box/info` {#api-box-info} ### Curl 示例 ```bash curl "https://open.debox.pro/openapi/box/info" ``` 查询 BOX 基础信息(无需 API Key)。 ### Query 参数 无。 ### 成功响应示例 ```json { "code": 200, "success": true, "data": { "max_supply": "1000000000", "burned": "...", "supply": "...", "locked": "...", "address": "0x...", "symbol": "BOX", "chainId": 1, "icon": "https://...", "stake": "..." } } ``` --- ## DeBox 机器人 Go SDK # DeBox 机器人 Go SDK 使用文档 源码仓库: - [debox-pro/debox-chat-go-sdk](https://github.com/debox-pro/debox-chat-go-sdk) ## 1. SDK 功能总览 `debox-chat-go-sdk` 主要提供: - 机器人初始化:`NewBotAPI(apiKey, apiSecret)` - 发送消息:`bot.Send(...)` - Long Polling 收消息:`GetUpdates` / `GetUpdatesChan` - 按钮与回调:`InlineKeyboardMarkup` + `CallbackQuery` - 编辑消息:`NewEditMessageText` + `bot.Send(...)` Webhook 已拆分为独立文档: - [DeBox 机器人 Go SDK Webhook](/GO-SDK-Webhook) ## 2. 收消息模式说明 本文只讲 Long Polling。 如果你已经在开放平台配置 Webhook,Polling 可能收不到消息。Webhook 部署请看: - [DeBox 机器人 Go SDK Webhook](/GO-SDK-Webhook) --- ## 3. Long Polling(SDK 详细用法) ### 3.1 安装 SDK ```bash go get github.com/debox-pro/debox-chat-go-sdk ``` ### 3.2 准备凭证 从 DeBox 开放平台获取: - `API_KEY`(必须) - `API_SECRET`(建议) ### 3.3 初始化 Bot + 发送第一条消息 ```go package main import ( "log" boxbotapi "github.com/debox-pro/debox-chat-go-sdk/boxbotapi" ) func main() { bot, err := boxbotapi.NewBotAPI("YOUR_APP_KEY", "YOUR_API_SECRET") if err != nil { log.Fatalf("init bot failed: %v", err) } // group: chatID=gid;private: chatID=user_id(invite code) msg := boxbotapi.NewMessage("cc0onr82", "group", "Hello from Go SDK") msg.ParseMode = boxbotapi.ModeRichText sent, err := bot.Send(msg) if err != nil { log.Fatalf("send failed: %v", err) } log.Printf("sent message_id=%s", sent.MessageID) } ``` ### 3.4 收消息方式 A:`GetUpdatesChan`(推荐) ```go package main import ( "context" "log" boxbotapi "github.com/debox-pro/debox-chat-go-sdk/boxbotapi" ) func main() { bot, err := boxbotapi.NewBotAPI("YOUR_APP_KEY", "YOUR_API_SECRET") if err != nil { log.Fatal(err) } // 必须打开监听开关 boxbotapi.MessageListener = true cfg := boxbotapi.NewUpdate(0) cfg.Timeout = 30 ctx := context.Background() updates := bot.GetUpdatesChan(cfg) for { select { case <-ctx.Done(): bot.StopReceivingUpdates() return case upd := <-updates: if upd.Message != nil { log.Printf("from=%s chat=%s text=%s", upd.Message.From.UserId, upd.Message.Chat.ID, upd.Message.Text) } if upd.CallbackQuery != nil { log.Printf("callback=%s", upd.CallbackQuery.Data) } } } } ``` ### 3.5 收消息方式 B:`GetUpdates`(手动轮询) ```go cfg := boxbotapi.NewUpdate(0) cfg.Timeout = 30 updates, err := bot.GetUpdates(cfg) if err != nil { log.Printf("get updates failed: %v", err) return } for _, upd := range updates { if upd.Message != nil { log.Println(upd.Message.Text) } } ``` ### 3.6 发送不同类型消息 ```go // MarkdownV2 m1 := boxbotapi.NewMessage(chatID, chatType, "*bold* _italic_") m1.ParseMode = boxbotapi.ModeMarkdownV2 _, _ = bot.Send(m1) // HTML m2 := boxbotapi.NewMessage(chatID, chatType, "Hello docs") m2.ParseMode = boxbotapi.ModeHTML _, _ = bot.Send(m2) // 图片/视频/文件(文本填 URL) m3 := boxbotapi.NewMessage(chatID, chatType, "https://example.com/a.png") m3.ParseMode = boxbotapi.ModeImage _, _ = bot.Send(m3) ``` 可用 ParseMode: - `boxbotapi.ModeRichText` - `boxbotapi.ModeText` - `boxbotapi.ModeMarkdown` - `boxbotapi.ModeMarkdownV2` - `boxbotapi.ModeHTML` - `boxbotapi.ModeImage` - `boxbotapi.ModeVideo` - `boxbotapi.ModeFile` `content` 填写规则(按 `parse_mode`): - `richtext`(默认):填写普通文本或富文本语义字符串,例如 `你好,欢迎使用 DeBox Bot`。 - `text`:填写纯文本(不解析 Markdown/HTML),例如 `plain text only`。 - `Markdown`:填写 Markdown 字符串,例如 `**bold**`。 - `MarkdownV2`:填写 MarkdownV2 字符串(注意转义),例如 `\\*bold\\*`。 - `HTML`:填写 HTML 片段字符串,例如 `Hello`。 - `image`:`content` 填可公网访问的图片 URL,例如 `https://cdn.example.com/a.png`。 - `video`:`content` 填可公网访问的视频 URL,例如 `https://cdn.example.com/demo.mp4`。 - `file`:`content` 填可公网访问的文件 URL,例如 `https://cdn.example.com/spec.pdf`。 - 文本类(`richtext/text/Markdown/MarkdownV2/HTML`)最大长度 5000 字符。 ### 3.7 按钮与回调 ```go markup := boxbotapi.NewInlineKeyboardMarkup( boxbotapi.NewInlineKeyboardRow( boxbotapi.NewInlineKeyboardButtonData("查看详情", "detail"), boxbotapi.NewInlineKeyboardButtonURL("打开官网", "https://debox.pro"), ), ) msg := boxbotapi.NewMessage("cc0onr82", "group", "请选择操作") msg.ParseMode = boxbotapi.ModeRichText msg.ReplyMarkup = markup _, _ = bot.Send(msg) ``` 处理回调: ```go if upd.CallbackQuery != nil { data := upd.CallbackQuery.Data _ = data } ``` ### 3.8 编辑消息 ```go edit := boxbotapi.NewEditMessageText("cc0onr82", "group", "MESSAGE_ID", "编辑后的文本") edit.ParseMode = boxbotapi.ModeRichText _, err := bot.Send(edit) if err != nil { log.Printf("edit failed: %v", err) } ``` --- ## DeBox 机器人 Nodejs SDK # DeBox 机器人 Nodejs SDK 使用文档 源码仓库: - [debox-pro/debox-chat-nodejs-sdk](https://github.com/debox-pro/debox-chat-nodejs-sdk) ## 1. SDK 功能总览 `debox-chat-nodejs-sdk` 提供: - Bot 初始化:`NewBotAPI(apiKey, apiSecret)` - 消息发送:`bot.Send(...)` - Long Polling 收消息:`GetUpdates` / `GetUpdatesChan` - 按钮与回调处理 - 编辑消息:`NewEditMessageText(...)` / `NewEditMessageTextAndMarkup(...)` ## 2. 收消息模式说明 本文聚焦 Long Polling 模式。 Webhook 与 Long Polling 严格互斥: - 开放平台配置了 webhook 后,消息只会进入 webhook。 - 要使用轮询收消息,先清空 webhook 配置。 Webhook 请参考: - [DeBox 机器人 Go SDK Webhook](/GO-SDK-Webhook) ## 3. 安装与初始化 ### 3.1 安装 SDK ```bash npm install github:debox-pro/debox-chat-nodejs-sdk ``` 或本地拉取安装: ```bash git clone https://github.com/debox-pro/debox-chat-nodejs-sdk.git cd debox-chat-nodejs-sdk npm install ``` ### 3.2 准备凭证 从 DeBox 开放平台获取: - `API_KEY`(必填) - `API_SECRET`(建议) 环境变量示例: ```bash export DEBOX_BOT_API_KEY="YOUR_APP_KEY" export DEBOX_BOT_API_SECRET="YOUR_API_SECRET" ``` ### 3.3 发送第一条消息 ```js const boxbotapi = require("./boxbotapi"); async function main() { const bot = await boxbotapi.NewBotAPI( process.env.DEBOX_BOT_API_KEY, process.env.DEBOX_BOT_API_SECRET || "", ); const msg = boxbotapi.NewMessage("cc0onr82", "group", "Hello from Nodejs SDK"); msg.ParseMode = boxbotapi.ModeRichText; const sent = await bot.Send(msg); console.log("sent message_id=", sent.MessageID); } main().catch(console.error); ``` ## 4. Long Polling 收消息 ```js const boxbotapi = require("./boxbotapi"); async function run() { boxbotapi.Debug = false; boxbotapi.MessageListener = true; const bot = await boxbotapi.NewBotAPI( process.env.DEBOX_BOT_API_KEY, process.env.DEBOX_BOT_API_SECRET || "", ); const u = boxbotapi.NewUpdate(0); u.Timeout = 60; for await (const update of bot.GetUpdatesChan(u)) { if (update.Message) { const text = update.Message.Text || ""; console.log("message:", text); const reply = boxbotapi.NewMessage( update.Message.Chat.ID, update.Message.Chat.Type, `Received: ${text}`, ); reply.ParseMode = boxbotapi.ModeRichText; await bot.Send(reply); } if (update.CallbackQuery) { console.log("callback:", update.CallbackQuery.Data); } } } run().catch(console.error); ``` ## 5. ParseMode 与 content 规则 SDK 常量: - `boxbotapi.ModeRichText` - `boxbotapi.ModeMarkdown` - `boxbotapi.ModeMarkdownV2` - `boxbotapi.ModeHTML` - `boxbotapi.ModeImage` - `boxbotapi.ModeVideo` - `boxbotapi.ModeFile` `content` 填写规则: - `richtext` / `Markdown` / `MarkdownV2` / `HTML`:填写文本内容。 - `image` / `video` / `file`:`content` 必须为公网可访问 URL。 - 文本内容最大长度 5000 字符。 ## 6. 按钮与回调 ```js const markup = boxbotapi.NewInlineKeyboardMarkup( boxbotapi.NewInlineKeyboardRow( boxbotapi.NewInlineKeyboardButtonData("查看详情", "detail"), boxbotapi.NewInlineKeyboardButtonURL("打开文档", "https://docs.debox.pro"), ), ); const msg = boxbotapi.NewMessage("cc0onr82", "group", "请选择"); msg.ParseMode = boxbotapi.ModeRichText; msg.ReplyMarkup = markup; await bot.Send(msg); ``` 处理回调并编辑消息: ```js if (update.CallbackQuery) { const data = update.CallbackQuery.Data; const chat = update.CallbackQuery.Message.Chat; const messageId = update.CallbackQuery.Message.MessageID; const edit = boxbotapi.NewEditMessageText(chat.ID, chat.Type, messageId, `clicked: ${data}`); edit.ParseMode = boxbotapi.ModeRichText; await bot.Send(edit); } ``` ## 7. 路由字段说明 发送/编辑消息时: - `chat_type=group` -> `chat_id` 填群 `gid` - `chat_type=private` -> `chat_id` 填用户 `user_id`(invite code) ## 8. 常见问题 1. 收不到消息: - 先检查是否已配置 webhook(与轮询互斥)。 - 确保 `boxbotapi.MessageListener = true`。 2. 鉴权失败: - 检查 `API_KEY/API_SECRET` 是否正确。 3. 媒体发送失败: - 检查 URL 是否可公网直接访问。 --- ## DeBox 机器人 Python SDK # DeBox 机器人 Python SDK 使用文档 源码仓库: - [debox-pro/debox-chat-python-sdk](https://github.com/debox-pro/debox-chat-python-sdk) ## 1. SDK 功能总览 `debox-chat-python-sdk` 提供: - Bot 初始化:`NewBotAPI(api_key, api_secret)` - 消息发送:`bot.Send(...)` - Long Polling 收消息:`GetUpdates` / `GetUpdatesChan` - 按钮与回调处理 - 编辑消息:`NewEditMessageText(...)` / `NewEditMessageTextAndMarkup(...)` ## 2. 收消息模式说明 本文仅覆盖 Long Polling 模式。 Webhook 与 Long Polling 严格互斥: - 开放平台配置了 webhook 后,消息优先走 webhook。 - 要使用轮询,先清空 webhook 配置。 Webhook 文档: - [DeBox 机器人 Go SDK Webhook](/GO-SDK-Webhook) ## 3. 安装与初始化 ### 3.1 安装 SDK ```bash pip install git+https://github.com/debox-pro/debox-chat-python-sdk.git ``` 或本地拉取安装: ```bash git clone https://github.com/debox-pro/debox-chat-python-sdk.git cd debox-chat-python-sdk pip install -e . ``` ### 3.2 准备凭证 从 DeBox 开放平台获取: - `API_KEY`(必填) - `API_SECRET`(建议) ```bash export DEBOX_BOT_API_KEY="YOUR_APP_KEY" export DEBOX_BOT_API_SECRET="YOUR_API_SECRET" ``` ### 3.3 发送第一条消息 ```python import os import boxbotapi bot = boxbotapi.NewBotAPI( os.getenv("DEBOX_BOT_API_KEY", ""), os.getenv("DEBOX_BOT_API_SECRET", ""), ) msg = boxbotapi.NewMessage("cc0onr82", "group", "Hello from Python SDK") msg.ParseMode = boxbotapi.ModeRichText sent = bot.Send(msg) print("sent message_id=", sent.MessageID) ``` ## 4. Long Polling 收消息 ```python import os import boxbotapi from boxbotapi import configs as cfg cfg.Debug = False cfg.MessageListener = True bot = boxbotapi.NewBotAPI( os.getenv("DEBOX_BOT_API_KEY", ""), os.getenv("DEBOX_BOT_API_SECRET", ""), ) u = boxbotapi.NewUpdate(0) u.Timeout = 60 for update in bot.GetUpdatesChan(u): if update.Message is not None: text = update.Message.Text or "" print("message:", text) reply = boxbotapi.NewMessage( update.Message.Chat.ID, update.Message.Chat.Type, f"Received: {text}", ) reply.ParseMode = boxbotapi.ModeRichText bot.Send(reply) if update.CallbackQuery is not None: print("callback:", update.CallbackQuery.Data) ``` ## 5. ParseMode 与 content 规则 SDK 常量: - `boxbotapi.ModeRichText` - `boxbotapi.ModeMarkdown` - `boxbotapi.ModeMarkdownV2` - `boxbotapi.ModeHTML` - `boxbotapi.ModeImage` - `boxbotapi.ModeVideo` - `boxbotapi.ModeFile` `content` 填写规则: - `richtext` / `Markdown` / `MarkdownV2` / `HTML`:填写文本内容。 - `image` / `video` / `file`:`content` 必须是公网可访问 URL。 - 文本内容最大长度 5000 字符。 ## 6. 按钮与回调 ```python markup = boxbotapi.NewInlineKeyboardMarkup( boxbotapi.NewInlineKeyboardRow( boxbotapi.NewInlineKeyboardButtonData("查看详情", "detail"), boxbotapi.NewInlineKeyboardButtonURL("打开文档", "https://docs.debox.pro"), ) ) msg = boxbotapi.NewMessage("cc0onr82", "group", "请选择") msg.ParseMode = boxbotapi.ModeRichText msg.ReplyMarkup = markup bot.Send(msg) ``` 处理回调并编辑消息: ```python if update.CallbackQuery is not None: data = update.CallbackQuery.Data chat = update.CallbackQuery.Message.Chat message_id = update.CallbackQuery.Message.MessageID edit = boxbotapi.NewEditMessageText(chat.ID, chat.Type, message_id, f"clicked: {data}") edit.ParseMode = boxbotapi.ModeRichText bot.Send(edit) ``` ## 7. 路由字段说明 发送/编辑消息时: - `chat_type=group` -> `chat_id` 填群 `gid` - `chat_type=private` -> `chat_id` 填用户 `user_id`(invite code) ## 8. 常见问题 1. 收不到消息: - 先检查是否已配置 webhook(与轮询互斥)。 - 确保 `cfg.MessageListener = True`。 2. 鉴权失败: - 检查 `API_KEY/API_SECRET` 与签名链路。 3. 媒体发送失败: - 检查 URL 是否可公网直接访问。 --- ## DeBox 机器人 Go SDK Webhook # DeBox 机器人 Go SDK Webhook 使用文档 源码仓库: - [debox-pro/debox-chat-go-sdk](https://github.com/debox-pro/debox-chat-go-sdk) 本文面向后端开发者,说明如何在 Go 服务中以生产可用的方式接入 DeBox Bot Webhook,包括回调鉴权、消息结构、媒体消息解析、入群事件处理,以及使用 Go SDK 回发消息。 ## 1. Webhook 与 Long Polling(严格互斥) DeBox 机器人收消息有两种方式: 1. Webhook:DeBox 主动 `POST` 回调到你的服务。 2. Long Polling:你的程序调用 `getUpdates` 主动拉取。 严格互斥规则: - 只要在开放平台配置了 Webhook URL,Webhook 就会成为唯一有效的收消息链路。 - 此时 `GetUpdates/GetUpdatesChan` 作为收消息主链路会失效。 结论: - 选择 Webhook,就不要再用 Long Polling 收消息。 - 若要切回 Long Polling,必须先清空开放平台上的 Webhook 配置。 ## 2. 什么时候使用 Webhook 建议在以下场景使用: - 服务已部署在公网 HTTP/HTTPS。 - 需要比轮询更低的消息延迟。 - 希望采用事件推送模型。 - 需要处理图片、视频、文件消息或入群事件。 ## 3. 开放平台配置 在 DeBox 机器人控制台配置 Webhook URL,例如: - `https://your-domain.com/bot/webhook` 同时请注意: - `App Domain` 需正确配置。 - Webhook URL 必须是公网可访问、长期稳定的地址。 - 修改 Webhook URL 后,Webhook Key 会更新。 ## 4. 回调协议说明 ### 4.1 HTTP 请求规范 DeBox 会发送: - 方法:`POST` - Content-Type:`application/json` - 请求头:`X-API-KEY: ` 推荐做法: - 缺少或校验失败的 `X-API-KEY` 直接拒绝。 - 仅在服务端成功接收事件后返回 `200 OK`。 - 如业务要求幂等,请在你自己的系统中实现事件去重。 ### 4.2 顶层回调字段 Webhook 回调使用扁平化 JSON 结构。开发者最常用的字段如下: | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `from_user_id` | `string` | 是 | 当前事件发送者在 Bot 侧暴露的 DeBox 邀请码。私聊场景是对方用户,群聊场景是发言用户;当前入群事件实现中,这里是新入群成员。 | | `to_user_id` | `string` | 是 | 当前目标 Bot 的邀请码。 | | `name` | `string` | 否 | `from_user_id` 的显示名。 | | `pic` | `string` | 否 | `from_user_id` 的头像 URL。 | | `address` | `string` | 否 | `from_user_id` 的钱包地址。 | | `language` | `string` | 否 | 用户语言信息,存在则返回。 | | `group_id` | `string` | 否 | DeBox 群组 ID 或语聊房 ID。私聊时为空字符串。 | | `parse_mode` | `string` | 是 | 当前回调内容类型,例如 `text`、`image`、`video`、`file`、`link`、`event:joinGroup`。 | | `message` | `string` | 是 | 归一化后的消息内容。具体语义由 `parse_mode` 决定。 | | `message_raw` | `string` | 是 | DeBox 解析后的原始内容。具体语义由 `parse_mode` 决定。 | | `mention_users` | `array` | 否 | 群文本消息中被提及的用户列表。仅在有 @ 时返回。 | `mention_users` 单项结构: | 字段 | 类型 | 说明 | | --- | --- | --- | | `user_id` | `string` | 被提及用户的邀请码 | | `name` | `string` | 显示名 | | `pic` | `string` | 头像 URL | | `address` | `string` | 钱包地址 | ### 4.3 `parse_mode` 类型说明 | `parse_mode` | 含义 | `message` / `message_raw` 的内容 | | --- | --- | --- | | `text` | 文本或命令消息 | 消息文本。`message` 会移除 @,`message_raw` 保留原始文本。 | | `image` | 图片消息 | 图片 URL | | `video` | 视频消息 | 视频 URL | | `file` | 文件消息 | 文件 URL | | `link` | 分享链接或 DApp 分享 | 链接 URL | | `event:joinGroup` | 入群事件 | 当前实现中为新成员的邀请码 | 关键说明: - `image`、`video`、`file` 回调的是 URL,不是二进制文件流。 - `text` 场景中,`message` 适合做业务解析,`message_raw` 适合保留原始输入。 - `event:joinGroup` 是事件型回调,不是普通会话消息: - `group_id` 表示目标群组。 - 当前实现中 `from_user_id` 为新入群成员。 - 当前实现中 `message` 也为新入群成员的邀请码。 ## 5. 按类型查看回调示例 ### 5.1 文本消息 ```json { "from_user_id": "u_alice", "to_user_id": "u_bot", "name": "Alice", "pic": "https://cdn.example.com/alice.png", "address": "0x1234", "language": "zh", "group_id": "cc0onr82", "parse_mode": "text", "message": "hello bot", "message_raw": "@MyBot hello bot", "mention_users": [ { "user_id": "u_bot", "name": "MyBot", "pic": "https://cdn.example.com/bot.png", "address": "" } ] } ``` ### 5.2 图片消息 ```json { "from_user_id": "u_alice", "to_user_id": "u_bot", "name": "Alice", "language": "zh", "group_id": "cc0onr82", "parse_mode": "image", "message": "https://cdn.example.com/image.png", "message_raw": "https://cdn.example.com/image.png" } ``` ### 5.3 视频消息 ```json { "from_user_id": "u_alice", "to_user_id": "u_bot", "name": "Alice", "language": "zh", "group_id": "cc0onr82", "parse_mode": "video", "message": "https://cdn.example.com/video.mp4", "message_raw": "https://cdn.example.com/video.mp4" } ``` ### 5.4 文件消息 ```json { "from_user_id": "u_alice", "to_user_id": "u_bot", "name": "Alice", "language": "zh", "group_id": "cc0onr82", "parse_mode": "file", "message": "https://cdn.example.com/report.pdf", "message_raw": "https://cdn.example.com/report.pdf" } ``` ### 5.5 入群事件 ```json { "from_user_id": "u_new_member", "to_user_id": "u_bot", "name": "New Member", "pic": "https://cdn.example.com/new-member.png", "address": "0xabcd", "language": "zh", "group_id": "cc0onr82", "parse_mode": "event:joinGroup", "message": "u_new_member", "message_raw": "u_new_member" } ``` 典型用途: - 新成员欢迎语。 - 入群自动引导。 - 成员事件记录与风控侧同步。 ## 6. Go 服务接收设计 推荐服务端处理流程: 1. 校验 `X-API-KEY`。 2. 解析 JSON 到强类型结构体。 3. 根据 `parse_mode` 分发业务逻辑。 4. 根据 `group_id` 判断私聊或群聊上下文。 5. 使用 Go SDK 回发消息。 ### 6.1 推荐结构体定义 ```go type WebhookUser struct { UserID string `json:"user_id"` Name string `json:"name"` Pic string `json:"pic"` Address string `json:"address"` } type WebhookPayload struct { FromUserID string `json:"from_user_id"` ToUserID string `json:"to_user_id"` Name string `json:"name"` Pic string `json:"pic"` Address string `json:"address"` Language string `json:"language"` GroupID string `json:"group_id"` ParseMode string `json:"parse_mode"` Message string `json:"message"` MessageRaw string `json:"message_raw"` MentionUsers []WebhookUser `json:"mention_users"` } ``` ### 6.2 完整示例(Gin + Go SDK) ```go package main import ( "fmt" "net/http" "os" "github.com/gin-gonic/gin" boxbotapi "github.com/debox-pro/debox-chat-go-sdk/boxbotapi" ) type WebhookUser struct { UserID string `json:"user_id"` Name string `json:"name"` Pic string `json:"pic"` Address string `json:"address"` } type WebhookPayload struct { FromUserID string `json:"from_user_id"` ToUserID string `json:"to_user_id"` Name string `json:"name"` Pic string `json:"pic"` Address string `json:"address"` Language string `json:"language"` GroupID string `json:"group_id"` ParseMode string `json:"parse_mode"` Message string `json:"message"` MessageRaw string `json:"message_raw"` MentionUsers []WebhookUser `json:"mention_users"` } func main() { webhookKey := os.Getenv("DEBOX_WEBHOOK_KEY") apiKey := os.Getenv("DEBOX_BOT_API_KEY") apiSecret := os.Getenv("DEBOX_BOT_API_SECRET") if webhookKey == "" || apiKey == "" || apiSecret == "" { panic("缺少必要环境变量:DEBOX_WEBHOOK_KEY / DEBOX_BOT_API_KEY / DEBOX_BOT_API_SECRET") } bot, err := boxbotapi.NewBotAPI(apiKey, apiSecret) if err != nil { panic(err) } r := gin.Default() r.POST("/bot/webhook", func(c *gin.Context) { if c.GetHeader("X-API-KEY") != webhookKey { c.JSON(http.StatusUnauthorized, gin.H{"error": "invalid webhook key"}) return } var payload WebhookPayload if err := c.ShouldBindJSON(&payload); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } chatType := "private" chatID := payload.FromUserID if payload.GroupID != "" { chatType = "group" chatID = payload.GroupID } switch payload.ParseMode { case "text": reply := boxbotapi.NewMessage(chatID, chatType, "已收到文本消息:"+payload.Message) reply.ParseMode = boxbotapi.ModeText _, err = bot.Send(reply) case "image": reply := boxbotapi.NewMessage(chatID, chatType, "已收到图片:"+payload.Message) reply.ParseMode = boxbotapi.ModeText _, err = bot.Send(reply) case "video": reply := boxbotapi.NewMessage(chatID, chatType, "已收到视频:"+payload.Message) reply.ParseMode = boxbotapi.ModeText _, err = bot.Send(reply) case "file": reply := boxbotapi.NewMessage(chatID, chatType, "已收到文件:"+payload.Message) reply.ParseMode = boxbotapi.ModeText _, err = bot.Send(reply) case "event:joinGroup": welcome := fmt.Sprintf("欢迎 %s 加入群组", payload.FromUserID) reply := boxbotapi.NewMessage(chatID, chatType, welcome) reply.ParseMode = boxbotapi.ModeText _, err = bot.Send(reply) default: reply := boxbotapi.NewMessage(chatID, chatType, "暂不支持的回调类型:"+payload.ParseMode) reply.ParseMode = boxbotapi.ModeText _, err = bot.Send(reply) } if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{"ok": true}) }) _ = r.Run(":8080") } ``` ## 7. 使用 Go SDK 回发图片、视频、文件 当 Bot 主动回发媒体时,消息内容使用 URL,并设置对应 `ParseMode`。 ```go image := boxbotapi.NewMessage("cc0onr82", "group", "https://cdn.example.com/welcome.png") image.ParseMode = boxbotapi.ModeImage _, _ = bot.Send(image) video := boxbotapi.NewMessage("cc0onr82", "group", "https://cdn.example.com/intro.mp4") video.ParseMode = boxbotapi.ModeVideo _, _ = bot.Send(video) file := boxbotapi.NewMessage("cc0onr82", "group", "https://cdn.example.com/guide.pdf") file.ParseMode = boxbotapi.ModeFile _, _ = bot.Send(file) ``` 发送侧 `ParseMode` 规则: - `boxbotapi.ModeText`:普通文本 - `boxbotapi.ModeImage`:内容必须是图片 URL - `boxbotapi.ModeVideo`:内容必须是视频 URL - `boxbotapi.ModeFile`:内容必须是文件 URL ## 8. 生产环境建议 - 将 Webhook 鉴权和 JSON 解析封装为中间件或统一适配层。 - 业务日志至少记录 `parse_mode`、`from_user_id`、`to_user_id`、`group_id`。 - 媒体 URL 不应被长期信任,建议按你的留存策略拉取、转存或校验。 - 群机器人应按 `group_id` 做路由,不要假设一个 Bot 只服务一个群。 - 如下游处理耗时较长,建议异步化,避免回调阻塞。 ## 9. 常见问题 - 配了 Webhook 但收不到消息: - 先检查 URL 可达性、TLS、服务日志和 `X-API-KEY` 校验逻辑。 - 同时开 Webhook 和 Long Polling: - 两者必须二选一。开启 Webhook 后,Polling 不再是有效收消息链路。 - 把媒体消息当成文件上传流处理: - Webhook 返回的是媒体 URL,不是文件流。 - 只判断 `message` 不判断 `parse_mode`: - 必须优先根据 `parse_mode` 做分发。 - 本地开发没有公网地址: - 用隧道工具临时暴露本地端口联调。 ## 10. 相关文档 - Long Polling 接入文档:[DeBox 机器人 Go SDK](/GO-SDK) --- ## DeBox 机器人 区块链按钮 # DeBox 机器人区块链按钮(button3)使用文档 本文仅做两件事: 1. 说明 `button3` 里区块链按钮参数(`eth_getBalanceStr` 等) 2. 提供 `main.go` 原封不动源码,直接复制可运行 ## 1. button3 按钮参数(按源码原样) 以下参数字符串来自 `main.go`,在 `/start` 时写入按钮 `CallbackData`: - `eth_getBalanceStr` - `personal_signStr` - `eth_signTypedData_v4Str` - `eth_sendTransactionStrNative` - `eth_sendTransactionStrToken` - `eth_sendTransactionApproveStr` - `sendTransactionStrTransferFrom` - `sendTransactionStrMint` - `sendTransactionStrSwap` - `sendTransactionStrDeploy` 参数替换规则(源码原样逻辑): - `selfAddress` -> 当前用户钱包地址 - `botAddress` -> 机器人地址(部分 data 使用 `botAddress[2:]`) - 会移除空格、换行、制表符(`escapeAllStr`) ## 2. main.go(原封不动) ```go package main import ( "context" "log" "strings" "github.com/debox-pro/debox-chat-go-sdk/boxbotapi" ) var ( // Button texts homeInfoContent = "home content" eth_getBalance = "查账户余额" // eth_gasPrice = "查gas费" personal_sign = "personal_sign" eth_signTypedData_v4 = "eth_signTypedData_v4" eth_sendTransaction_native = "原生币转账" eth_sendTransaction_token_approve = "Approve授权支付" eth_sendTransaction_token_TransferFrom = "第三方授权转账TransferFrom" eth_sendTransaction_Mint = "Mint" eth_sendTransaction_token = "合约币转账" eth_sendTransaction_swap = "swap" eth_sendTransaction_deploy = "合约部署" walletRequest = "debox://wallet/request" bot *boxbotapi.BotAPI // Keyboard layout for the second menu. Two buttons, one per row homeMenuMarkup = boxbotapi.NewInlineKeyboardMarkup( boxbotapi.NewInlineKeyboardRow( boxbotapi.NewInlineKeyboardButtonDataWithColor("", eth_getBalance, walletRequest, eth_getBalance, "#21C161"), ), // boxbotapi.NewInlineKeyboardRow( // boxbotapi.NewInlineKeyboardButtonDataWithColor("", eth_gasPrice, walletRequest, eth_gasPrice, "#21C161"), // ), boxbotapi.NewInlineKeyboardRow( boxbotapi.NewInlineKeyboardButtonDataWithColor("", personal_sign, walletRequest, personal_sign, "#21C161"), ), boxbotapi.NewInlineKeyboardRow( boxbotapi.NewInlineKeyboardButtonDataWithColor("", eth_signTypedData_v4, walletRequest, eth_signTypedData_v4, "#21C161"), ), boxbotapi.NewInlineKeyboardRow( boxbotapi.NewInlineKeyboardButtonDataWithColor("", eth_sendTransaction_native, walletRequest, eth_sendTransaction_native, "#21C161"), ), boxbotapi.NewInlineKeyboardRow( boxbotapi.NewInlineKeyboardButtonDataWithColor("", eth_sendTransaction_token, walletRequest, eth_sendTransaction_token, "#21C161"), ), boxbotapi.NewInlineKeyboardRow( boxbotapi.NewInlineKeyboardButtonDataWithColor("", eth_sendTransaction_swap, walletRequest, eth_sendTransaction_swap, "#21C161"), ), boxbotapi.NewInlineKeyboardRow( boxbotapi.NewInlineKeyboardButtonDataWithColor("", eth_sendTransaction_token_approve, walletRequest, eth_sendTransaction_token_approve, "#21C161"), ), boxbotapi.NewInlineKeyboardRow( boxbotapi.NewInlineKeyboardButtonDataWithColor("", eth_sendTransaction_token_TransferFrom, walletRequest, eth_sendTransaction_token_TransferFrom, "#21C161"), ), boxbotapi.NewInlineKeyboardRow( boxbotapi.NewInlineKeyboardButtonDataWithColor("", eth_sendTransaction_Mint, walletRequest, eth_sendTransaction_Mint, "#21C161"), ), // boxbotapi.NewInlineKeyboardRow( // boxbotapi.NewInlineKeyboardButtonDataWithColor("", eth_sendTransaction_token, walletRequest, eth_sendTransaction_token, "#21C161"), // ), // boxbotapi.NewInlineKeyboardRow( // boxbotapi.NewInlineKeyboardButtonDataWithColor("", eth_sendTransaction_swap, walletRequest, eth_sendTransaction_swap, "#21C161"), // ), boxbotapi.NewInlineKeyboardRow( boxbotapi.NewInlineKeyboardButtonDataWithColor("", eth_sendTransaction_deploy, walletRequest, eth_sendTransaction_deploy, "#21C161"), ), ) ) func main() { var err error boxbotapi.MessageListener = true boxbotapi.Debug = true bot, err = boxbotapi.NewBotAPI("", "") if err != nil { // Abort if something is wrong log.Panic(err) } // Set this to true to log all interactions with debox servers u := boxbotapi.NewUpdate(0) u.Timeout = 30 // Create a new cancellable background context. Calling `cancel()` leads to the cancellation of the context ctx := context.Background() // ctx, cancel := context.WithCancel(ctx) // `updates` is a golang channel which receives debox updates updates := bot.GetUpdatesChan(u) // Pass cancellable context to goroutine go receiveUpdates(ctx, updates) // Tell the user the bot is online log.Println("Start listening for updates. Press enter to stop") //new stop select {} } func receiveUpdates(ctx context.Context, updates boxbotapi.UpdatesChannel) { // `for {` means the loop is infinite until we manually stop it for { select { // stop looping if ctx is cancelled case <-ctx.Done(): return // receive update from channel and then handle it case update := <-updates: handleUpdate(update) } } } func handleUpdate(update boxbotapi.Update) { switch { // Handle messages case update.Message != nil: handleMessage(update.Message) break // Handle button clicks case update.CallbackQuery != nil: handleButton(update.CallbackQuery) break } } func handleMessage(message *boxbotapi.Message) { user := message.From text := message.Text botAddress := bot.Self.Address if user == nil { return } // Print to console log.Printf("%s wrote %s", user.Name, text) var err error if len(text) > 0 { msg := boxbotapi.NewMessage(message.Chat.ID, message.Chat.Type, message.Text) msg.ParseMode = boxbotapi.ModeHTML if text == "/start" { msg.Text = homeInfoContent msg.ReplyMarkup = homeMenuMarkup var eth_getBalanceStr = `{ "jsonrpc": "2.0", "id": 101, "method": "eth_getBalance", "params": [ { "chainId": "0x38" }, "selfAddress", "latest" ] }` //hexString := hex.EncodeToString(byteData) var personal_signStr = `{ "jsonrpc": "2.0", "id": 102, "method": "personal_sign", "params": [ { "chainId": "0x38" }, "0x506c65617365207369676e2074686973206d65737361676520746f20636f6e6669726d20796f7572206964656e746974792e", "selfAddress" ] }` //typedata_v4 // 使用 any 类型代替 interface{} var eth_signTypedData_v4Str = `{ "jsonrpc": "2.0", "id": 103, "method": "eth_signTypedData_v4", "params": [ "selfAddress", { "types": { "EIP712Domain": [ { "name": "name", "type": "string" }, { "name": "version", "type": "string" }, { "name": "chainId", "type": "uint256" }, { "name": "verifyingContract", "type": "address" } ], "Person": [ { "name": "name", "type": "string" }, { "name": "wallet", "type": "address" } ], "Mail": [ { "name": "from", "type": "Person" }, { "name": "to", "type": "Person" }, { "name": "contents", "type": "string" } ] }, "primaryType": "Mail", "domain": { "name": "Ether Mail", "version": "1", "chainId": 1, "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" }, "message": { "from": { "name": "Cow", "wallet": "selfAddress" }, "to": { "name": "Bob", "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" }, "contents": "Hello, Bob!" } } ] }` var eth_sendTransactionStrNative = `{ "jsonrpc": "2.0", "id": 104, "method": "eth_sendTransaction", "params": [ { "chainId": "0x38", "to": "botAddress", "from": "selfAddress", "gas": "0x76c0", "value": "0x38D7EA4C68000", "data": "0x", "gasPrice": "0x4a817c800" } ] }` var eth_sendTransactionStrToken = `{ "jsonrpc": "2.0", "id": 105, "method": "eth_sendTransaction", "params": [ { "chainId": "0x38", "from": "selfAddress", "to": "0x6386Adc4BC9c21984E34fD916BB349dD861742af", "value": "0x0", "data": "0xa9059cbb000000000000000000000000botAddress0000000000000000000000000000000000000000000000000de0b6b3a7640000", "gas": "0x76c0", "gasPrice": "0x4a817c800" } ] }` var eth_sendTransactionApproveStr = `{ "jsonrpc": "2.0", "id": 106, "method": "eth_sendTransaction", "params": [ { "chainId": "0x38", "from": "selfAddress", "to": "0x6386Adc4BC9c21984E34fD916BB349dD861742af", "gas": "0xb89b", "gasPrice": "0x5d27a277", "value": "0x0", "data": "0x095ea7b3000000000000000000000000botAddress0000000000000000000000000000000000000000000000000de0b6b3a7640000" } ] }` var sendTransactionStrTransferFrom = `{ "jsonrpc": "2.0", "id": 106, "method": "eth_sendTransaction", "params": [ { "from": "selfAddress", "chainId":"0x38", "data": "0x23b872dd000000000000000000000000cba3fce9d49ce5d7870443f324a8dd56a5788bfc0000000000000000000000006c663ff4b23ba3452e5ad1ad0c567e54b5ceee2e0000000000000000000000000000000000000000000000000de0b6b3a7640000", "gas": "0xad12", "gasPrice": "0x596c5e37", "to": "0x6386Adc4BC9c21984E34fD916BB349dD861742af", "value": "0x0" } ] }` var sendTransactionStrMint = `{ "jsonrpc": "2.0", "id": 106, "method": "eth_sendTransaction", "params": [ { "chainId":"0xa", "from": "selfAddress", "data": "0x3b4b1381000000000000000000000000000000000000000000000000000000000000000a", "gas": "0x5135c", "gasPrice": "0x18df9", "to": "0x98c56f0903d1cb0c7eaedb91fb9d58409bbb1fbe", "value": "0x0" } ] }` var sendTransactionStrSwap = `{ "jsonrpc": "2.0", "id": 106, "method": "swap", "params": [ { "fromAddress": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", "toAddress": "0x6386Adc4BC9c21984E34fD916BB349dD861742af", "fromChainId": "0x38", "toChainId": "0x38" } ] }` var sendTransactionStrDeploy = `{ "id": 4218609415, "jsonrpc": "2.0", "method": "eth_sendTransaction", "params": [ { "chainId":"0x38", "from": "selfAddress", "data":"0x60806040523480156200001157600080fd5b506040518060400160405280600c81526020017f54657374446170704e46547300000000000000000000000000000000000000008152506040518060400160405280600381526020017f54444e000000000000000000000000000000000000000000000000000000000081525081600090816200008f919062000324565b508060019081620000a1919062000324565b5050506200040b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200012c57607f821691505b602082108103620001425762000141620000e4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200016d565b620001b886836200016d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000205620001ff620001f984620001d0565b620001da565b620001d0565b9050919050565b6000819050919050565b6200022183620001e4565b6200023962000230826200020c565b8484546200017a565b825550505050565b600090565b6200025062000241565b6200025d81848462000216565b505050565b5b8181101562000285576200027960008262000246565b60018101905062000263565b5050565b601f821115620002d4576200029e8162000148565b620002a9846200015d565b81016020851015620002b9578190505b620002d1620002c8856200015d565b83018262000262565b50505b505050565b600082821c905092915050565b6000620002f960001984600802620002d9565b1980831691505092915050565b6000620003148383620002e6565b9150826002028217905092915050565b6200032f82620000aa565b67ffffffffffffffff8111156200034b576200034a620000b5565b5b62000357825462000113565b6200036482828562000289565b600060209050601f8311600181146200039c576000841562000387578287015190505b62000393858262000306565b86555062000403565b601f198416620003ac8662000148565b60005b82811015620003d657848901518255600182019150602085019450602081019050620003af565b86831015620003f65784890151620003f2601f891682620002e6565b8355505b6001600288020188555050505b505050505050565b612be6806200041b6000396000f3fe608060405234801561001057600080fd5b50600436106100f45760003560e01c806342842e0e11610097578063a22cb46511610066578063a22cb46514610283578063b88d4fde1461029f578063c87b56dd146102bb578063e985e9c5146102eb576100f4565b806342842e0e146101e95780636352211e1461020557806370a082311461023557806395d89b4114610265576100f4565b8063081812fc116100d3578063081812fc14610165578063095ea7b31461019557806323b872dd146101b15780633b4b1381146101cd576100f4565b80629a9b7b146100f957806301ffc9a71461011757806306fdde0314610147575b600080fd5b61010161031b565b60405161010e91906119ac565b60405180910390f35b610131600480360381019061012c9190611a33565b61032c565b60405161013e9190611a7b565b60405180910390f35b61014f61040e565b60405161015c9190611b26565b60405180910390f35b61017f600480360381019061017a9190611b74565b6104a0565b60405161018c9190611be2565b60405180910390f35b6101af60048036038101906101aa9190611c29565b6104e6565b005b6101cb60048036038101906101c69190611c69565b6105fd565b005b6101e760048036038101906101e29190611b74565b61065d565b005b61020360048036038101906101fe9190611c69565b6106ac565b005b61021f600480360381019061021a9190611b74565b6106cc565b60405161022c9190611be2565b60405180910390f35b61024f600480360381019061024a9190611cbc565b610752565b60405161025c91906119ac565b60405180910390f35b61026d610809565b60405161027a9190611b26565b60405180910390f35b61029d60048036038101906102989190611d15565b61089b565b005b6102b960048036038101906102b49190611e8a565b6108b1565b005b6102d560048036038101906102d09190611b74565b610913565b6040516102e29190611b26565b60405180910390f35b61030560048036038101906103009190611f0d565b6109ac565b6040516103129190611a7b565b60405180910390f35b60006103276006610a40565b905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103f757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610407575061040682610a4e565b5b9050919050565b60606000805461041d90611f7c565b80601f016020809104026020016040519081016040528092919081815260200182805461044990611f7c565b80156104965780601f1061046b57610100808354040283529160200191610496565b820191906000526020600020905b81548152906001019060200180831161047957829003601f168201915b5050505050905090565b60006104ab82610ab8565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104f1826106cc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610561576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105589061201f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610580610b03565b73ffffffffffffffffffffffffffffffffffffffff1614806105af57506105ae816105a9610b03565b6109ac565b5b6105ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e5906120b1565b60405180910390fd5b6105f88383610b0b565b505050565b61060e610608610b03565b82610bc4565b61064d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064490612143565b60405180910390fd5b610658838383610c59565b505050565b6000600190505b8181116106a8576106756006610f52565b60006106816006610a40565b905061069461068e610b03565b82610f68565b5080806106a090612192565b915050610664565b5050565b6106c7838383604051806020016040528060008152506108b1565b505050565b6000806106d883610f86565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074090612226565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b9906122b8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606001805461081890611f7c565b80601f016020809104026020016040519081016040528092919081815260200182805461084490611f7c565b80156108915780601f1061086657610100808354040283529160200191610891565b820191906000526020600020905b81548152906001019060200180831161087457829003601f168201915b5050505050905090565b6108ad6108a6610b03565b8383610fc3565b5050565b6108c26108bc610b03565b83610bc4565b610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f890612143565b60405180910390fd5b61090d8484848461112f565b50505050565b6060600060405180610160016040528061013c8152602001612a7561013c9139905060006109408461118b565b61094983611259565b6109528661118b565b604051602001610964939291906124b6565b6040516020818303038152906040529050600061098082611259565b604051602001610990919061255f565b6040516020818303038152906040529050809350505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600081600001549050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610ac1816113d1565b610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af790612226565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610b7e836106cc565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610bd0836106cc565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610c125750610c1181856109ac565b5b80610c5057508373ffffffffffffffffffffffffffffffffffffffff16610c38846104a0565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610c79826106cc565b73ffffffffffffffffffffffffffffffffffffffff1614610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc6906125f3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3590612685565b60405180910390fd5b610d4b8383836001611412565b8273ffffffffffffffffffffffffffffffffffffffff16610d6b826106cc565b73ffffffffffffffffffffffffffffffffffffffff1614610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db8906125f3565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f4d8383836001611418565b505050565b6001816000016000828254019250508190555050565b610f8282826040518060200160405280600081525061141e565b5050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611031576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611028906126f1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111229190611a7b565b60405180910390a3505050565b61113a848484610c59565b61114684848484611479565b611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c90612783565b60405180910390fd5b50505050565b60606000600161119a84611600565b01905060008167ffffffffffffffff8111156111b9576111b8611d5f565b5b6040519080825280601f01601f1916602001820160405280156111eb5781602001600182028036833780820191505090505b509050600082602001820190505b60011561124e578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611242576112416127a3565b5b049450600085036111f9575b819350505050919050565b6060600082510361127b576040518060200160405280600081525090506113cc565b6000604051806060016040528060408152602001612a3560409139905060006003600285516112aa91906127d2565b6112b49190612806565b60046112c09190612837565b905060006020826112d191906127d2565b67ffffffffffffffff8111156112ea576112e9611d5f565b5b6040519080825280601f01601f19166020018201604052801561131c5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b8183101561138b576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050611330565b6003895106600181146113a557600281146113b5576113c0565b613d3d60f01b60028303526113c0565b603d60f81b60018303525b50505050508093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff166113f383610f86565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b6114288383611753565b6114356000848484611479565b611474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146b90612783565b60405180910390fd5b505050565b600061149a8473ffffffffffffffffffffffffffffffffffffffff16611970565b156115f3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026114c3610b03565b8786866040518563ffffffff1660e01b81526004016114e594939291906128ce565b6020604051808303816000875af192505050801561152157506040513d601f19601f8201168201806040525081019061151e919061292f565b60015b6115a3573d8060008114611551576040519150601f19603f3d011682016040523d82523d6000602084013e611556565b606091505b50600081510361159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159290612783565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506115f8565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061165e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611654576116536127a3565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061169b576d04ee2d6d415b85acef81000000008381611691576116906127a3565b5b0492506020810190505b662386f26fc1000083106116ca57662386f26fc1000083816116c0576116bf6127a3565b5b0492506010810190505b6305f5e10083106116f3576305f5e10083816116e9576116e86127a3565b5b0492506008810190505b612710831061171857612710838161170e5761170d6127a3565b5b0492506004810190505b6064831061173b5760648381611731576117306127a3565b5b0492506002810190505b600a831061174a576001810190505b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b9906129a8565b60405180910390fd5b6117cb816113d1565b1561180b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180290612a14565b60405180910390fd5b611819600083836001611412565b611822816113d1565b15611862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185990612a14565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461196c600083836001611418565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b6119a681611993565b82525050565b60006020820190506119c1600083018461199d565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611a10816119db565b8114611a1b57600080fd5b50565b600081359050611a2d81611a07565b92915050565b600060208284031215611a4957611a486119d1565b5b6000611a5784828501611a1e565b91505092915050565b60008115159050919050565b611a7581611a60565b82525050565b6000602082019050611a906000830184611a6c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ad0578082015181840152602081019050611ab5565b60008484015250505050565b6000601f19601f8301169050919050565b6000611af882611a96565b611b028185611aa1565b9350611b12818560208601611ab2565b611b1b81611adc565b840191505092915050565b60006020820190508181036000830152611b408184611aed565b905092915050565b611b5181611993565b8114611b5c57600080fd5b50565b600081359050611b6e81611b48565b92915050565b600060208284031215611b8a57611b896119d1565b5b6000611b9884828501611b5f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bcc82611ba1565b9050919050565b611bdc81611bc1565b82525050565b6000602082019050611bf76000830184611bd3565b92915050565b611c0681611bc1565b8114611c1157600080fd5b50565b600081359050611c2381611bfd565b92915050565b60008060408385031215611c4057611c3f6119d1565b5b6000611c4e85828601611c14565b9250506020611c5f85828601611b5f565b9150509250929050565b600080600060608486031215611c8257611c816119d1565b5b6000611c9086828701611c14565b9350506020611ca186828701611c14565b9250506040611cb286828701611b5f565b9150509250925092565b600060208284031215611cd257611cd16119d1565b5b6000611ce084828501611c14565b91505092915050565b611cf281611a60565b8114611cfd57600080fd5b50565b600081359050611d0f81611ce9565b92915050565b60008060408385031215611d2c57611d2b6119d1565b5b6000611d3a85828601611c14565b9250506020611d4b85828601611d00565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611d9782611adc565b810181811067ffffffffffffffff82111715611db657611db5611d5f565b5b80604052505050565b6000611dc96119c7565b9050611dd58282611d8e565b919050565b600067ffffffffffffffff821115611df557611df4611d5f565b5b611dfe82611adc565b9050602081019050919050565b82818337600083830152505050565b6000611e2d611e2884611dda565b611dbf565b905082815260208101848484011115611e4957611e48611d5a565b5b611e54848285611e0b565b509392505050565b600082601f830112611e7157611e70611d55565b5b8135611e81848260208601611e1a565b91505092915050565b60008060008060808587031215611ea457611ea36119d1565b5b6000611eb287828801611c14565b9450506020611ec387828801611c14565b9350506040611ed487828801611b5f565b925050606085013567ffffffffffffffff811115611ef557611ef46119d6565b5b611f0187828801611e5c565b91505092959194509250565b60008060408385031215611f2457611f236119d1565b5b6000611f3285828601611c14565b9250506020611f4385828601611c14565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f9457607f821691505b602082108103611fa757611fa6611f4d565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612009602183611aa1565b915061201482611fad565b604082019050919050565b6000602082019050818103600083015261203881611ffc565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b600061209b603d83611aa1565b91506120a68261203f565b604082019050919050565b600060208201905081810360008301526120ca8161208e565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b600061212d602d83611aa1565b9150612138826120d1565b604082019050919050565b6000602082019050818103600083015261215c81612120565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061219d82611993565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036121cf576121ce612163565b5b600182019050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000612210601883611aa1565b915061221b826121da565b602082019050919050565b6000602082019050818103600083015261223f81612203565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006122a2602983611aa1565b91506122ad82612246565b604082019050919050565b600060208201905081810360008301526122d181612295565b9050919050565b600081905092915050565b7f7b226e616d65223a2022546573742044617070204e4654732023000000000000600082015250565b6000612319601a836122d8565b9150612324826122e3565b601a82019050919050565b600061233a82611a96565b61234481856122d8565b9350612354818560208601611ab2565b80840191505092915050565b7f222c20226465736372697074696f6e223a2022546573742044617070204e465460008201527f7320666f722074657374696e672e222c2022696d616765223a2022646174613a60208201527f696d6167652f7376672b786d6c3b6261736536342c0000000000000000000000604082015250565b60006123e26055836122d8565b91506123ed82612360565b605582019050919050565b7f222c202261747472696275746573223a205b7b2274726169745f74797065223a60008201527f2022546f6b656e204964222c202276616c7565223a2022000000000000000000602082015250565b60006124546037836122d8565b915061245f826123f8565b603782019050919050565b7f227d5d7d00000000000000000000000000000000000000000000000000000000600082015250565b60006124a06004836122d8565b91506124ab8261246a565b600482019050919050565b60006124c18261230c565b91506124cd828661232f565b91506124d8826123d5565b91506124e4828561232f565b91506124ef82612447565b91506124fb828461232f565b915061250682612493565b9150819050949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000612549601d836122d8565b915061255482612513565b601d82019050919050565b600061256a8261253c565b9150612576828461232f565b915081905092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006125dd602583611aa1565b91506125e882612581565b604082019050919050565b6000602082019050818103600083015261260c816125d0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061266f602483611aa1565b915061267a82612613565b604082019050919050565b6000602082019050818103600083015261269e81612662565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006126db601983611aa1565b91506126e6826126a5565b602082019050919050565b6000602082019050818103600083015261270a816126ce565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061276d603283611aa1565b915061277882612711565b604082019050919050565b6000602082019050818103600083015261279c81612760565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006127dd82611993565b91506127e883611993565b9250828201905080821115612800576127ff612163565b5b92915050565b600061281182611993565b915061281c83611993565b92508261282c5761282b6127a3565b5b828204905092915050565b600061284282611993565b915061284d83611993565b925082820261285b81611993565b9150828204841483151761287257612871612163565b5b5092915050565b600081519050919050565b600082825260208201905092915050565b60006128a082612879565b6128aa8185612884565b93506128ba818560208601611ab2565b6128c381611adc565b840191505092915050565b60006080820190506128e36000830187611bd3565b6128f06020830186611bd3565b6128fd604083018561199d565b818103606083015261290f8184612895565b905095945050505050565b60008151905061292981611a07565b92915050565b600060208284031215612945576129446119d1565b5b60006129538482850161291a565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000612992602083611aa1565b915061299d8261295c565b602082019050919050565b600060208201905081810360008301526129c181612985565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006129fe601c83611aa1565b9150612a09826129c8565b602082019050919050565b60006020820190508181036000830152612a2d816129f1565b905091905056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c737667206865696768743d22333530222077696474683d22333530222076696577426f783d2230203020313030203130302220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667223e3c646566733e3c706174682069643d224d7950617468222066696c6c3d226e6f6e6522207374726f6b653d227265642220643d224d31302c3930205139302c39302039302c3435205139302c31302035302c3130205131302c31302031302c3430205131302c37302034352c3730205137302c37302037352c353022202f3e3c2f646566733e3c746578743e3c746578745061746820687265663d22234d7950617468223e517569636b2062726f776e20666f78206a756d7073206f76657220746865206c617a7920646f672e3c2f74657874506174683e3c2f746578743e3c2f7376673ea2646970667358221220922487cf7bfec55ad9cf0c646397333bb79204b1a8ef63134f78b23d697570ef64736f6c63430008120033", "gas": "0x26e8af", "gasPrice": "0x18e17", "value": "0x0" } ] }` // balanceParamsStr, _ := json.Marshal(balanceParams) eth_getBalanceStr = escapeAllStr(eth_getBalanceStr, "selfAddress", user.Address) personal_signStr = escapeAllStr(personal_signStr, "selfAddress", user.Address) eth_signTypedData_v4Str = escapeAllStr(eth_signTypedData_v4Str, "selfAddress", user.Address) eth_sendTransactionStrNative = escapeAllStr(eth_sendTransactionStrNative, "selfAddress", user.Address) eth_sendTransactionStrNative = escapeAllStr(eth_sendTransactionStrNative, "botAddress", botAddress) eth_sendTransactionStrToken = escapeAllStr(eth_sendTransactionStrToken, "selfAddress", user.Address) eth_sendTransactionStrToken = escapeAllStr(eth_sendTransactionStrToken, "botAddress", botAddress[2:]) sendTransactionStrSwap = escapeAllStr(sendTransactionStrSwap, "selfAddress", user.Address) eth_sendTransactionApproveStr = escapeAllStr(eth_sendTransactionApproveStr, "selfAddress", user.Address) eth_sendTransactionApproveStr = escapeAllStr(eth_sendTransactionApproveStr, "botAddress", botAddress[2:]) sendTransactionStrTransferFrom = escapeAllStr(sendTransactionStrTransferFrom, "selfAddress", user.Address) sendTransactionStrMint = escapeAllStr(sendTransactionStrMint, "selfAddress", user.Address) sendTransactionStrDeploy = escapeAllStr(sendTransactionStrDeploy, "selfAddress", user.Address) homeMenuMarkup.InlineKeyboard[0][0].CallbackData = ð_getBalanceStr homeMenuMarkup.InlineKeyboard[1][0].CallbackData = &personal_signStr homeMenuMarkup.InlineKeyboard[2][0].CallbackData = ð_signTypedData_v4Str homeMenuMarkup.InlineKeyboard[3][0].CallbackData = ð_sendTransactionStrNative //合约币转账 homeMenuMarkup.InlineKeyboard[4][0].CallbackData = ð_sendTransactionStrToken homeMenuMarkup.InlineKeyboard[5][0].CallbackData = &sendTransactionStrSwap homeMenuMarkup.InlineKeyboard[6][0].CallbackData = ð_sendTransactionApproveStr homeMenuMarkup.InlineKeyboard[7][0].CallbackData = &sendTransactionStrTransferFrom homeMenuMarkup.InlineKeyboard[8][0].CallbackData = &sendTransactionStrMint homeMenuMarkup.InlineKeyboard[9][0].CallbackData = &sendTransactionStrDeploy _, err = bot.Send(msg) } } if err != nil { log.Printf("An error occured: %s", err.Error()) } } func escapeAllStr(text, old, new string) string { text = strings.ReplaceAll(text, "\n", "") text = strings.ReplaceAll(text, "\t", "") text = strings.ReplaceAll(text, " ", "") text = strings.ReplaceAll(text, old, new) return text } func handleButton(query *boxbotapi.CallbackQuery) { message := query.Message var text = query.Data markup := boxbotapi.NewInlineKeyboardMarkup() markup = homeMenuMarkup // Replace menu text and keyboard msg := boxbotapi.NewEditMessageTextAndMarkup(message.Chat.ID, message.Chat.Type, message.MessageID, text, markup) msg.ParseMode = boxbotapi.ModeHTML bot.Send(msg) } ``` --- ## 开发者 FAQ / 排障 ## DeBox 开发者 FAQ / 排障 本页聚焦开发者接入中的高频问题与定位思路。 新开发请以以下主文档为准: - [DeBox 开发者 OpenAPI](/ApiOnePage) - [DeBox 机器人 Go SDK](/GO-SDK) - [DeBox 机器人 Go SDK Webhook](/GO-SDK-Webhook) ## 1. 我应该先看哪篇文档? 按接入路径选择: - 接口参数、值域、成功/失败响应:看 OpenAPI。 - 用 Go SDK(Long Polling):看 GO-SDK。 - 用 Webhook:看 GO-SDK Webhook。 ## 2. 为什么 `getUpdates` 一直收不到消息? 最常见原因:已经配置了 Webhook URL。 DeBox 中 Webhook 与 Long Polling 严格互斥: - 配置 Webhook 后,Webhook 是唯一有效收消息链路。 - 想用 Long Polling,先清空平台上的 Webhook 配置。 ## 3. `chat_id` 和 `chat_type` 应该怎么填? - `chat_type=group`:`chat_id` 填群 `gid`(如 `cc0onr82`)。 - `chat_type=private`:`chat_id` 填用户 `user_id`(invite code)。 这两个字段是 `sendMessage` / `editMessage` 的核心路由参数。 ## 4. `parse_mode` 选了 `image/video/file`,`content` 填什么? 必须填可公网访问 URL: - `image`:图片 URL - `video`:视频 URL - `file`:文件 URL 文本类(`richtext/text/Markdown/MarkdownV2/HTML`)`content` 最大 5000 字符。 ## 5. Bot 回调的安全校验怎么做? Webhook 回调请求头会携带:`X-API-KEY = Webhook Key`。 服务端必须校验该值,避免伪造请求。 排查提醒: - 修改 Webhook URL 后,Webhook Key 会更新。 - 服务端也要同步更新校验值。 ## 6. 发送消息返回失败怎么查? 建议按顺序检查: 1. 请求头是否带 `X-API-KEY`。 2. `chat_type/chat_id` 是否匹配。 3. `content` 是否为空或超限。 4. `parse_mode` 与 `content` 格式是否一致。 5. 若是签名接口(如 `dao_member`),检查 `nonce/timestamp/signature`。 ## 7. 常见错误与处理 - `message can't be empty`:`content` 为空。 - `message must be less than 5000 characters`:文本类消息超长。 - `message must be less than 2000 bytes`:粉丝群发内容超限。 - `permission denied`:调用方无目标群管理权限。 - `Param error`:参数缺失或格式不合法(常见于地址格式)。 ## 8. 如何获取 `gid`(群 ID)? 在 App 内进入目标群,使用“分享/复制链接”,链接中的 `id` 即 `gid`。 ## 9. 技术支持渠道 - 开放平台:[developer.debox.pro](https://developer.debox.pro) - 官方支持群(如有效):[https://m.debox.pro/group?id=l3izdfzd](https://m.debox.pro/group?id=l3izdfzd) --- ## DeBox 常见问题 ## 1. 如何获得官方支持? - 官方账号:[DeBox 官方账号](https://m.debox.pro/card?id=uu08en3w) - 官方支持群:[DeBox Support](https://m.debox.pro/group?id=l3izdfzd) ## 2. 如何提交产品问题反馈? 在官方支持群中点击底部 `⊕` 按钮,选择开票入口并提交问题详情。 ## 3. 在哪里获取开放平台凭证? 可在开发者平台获取 `App ID`、`API Key` 与 `App Secret`: [developer.debox.pro](https://developer.debox.pro/) ## 4. 当前支持哪些链? 当前支持链如下: | Chain ID | Chain Name | | --- | --- | | -200 | Solana | | 1 | Ethereum | | 10 | Optimism | | 56 | BNB | | 137 | Polygon | | 196 | X Layer | | 250 | Fantom | | 324 | ZkSync Era | | 4200 | Merlin | | 5000 | Mantle | | 8453 | Base | | 42161 | Arbitrum | | 43114 | Avalanche | | 59144 | Linea | | 81457 | Blast | | 200901 | Bitlayer | | 534352 | Scroll | ## 5. 开发者接入文档在哪里? - OpenAPI: [DeBox 开发者 OpenAPI](/ApiOnePage) - 机器人接入总览: [DeBox Bot 聊天机器人](/APIs/BotGuide) - Go SDK(Long Polling): [DeBox 机器人 Go SDK](/GO-SDK) - Go SDK(Webhook): [DeBox 机器人 Go SDK Webhook](/GO-SDK-Webhook)