Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
Аватара пользователя
serega
Добрый день, не удается подключить пересылку из Mychat в телеграм.
Пользовался инструкцией https://nsoft-s.com/mychatarticles/1158-mychat-plus-telegram.html
Прошел по шагам. Создал бота,Сделал настройки, купил сертификат, добавил его.

Скрин есть, бот вроде бы как подключен но все равно пишет ошибку и ругается на сертификат.

подскажите где лажаю ?
Вложения
Снимок.PNG
Снимок.PNG (27.41 КБ) Просмотров: 2921
Аватара пользователя
Андрей Раков
Добрый день.

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

Если вы подключаете наш тестовый сертификат — с ним телеграм не будет работать, нужен сертификат, который выдан именно для вашего домена.

Также вам нужно использовать стандартный порт для https — 443.
Аватара пользователя
Андрей Раков
Вы пишете, что купили сертификат, а вы его добавили в настройках веб-сервера?
Аватара пользователя
Андрей Раков
Дополнительно проверьте настройку вашего сетевого оборудования, чтобы была проброска трафика по порту, на котором работает веб-сервер чата (у вас сейчас 88).
Аватара пользователя
serega
сертификат куплен у COMODO. Написал же, что использую купленный сертификат.
Да загрузил свой сертификат в систему.
Поменял порт на 443.
Да проброс портов работает.
Выпущен в мир, могу зайти в веб консоль с внешнего пк (например домашнего) по https сертификату, и показано , что сертификат по данному доменному имени действителен и работает.

ошибка на данный момент

Пишет бот подключен и выдает такую ошибку. Связанную с сертом.



Код: Выделить всё
Webhook: https://mychat.domain/rest/Telegram/332551243:AAE_CjZUxN5pzUIJUnOsXMJ/
Result:{"ok":true,"result":true,"description":"Webhook is already set"}

Check on Telegram:{"ok":true,"result":{"url":"https://mychat.domain/rest/Telegram/332551243:AAE_CjZUxN5pzUIJUnOsXMJ/","has_custom_certificate":false,"pending_update_count":6,"last_error_date":1521437515,"last_error_message":"SSL error {336130315, error:1408F10B:SSL routines:ssl3_get_record:wrong version number}","max_connections":40}}


По мимо чем в контрольной панели надо куда нить заносить сертификат?
Какие дальнейшие пути решения проблемы могут быть....?
Аватара пользователя
Андрей Раков
Замените ваш файл по пути: C:\Program Files (x86)\MyChat Server\node\server\index.js
(4.1 КБ) Скачиваний: 74


Затем перезапустите веб-сервер и повторите регистрацию бота.
Аватара пользователя
serega
Ошибка осталась.
Файл заменил, перезагрузил.

Webhook: https://mychat.domain/rest/Telegram/332 ... IJUnOsXMJ/

Result:{"ok":true,"result":true,"description":"Webhook is already set"}

