Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
Аватара пользователя
ota-elena
Здравствуйте. Используем стандартный код от разработчиков function OnPrivateMessage()

При отправке сообщения пользователю, содержащее только ссылку - в телеграм приходит пустое сообщение. Только написано от кого.
Но если добавить до ссылки любое слово или после ссылки тоже любое слово - все нормально.

"https://nsoft-s.com/support.html "- сообщение такого типа не видно.
"вот нужная ссылка https://nsoft-s.com/support.html "
или
"https://nsoft-s.com/support.html это нужная ссылка" - тогда все нормально, в телеграм будет и текст и ссылка.

Подскажите, это можно исправить или где-то в коде надо делать дополнительные проверки/конвертацию?
Аватара пользователя
Алексей Пикуров
Добрый день. Покажите свой код скрипта, пожалуйста. Обрамите его тегом code в форуме.
Аватара пользователя
ota-elena
Код: Выделить всё
function OnPrivateMessage(iCID, iUIN, iUINTo, iMsgType: integer; sMsg: string): boolean;
var
  sID, sOutMsg, sNameFrom, s: string;
  bResult: boolean;
  iState: integer;
begin
  SetScriptTimeOut(10000);

  result := true;
 
  iState := mGetUserState(iUINTo);
  if iState <> 0 then begin  //было  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);
         
           

        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
          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 begin
              s := 'From: ' + IntToStr(iUIN) + ', to: ' + IntToStr(iUINTo) + CRLF + s;
              mLogScriptToDisk(s);
            end; 
        end;
    end;
end;

begin

end.
Аватара пользователя
Алексей Пикуров
Да, нужно доработать функцию mConvertMsgToPlainText, чтобы она делала из сообщения с типом "ссылка" обычный текст, который потом успешно сможет распарсить телеграм-бот.

Поставили в план работ.
Аватара пользователя
Алексей Пикуров
Сделали, ожидайте обновление.

mychat-link-to-telegram.png
How to send http(s) link from MyChat to Telegram Bot
mychat-link-to-telegram.png (33.5 КБ) Просмотров: 47617
Аватара пользователя
ota-elena
Спасибо! Ждем новую версию.