"Если вдруг открылся люк, не пугайся, это глюк!" (с) Если что-то работает не так, вы нашли ошибку или опечатку в программе — вам в этот раздел
Аватара пользователя
galskiy
Здравствуйте. Настроил телеграм бота, в консоли бот активен и добавился пользователь телеграмма установил напротив него пользователя из чата, но вот сообщения бот не переправляет. Что я делаю не так? Скрипт отрабатывает, галочку поставил.
Аватара пользователя
Алексей Пикуров
Здравствуйте. Надо больше деталей.

Пришлите скриншот с раздела "Инструменты", "Интеграция", "Telegram Bot" на [email protected] или мне в чат (в подписи).
Аватара пользователя
galskiy
Скрин отправил в почту
Аватара пользователя
Андрей Раков
Покажите скрин "IP фильтров", адреса можете заблурить
Аватара пользователя
galskiy
Вот, возможно где-то в фильтрах я что-то неправильно сделал
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Андрей Раков
Какая версия чата?
Аватара пользователя
galskiy
последняя 2023.5.0
Аватара пользователя
Андрей Раков
Хорошо.

Вам нужно добавить правило с типом доступа "общий доступ", оно регулирует доступ по REST API к скрипту телеграма.

После релиза мы добавим дополнительный тип доступа, чтобы регулировать его отдельно, пока так.
Аватара пользователя
galskiy
не помогло.
Давайте по пунктам.
1. Шифрование включено порт 80
2. Сертификаты получены.
3. Скрипт включен.
4. Бот горит зелёным и подключен.
5. Пользователь внизу отражается.
6. В фильтрах добавил Общий доступ с IP *.*.*.*
Может ещё что-то забыл выставить где-то?
Аватара пользователя
Андрей Раков
У вас в окне интеграции четко зафиксирована ошибка в разделе Check on telegram:
Код: Выделить всё
last error message: Read timeout expired

Это значит, что телеграм не може достучаться до вашего сервера.

После настройки фильтра вы перезапустили сервер?

Выполните перезагрузку и зайдите в интеграции там должна пропасть эта ошибка.
Аватара пользователя
galskiy
Так и не смог победить ошибку "last error message: Read timeout expired", перезагрузил, фильтра убрал совсем, ничего не помогло. Возможно это все от домена, он взят на ресурсе noip.com и может нужна какая-то настройка на том сервисе, может проще будет использовать свой.
Аватара пользователя
Андрей Раков
Поменяйте порт на 443, он стандартный для HTTPS
Аватара пользователя
Андрей Раков
В настройках веб-сервера.
Аватара пользователя
galskiy
да забыл сказать это я тоже пробовал, в поиске нашёл в какой-то теме и решил попробовать, но всё равно в ответ получаю это "last_error_message":"Connection timed out",
Аватара пользователя
galskiy
Вопрос. Заменил имя домена, как перевыпустить сертификаты на новое имя? тыкаешь ему выпустить сертификат он всё равно старые подтягивает.
Аватара пользователя
Андрей Раков
Очистите папку C:\ProgramData\MyChat Server\cert\
Аватара пользователя
galskiy
Сертификат я сделал на новый домен, но бот всё равно мне выдаёт "last_error_message":"Read timeout expired" буду дальше разбираться почему телеграмм не может достучаться до меня. Сервер MyChat стоит на виртуальном сервере со статическим IP, возможно надо копнуть Firewall на самом сервере и открыть какие-то порты для телеги.
Аватара пользователя
galskiy
У меня ещё вот такая проблема со скриптом OnPrivateMessage он выдаёт ошибку
[21:50:04] (Error "OfflineMsg2Telegram"): [Error] (35:67): Type mismatch
Может конечно это всё от того что связи нет с ботом.
Вот что ещё заметил в программе скрипт от 2017 года версия 1.1 в инструкции по интеграции версия 1.2 от 2020 года, но и та и другая выдают ошибки при выполнении. 1.2 версия немного отличается от 1.1 условиями. Вот отсюда вопрос какая версия актуальная? Ещё интересность бот отрабатывает добавление пользователя в mychat, а вот сообщения не отправляет может это всё таки из-за ошибки в скрипте?
Аватара пользователя
galskiy
Добавлю ошибка в этой строке
// send message to Telegram
s := mIntegrationTelegramSendMessage(sID, sOutMsg, 5000);
Аватара пользователя
Алексей Пикуров
Код: Выделить всё
// -----------------------------------------------------------------------------------
// ver 2.0 / May 25, 2023, (c) Alexey Pikurov, [email protected]
// -----------------------------------------------------------------------------------
function OnPrivateMessage(iCID, iUIN, iUINTo, iMsgType: integer; sMsg: string): boolean;
var
  sID, sOutMsg, sNameFrom: string;