Check on Telegram:{"ok":true,"result":{"url":"https://mychat.domain/rest/Telegram/332551243:AAE_CjZUxN5pzUIJUnOsXMJ/",
"has_custom_certificate":false,"pending_update_count":6,"last_error_date":1521462167,
"last_error_message":"SSL error {336130315,
error:1408F10B:SSL routines:ssl3_get_record:wrong version number}","max_connections":40}}
Аватара пользователя
Андрей Раков
Проведите тест сертификата на веб-сервере с помощью сервиса https://www.ssllabs.com/ssltest/

Меня интересует содержимое раздела "Configuration", но и остальное было бы желательно просмотреть.
Аватара пользователя
serega
Там вот такая лабуда. на первом видно, что сертификат встал и все ок.
по твоей ссылке пусто. Мб что-то не так сделал. где косякнул? [smilie=help.gif]
Делал по инструкции то что указывал выше ( ваша) , мб чего то еще надо было настраивать ??
Вложения
Снимок111.PNG
Снимок111.PNG (3.47 КБ) Просмотров: 2866
Снимок1.PNG
Снимок1.PNG (3.58 КБ) Просмотров: 2866
Аватара пользователя
Андрей Раков
Адрес точно доступен из интернета?

При покупке сертификата был учтен домен 3-го уровня mychat.[domain.com]?

Сервис проверки сертификата определяет всю инфу о домене и должен выдавать хоть что-то.

Могу посоветовать сделать бесплатный сертификат, как описано у нас в инструкции, он работает 100%, мы им пользуемся.

viewtopic.php?p=26593#p26593

Единственный его недостаток — каждые 90 дней нужно перегенерить.
Аватара пользователя
serega
первый скрин это доступ с внешнего пк , через интернет.
видно, что сертификат работает нормально, подсвечен зеленым(
По сервису не чего не выдает...может потому что я выпускаю по порту другому типо 9999
mychat.domain.ru:9999 и у меня все норм заходит
Аватара пользователя
serega
О чудо, изменил на стандартный 443 в пробросе. бот подключился но с такой ошибкой

Код: Выделить всё
Webhook: https://mychat.domain/rest/Telegram/332551243:AAE_CjZUxN5pzUIJUnOsXMJ/

Result:{"ok":true,"result":true,"description":"Webhook is already set"}

Check on Telegram:{"ok":true,"result":{"url":"https://mychat.domain/rest/Telegram/332551243:AAE_CjZUxN5pzUIJUnOsXMJ/","has_custom_certificate":false,"pending_update_count":12,"last_error_date":1521467452,"last_error_message":"Read timeout expired","max_connections":40}}



Вопрос, как исправить ошибку, как пользоваться перенаправлением в телеграм?
я написал себе с другово аккаунта, не пробросилось, что должен еще сделать?
Вложения
Снимок.PNG
Снимок.PNG (60.1 КБ) Просмотров: 2864
Аватара пользователя
serega
Не чего не менял, только включил галку

Код: Выделить всё
// ver 1.0 / Jun 9, 2017, (c) Alexey Pikurov, [email protected]
// -----------------------------------------------------------------------------------

function OnRequestByREST(sBody, sParams, sHeaders, sURL, sIPv4, sIPv6: string; iType: integer): string;
var
  sFirstName, sLastName, sNickName, sTelegramID, sText: string;
begin
  sFirstName  := '';
  sLastName   := '';
  sNickName   := '';
  sTelegramID := '';
  sText       := '';
 
  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 LowerCase(sText) = '/start' then
      mIntegrationTelegramAddUser(sTelegramID, sFirstName, sLastName, sNickName);
end;

begin

end.
Аватара пользователя
Андрей Раков
Замените на :

Код: Выделить всё
// -----------------------------------------------------------------------------------
// ver 2.0 / Aug 10, 2017, (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
                // multi-line text
                sData := '[Telegram] ' + ReplaceString(sText, #10, CRLF, true, false);
                // send private message into MyChat
                mSendPrivateMessage(iUINFrom, iUIN, sData, 1, true);
              end; 
          end;
     
      end;
     
  result := '{}';
end;

begin

end.
Аватара пользователя
Андрей Раков
Также добавьте скрипт "OnPrivateMessage" - "OfflineMsg2Telegram":

Код: Выделить всё
// -----------------------------------------------------------------------------------
// ver 1.1 / Sep 22, 2017, (c) Alexey Pikurov, [email protected]
// -----------------------------------------------------------------------------------
function OnPrivateMessage(iCID, iUIN, iUINTo, iMsgType: integer; sMsg: string): boolean;
var
  sID, sOutMsg, sNameFrom, s: string;
  bResult: boolean;
begin
  SetScriptTimeOut(10000);
 
  result := true;

    if not mIsUINOnline(iUINTo) then begin
      // get sender's Telegram ID
      sID := mIntegrationTelegramGetUserIDByUIN(iUINTo);

        if sID[1] <> '-' then begin // no errors
          // get MyChat sender's display name
          sNameFrom := mGetUserFullNameByPreset(iUIN, 0);

          // 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
          s := mIntegrationTelegramSendMessage(sID, sOutMsg, 5000);
          bResult := true;

            if JSONGetBoolean(s, 'ok', bResult) <> 0 then bResult := false;

            // if any error occured - log result to server's system scripts protocol
            if not bResult then mLogScriptToDisk(s);
        end;
    end;
end;

begin

end.


В более новых версиях сервера эти скрипты уже включены в сборку.
Аватара пользователя
serega
Получилось написать в Mychat и прочитать/ответить в телеграм боте.
Остается вопрос,
1) как написать на группу телеграм из конференции
2) как ответить в конференцию из телеграмма
Аватара пользователя
Алексей Пикуров
Здравствуйте.

Такой функционал мы ещё не делали. Если вам это нужно — можем доработать.

Переношу тему в раздел ботов и скриптов.