Разобрался.
когда бот отправляет личное сообщение пользователю, то нужно заполнять только ID, а когда сообщение в канал, то - имя.
Пользователю: UserLink.ID := StrToIntDef64(edUserId.Text, 0);
В канал UserLink.Username := edUserName.Text;
Для отправки сообщения в канал можно в качестве ID подставить отрицательное значение chat_ID, у каналов всегда оно отрицательное.
Т.е. в любом случае можно всегда заполнять только UserLink.ID
В документации Телеграм этого нет
https://tlgrm.ru/docs/bots/api#sendmessage