发送频道消息
向频道发送消息。
接口说明
| 属性 | 值 |
|---|---|
| 请求方式 | POST |
| 请求路径 | /im-user/api/v1/bot/channels/{channelId}/messages |
| 鉴权方式 | Bot Token |
说明
此接口用于 Bot 向指定频道发送消息。Bot 需要是该频道的成员才能发送消息。
请求头
Authorization: Bearer {botToken}
Content-Type: application/json
路径参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
channelId | number | 是 | 频道 ID |
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
msgText | string | 是 | 消息文本内容(Query 参数) |
payload | string | 否 | 扩展字段(JSON 格式,Query 参数) |
请求示例
基本请求
curl -X POST 'https://api.im.example.com/im-user/api/v1/bot/channels/5001/messages?msgText=%E9%A1%B9%E7%9B%AE%E5%85%AC%E5%91%8A' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'
带扩展字段
curl -X POST 'https://api.im.example.com/im-user/api/v1/bot/channels/5001/messages?msgText=%E9%A1%B9%E7%9B%AE%E5%85%AC%E5%91%8A&payload=%7B%22type%22%3A%22announcement%22%7D' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'
响应参数
| 参数 | 类型 | 说明 |
|---|---|---|
messageId | number | 消息 ID |
channelId | number | 频道 ID |
roomId | number | 房间 ID(与 channelId 相同) |
status | string | 状态:sent(发送成功)/ failed(发送失败) |
errorMessage | string | 错误信息(失败时返回) |
响应示例
成功响应
{
"code": 200,
"data": {
"messageId": 123456790,
"channelId": 5001,
"roomId": 5001,
"status": "sent"
}
}
失败响应
{
"code": 404,
"msg": "频道不存在"
}
错误码
| 错误码 | 说明 | 解决方案 |
|---|---|---|
| 400 | msgText不能为空 | 确保传递了 msgText 参数 |
| 401 | 需要 Bot Token | 确保在请求头中传递了 Authorization |
| 401 | Bot Token 无效或已过期 | 检查 Bot Token 是否正确,或重新安装应用 |
| 403 | 权限不足 | 检查应用是否已安装到目标工作空间,Bot 是否是频道成员 |
| 404 | 频道不存在 | 检查 channelId 是否正确 |
| 500 | 发送消息失败 | 服务异常,请联系管理员 |
Java 调用示例
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public class BotApiClient {
private final String apiBaseUrl;
private final String botToken;
public BotApiClient(String apiBaseUrl, String botToken) {
this.apiBaseUrl = apiBaseUrl;
this.botToken = botToken;
}
/**
* 发送消息到频道
*
* @param channelId 频道 ID
* @param msgText 消息文本
* @return 消息响应
*/
public BotMessageResponse sendChannelMessage(Long channelId, String msgText) {
return sendChannelMessage(channelId, msgText, null);
}
/**
* 发送消息到频道(带扩展字段)
*
* @param channelId 频道 ID
* @param msgText 消息文本
* @param payload 扩展字段(JSON 格式)
* @return 消息响应
*/
public BotMessageResponse sendChannelMessage(Long channelId, String msgText, String payload) {
StringBuilder url = new StringBuilder();
url.append(apiBaseUrl)
.append("/im-user/api/v1/bot/channels/")
.append(channelId)
.append("/messages?msgText=")
.append(URLEncoder.encode(msgText, StandardCharsets.UTF_8));
if (payload != null) {
url.append("&payload=")
.append(URLEncoder.encode(payload, StandardCharsets.UTF_8));
}
String response = HttpRequest.post(url.toString())
.header("Authorization", "Bearer " + botToken)
.execute()
.body();
JSONObject json = JSONUtil.parseObj(response);
if (json.getInt("code") != 200) {
throw new RuntimeException("发送频道消息失败: " + json.getStr("msg"));
}
return json.getBean("data", BotMessageResponse.class);
}
}
Python 调用示例
import requests
import json
from urllib.parse import urlencode
class BotApiClient:
def __init__(self, api_base_url: str, bot_token: str):
self.api_base_url = api_base_url
self.bot_token = bot_token
def send_channel_message(
self,
channel_id: int,
msg_text: str,
payload: dict = None
) -> dict:
"""发送消息到频道"""
url = f"{self.api_base_url}/im-user/api/v1/bot/channels/{channel_id}/messages"
headers = {
"Authorization": f"Bearer {self.bot_token}"
}
params = {"msgText": msg_text}
if payload:
params["payload"] = json.dumps(payload)
response = requests.post(url, params=params, headers=headers)
result = response.json()
if result.get("code") != 200:
raise Exception(f"发送频道消息失败: {result.get('msg')}")
return result.get("data")
使用场景
项目公告
// 发送项目公告
botApiClient.sendChannelMessage(
projectChannelId,
"📢 项目公告\n" +
"────────────\n" +
"本周五下午 14:00-16:00 进行系统升级\n" +
"届时服务将暂停,请提前做好准备\n" +
"────────────\n" +
"如有疑问请联系运维团队"
);
每日报告
// 发送每日数据报告
String payload = JSONUtil.toJsonStr(Map.of(
"type", "daily_report",
"date", "2026-01-09",
"action", "view_dashboard"
));
botApiClient.sendChannelMessage(
reportChannelId,
"📊 每日数据报告\n" +
"日期:2026-01-09\n" +
"────────────\n" +
"新增用户:128\n" +
"活跃用户:1,256\n" +
"订单数量:89\n" +
"────────────\n" +
"详情请查看数据看板",
payload
);
构建通知
// 发送构建通知
botApiClient.sendChannelMessage(
devChannelId,
"🔧 构建通知\n" +
"────────────\n" +
"项目:im-cloud\n" +
"分支:main\n" +
"状态:✅ 构建成功\n" +
"版本:v1.2.3\n" +
"────────────\n" +
"提交者:张三"
);