begin
  result := true;
  if not mIsUINOnline(iUINTo) then
  begin
    // get sender's Telegram ID
    sID := mIntegrationTelegramGetUserIDByUIN(iUINTo);
    // no errors
    if sID[1] <> '-' then
    begin
      // get MyChat sender's display name
      sNameFrom := mGetUserFullNameByPreset(iUIN, 0);
      // file or image?
      if (iMsgType = 44) or (iMsgType = 45) then
         sOutMsg := mExtractExternalWebLinkFromMessage(sMsg, iMsgType)
      else
        // convert MyChat message to plaint text
        sOutMsg := mConvertMsgToPlainText(sMsg, iMsgType);
      // add WEB support link and user display name to message
      sOutMsg := '<a href="' +
                  mGetServerExternalAddress(0) +
                  '/support/?uin=' +
                  IntToStr(iUIN) +
                  '&silent">' +
                  sNameFrom +
                  '</a>:' +
                  CRLF +
                  CRLF +
                  sOutMsg;
      // send message to Telegram
      mIntegrationTelegramSendMessage(sID, sOutMsg, 5000);
    end;
  end;
end;

begin

end.
Аватара пользователя
galskiy
Спасибо, теперь всё работает, оказалась проблема в скрипте. Возможно он остался от старой версии после обновления.
Аватара пользователя
Алексей Пикуров
Ок, проблему закрываем. Спасибо за сотрудничество.
Аватара пользователя
galskiy
А можно я ещё подастаю вас, в обратную сторону не работает, в инструкции написано что длинный тап и ответ на сообщение которое пришло от бота, а вот в чат не приходит ответ с телеграма
Аватара пользователя
Алексей Пикуров
Код: Выделить всё
// -----------------------------------------------------------------------------------
// ver 2.1 / Feb 1, 2021, (c) Alexey Pikurov, [email protected]
// -----------------------------------------------------------------------------------

function OnRequestByREST(sBody, sParams, sHeaders, sURL, sIPv4, sIPv6: string; iType: integer): string;
var
  sFirstName, sLastName, sNickName, sTelegramID, sText, sData: string;
  iResult, x, iUIN, iUINFrom: integer;
begin
  sFirstName  := '';
  sLastName   := '';
  sNickName   := '';
  sTelegramID := '';
  sText       := '';
 
  // get request data
  JSONGetString(sBody, 'message.from.id', sTelegramID);
  JSONGetString(sBody, 'message.from.first_name', sFirstName);
  JSONGetString(sBody, 'message.from.last_name', sLastName);
  JSONGetString(sBody, 'message.from.username', sNickName);
  JSONGetString(sBody, 'message.text', sText);

    // if user is connecting to the Telegram bot for the first time
    if LowerCase(sText) = '/start' then mIntegrationTelegramAddUser(sTelegramID, sFirstName, sLastName, sNickName)
      else begin // maybe user send reply message to the bot
        iResult := JSONGetString(sBody, 'message.reply_to_message.entities[0].url', sData);
       
          if iResult = 0 then begin
            // get receiver's UIN
            x := pos('?uin=', sData) + 5;
            iUIN := StrToIntDef(copy(sData, x, pos('&', sData) - x), -1);

            // get sender's UIN by user Telegram ID
            iUINFrom := mIntegrationTelegramGetMyChatUINByTelegramID(sTelegramID);

              // if sender and receiver are exists
              if (iUIN <> -1) and (iUINFrom > 0) then begin
                if Length(sText) > 0 then begin
                  // multi-line text
                  sData := '[Telegram] ' + ReplaceString(sText, #10, CRLF, true, false);
                  // send private message into MyChat
                  mSendPrivateMessage(iUINFrom, iUIN, sData, 1);
                end else begin
                 JSONSetInteger(sBody, 'UINFrom', iUINFrom);
                  JSONSetInteger(sBody, 'UINTo',   iUIN);
                  mNodeCommand('GetTelegramAttach', sBody);
                end
              end; 
          end;
     
      end;
     
  result := '{}';
end;

begin

end.
Аватара пользователя
galskiy
спасибо огромное за оперативность! скрипт заменил, теперь все работает четко.
Аватара пользователя
Алексей Пикуров
You are welcome :)