mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-26 06:01:49 +00:00
fix(send_message): normalize Telegram General topic thread_id + add Slack thread_ts
Addresses two review findings from Codex: 1. telegram:current breaks in forum General — the gateway synthesizes thread_id='1' for the General topic, but the Bot API rejects message_thread_id=1. Strip it to None in _resolve_current_session_target(), matching TelegramAdapter._message_thread_id_for_send(). 2. slack:current drops thread context — _send_slack() never received thread_id and posted chat.postMessage without thread_ts, so messages landed in channel root instead of the active thread. Add thread_id param and forward it as thread_ts when present. Tests: 4 new cases (Telegram General normalization, real topic preserved, Slack thread_ts included, Slack thread_ts absent). 84 passed total.
This commit is contained in:
parent
c559c66236
commit
3d2b8d0acf
2 changed files with 13 additions and 2 deletions
|
|
@ -355,6 +355,13 @@ def _resolve_current_session_target(platform_name: str):
|
|||
None,
|
||||
)
|
||||
|
||||
# Telegram forum chats synthesize thread_id="1" for the General topic,
|
||||
# but the Bot API rejects message_thread_id=1. The gateway adapter
|
||||
# normalizes this away (TelegramAdapter._message_thread_id_for_send);
|
||||
# mirror that here so telegram:current doesn't break in General.
|
||||
if platform_name == "telegram" and session_thread_id == "1":
|
||||
session_thread_id = None
|
||||
|
||||
return None, session_chat_id, session_thread_id
|
||||
|
||||
|
||||
|
|
@ -577,7 +584,7 @@ async def _send_to_platform(platform, pconfig, chat_id, message, thread_id=None,
|
|||
last_result = None
|
||||
for chunk in chunks:
|
||||
if platform == Platform.SLACK:
|
||||
result = await _send_slack(pconfig.token, chat_id, chunk)
|
||||
result = await _send_slack(pconfig.token, chat_id, chunk, thread_id=thread_id)
|
||||
elif platform == Platform.WHATSAPP:
|
||||
result = await _send_whatsapp(pconfig.extra, chat_id, chunk)
|
||||
elif platform == Platform.SIGNAL:
|
||||
|
|
@ -966,7 +973,7 @@ async def _send_discord(token, chat_id, message, thread_id=None, media_files=Non
|
|||
return _error(f"Discord send failed: {e}")
|
||||
|
||||
|
||||
async def _send_slack(token, chat_id, message):
|
||||
async def _send_slack(token, chat_id, message, thread_id=None):
|
||||
"""Send via Slack Web API."""
|
||||
try:
|
||||
import aiohttp
|
||||
|
|
@ -980,6 +987,8 @@ async def _send_slack(token, chat_id, message):
|
|||
headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}
|
||||
async with aiohttp.ClientSession(timeout=aiohttp.ClientTimeout(total=30), **_sess_kw) as session:
|
||||
payload = {"channel": chat_id, "text": message, "mrkdwn": True}
|
||||
if thread_id:
|
||||
payload["thread_ts"] = thread_id
|
||||
async with session.post(url, headers=headers, json=payload, **_req_kw) as resp:
|
||||
data = await resp.json()
|
||||
if data.get("ok"):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue