Fix Telegram inbound reply threading
This commit is contained in:
parent
6cd3fdc18f
commit
e4703c73d6
3 changed files with 55 additions and 1 deletions
|
|
@ -1577,6 +1577,8 @@ func (al *AgentLoop) processSystemMessage(
|
||||||
UserMessage: fmt.Sprintf("[System: %s] %s", msg.SenderID, msg.Content),
|
UserMessage: fmt.Sprintf("[System: %s] %s", msg.SenderID, msg.Content),
|
||||||
DefaultResponse: "Background task completed.",
|
DefaultResponse: "Background task completed.",
|
||||||
EnableSummary: false,
|
EnableSummary: false,
|
||||||
|
// System messages are synthetic inbound events, so there is no delivery
|
||||||
|
// callback chain from a channel send to feed assistant message IDs back.
|
||||||
SendResponse: true,
|
SendResponse: true,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -708,6 +708,9 @@ func (c *TelegramChannel) handleMessage(ctx context.Context, message *telego.Mes
|
||||||
"first_name": user.FirstName,
|
"first_name": user.FirstName,
|
||||||
"is_group": fmt.Sprintf("%t", message.Chat.Type != "private"),
|
"is_group": fmt.Sprintf("%t", message.Chat.Type != "private"),
|
||||||
}
|
}
|
||||||
|
if message.ReplyToMessage != nil {
|
||||||
|
metadata["reply_to_message_id"] = fmt.Sprintf("%d", message.ReplyToMessage.MessageID)
|
||||||
|
}
|
||||||
|
|
||||||
// Set parent_peer metadata for per-topic agent binding.
|
// Set parent_peer metadata for per-topic agent binding.
|
||||||
if message.Chat.IsForum && threadID != 0 {
|
if message.Chat.IsForum && threadID != 0 {
|
||||||
|
|
|
||||||
|
|
@ -686,6 +686,21 @@ func TestHandleMessage_EmptyContent_Ignored(t *testing.T) {
|
||||||
From: &telego.User{
|
From: &telego.User{
|
||||||
ID: 789,
|
ID: 789,
|
||||||
FirstName: "User",
|
FirstName: "User",
|
||||||
|
=======
|
||||||
|
msg := &telego.Message{
|
||||||
|
Text: "reply in group",
|
||||||
|
MessageID: 30,
|
||||||
|
Chat: telego.Chat{
|
||||||
|
ID: -100999,
|
||||||
|
Type: "supergroup",
|
||||||
|
},
|
||||||
|
From: &telego.User{
|
||||||
|
ID: 10,
|
||||||
|
FirstName: "Dana",
|
||||||
|
},
|
||||||
|
ReplyToMessage: &telego.Message{
|
||||||
|
MessageID: 25,
|
||||||
|
>>>>>>> 7b6328f (Fix Telegram inbound reply threading)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -699,3 +714,37 @@ func TestHandleMessage_EmptyContent_Ignored(t *testing.T) {
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestHandleMessage_ReplyToMessageID_Preserved(t *testing.T) {
|
||||||
|
messageBus := bus.NewMessageBus()
|
||||||
|
ch := &TelegramChannel{
|
||||||
|
BaseChannel: channels.NewBaseChannel("telegram", nil, messageBus, nil),
|
||||||
|
chatIDs: make(map[string]int64),
|
||||||
|
ctx: context.Background(),
|
||||||
|
}
|
||||||
|
|
||||||
|
msg := &telego.Message{
|
||||||
|
Text: "reply in group",
|
||||||
|
MessageID: 30,
|
||||||
|
Chat: telego.Chat{
|
||||||
|
ID: -100999,
|
||||||
|
Type: "supergroup",
|
||||||
|
},
|
||||||
|
From: &telego.User{
|
||||||
|
ID: 10,
|
||||||
|
FirstName: "Dana",
|
||||||
|
},
|
||||||
|
ReplyToMessage: &telego.Message{
|
||||||
|
MessageID: 25,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
err := ch.handleMessage(context.Background(), msg)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
inbound, ok := <-messageBus.InboundChan()
|
||||||
|
require.True(t, ok)
|
||||||
|
assert.Equal(t, "30", inbound.MessageID)
|
||||||
|
assert.Equal(t, "25", inbound.ReplyToMessageID)
|
||||||
|
assert.Equal(t, "25", inbound.Metadata["reply_to_message_id"])
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue