What looks like is happening here is that the callback is fired twice because technically the TextChatService is receiving “2 messages”, one for the message being sent, and one that is a confirmation from the server.
Do me a favor and try printing the message.Status value to confirm. The first print should read Enum.TextChatMessageStatus.Sending and the second will likely have Enum.TextChatMessage.Success or some error status. But the message.MessageId for both will be the same.
We will certainly document this case to avoid confusion in the future!