-
Постов
828 -
Зарегистрирован
-
Посещение
-
Победитель дней
13
Весь контент x11
-
Разобрался. когда бот отправляет личное сообщение пользователю, то нужно заполнять только ID, а когда сообщение в канал, то - имя. Пользователю: UserLink.ID := StrToIntDef64(edUserId.Text, 0); В канал UserLink.Username := edUserName.Text; Для отправки сообщения в канал можно в качестве ID подставить отрицательное значение chat_ID, у каналов всегда оно отрицательное. Т.е. в любом случае можно всегда заполнять только UserLink.ID В документации Телеграм этого нет https://tlgrm.ru/docs/bots/api#sendmessage
-
Проблему решил следующим путём. 1. Нужно проверить, что в поле Domain нет токена, т.е. чтобы было только значение URL "https://api.telegram.org/bot" без кавычек, конечно же. 2. Не нужно заполнять UserName, вот код отправки личного сообщения от бота - пользователю: procedure TForm1.btnSendMsgClick(Sender: TObject); Var UserLink: TtgUserLink; begin UserLink.ID := StrToIntDef64(edUserId.Text, 0); // UserLink.Username := edUserName.Text; if UserLink.ID = 0 then begin Memo1.Lines.Add('SendMsg: ' + edUserId.Text + ' is not valid integer value'); exit; end; TelegramBot1.SendMessage(UserLink, edMsgText.Text); end; т.е. я закоментировал "UserLink.Username := edUserName.Text;", как видите. То ли это баг, то ли фича, то ли фиг его знает. Если раскомментировать строку "UserLink.Username := edUserName.Text;", то сообщение будет передаваться вот такой ссылкой: "https://api.telegram.org/bot<token>/sendMessage?chat_id=@channelusername&text=12345" и по такой ссылке я получаю ошибку: 400 bad request: chat not found, хотя согласно документации https://tlgrm.ru/docs/bots/api#sendmessage - (см. снимок) написано, что можно отправлять @имя_юзера_канала, кому предназначено сообщение. Но когда я закоментировал строку, то библиотека создала вот такой URL: "https://api.telegram.org/bot<token>/sendMessage?chat_id=12345678&text=12345" т.е. в параметр chat_id библиотека подставила уже ID пользователя-получателя (12345678). И тогда бот успешно отправил сообщение.
-
В структуре TtgUserLink я указываю только UserID получателя. Или здесь нужно заполнять обязательно ещё и Username? Вот сейчас такой код: procedure TForm1.btnSendMsgClick(Sender: TObject); Var UserLink: TtgUserLink; begin UserLink.ID := StrToIntDef(edUserId.Text, 0); if UserLink.ID = 0 then begin Memo1.Lines.Add('SendMsg: ' + edUserId.Text + ' is not valid integer value'); exit; end; TelegramBot1.SendMessage(UserLink, edMsgText.Text); end;
-
Я так понял, старт отправляется автоматически, как только пользователь "входит" в чат к боту или пишет первое сообщение (не знаю), т.к. я увидел, что боту пришло /start, хотя пользователь ничего ещё не писал. Далее... В общем, /start приходит боту автоматически или пользователь сам отправляет. И мой бот должен что-то отправить в ответ пользователю? Вот здесь проблема. https://tlgrm.ru/docs/bots#global-commands как реализовать ответ правильно, если при отправке любого сообщения, я получаю 401?
-
Я понимаю твой сарказм но... есть 2 события у TtgRecieverUI: OnUpdate и OnUpdates. про "Получение обновлений" читал: https://tlgrm.ru/docs/bots/api#getting-updates но я спрашивал именно про TtgRecieverUI. Когда в канал кто-то пишет сообщение, то у TtgRecieverUI срабатывает OnUpdate, где и можно получить сообщение и др. информацию. Тогда для чего событие OnUpdates, которое не срабатывает при входящем сообщении? Когда оно срабатывает? Ведь у библиотеки пока нет документации, поэтому твой сарказм не уместен сейчас по крайней мере
-
Ввёл token, нажал Apply, перешёл на вкладку SenMessage и нажал на Send, получил ошибку: Project SendMethods.exe raised exception class Exception with message 'Not assigned required data'. Использую TcuHttpClientIndy. Если использовать TcuHttpClientSysNet, то исключений нет, но и сообщения не отправляются и на вкладке OnUpdate появляется {"ok":false,"error_code":400,"description":"Bad Request: chat_id is empty"}
-
Так, дошло. Только в примере пункт 0 должен быть таким: 0. Установить CrossUrl, кинуть на форму TcuHttpClientSysNet или TcuHttpClientIndy и указать в свойстве TelegramBot1.HttpCore нужную вам библиотеку для работы с сетью. Ещё один пункт допишите: в папку \TelegaPi\Bin\Win32-Debug\ скопируйте 2 файла: libeay32.dll и ssleay32.dll для работы с SSL.