Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
Аватара пользователя
Alexandr
Доработанный скрипт для отправки сообщения:
- при наличии интеграции с Telegram и текстового сообщения (вложения пока нет возможности передать) сообщение передается в Telegram
- При наличии почты и offline (чтобы не надоедать) отправка идет на емайл

Дополнено формирование html при наличии у отправителя емайла представление пользователя кликабельной ссылкой для быстрого ответа.

Код: Выделить всё
// -----------------------------------------------------------------------------------
// ver 1.1 / Sep 22, 2017, (c) Alexey Pikurov, support@nsoft-s.com
// ver 1.2 / Dec 20, 2018, (c) Alexandr
// -----------------------------------------------------------------------------------

function IsTextMessageType( iMsgType: integer): boolean;
begin
   result := false;
   case iMsgType of
       0: result := true;
       1: result := true;
       5: result := true;
       10: result := true;
       11: result := true;
       15: result := true;
       16: result := true;
       21: result := true;
    end;
end;

function OnPrivateMessage(iCID, iUIN, iUINTo, iMsgType: integer; sMsg: string): boolean;
var
  sID, sOutMsg, sNameFrom, s, sEmailTo, sEmailFrom, sTextBody, sTextFrom, sTextSubject: string;
  bResult, bSendMessage, bNotOnline: boolean;
  iState: integer;
begin
  result := true;
   
    bNotOnline := not mIsUINOnline(iUINTo);
    bSendMessage := bNotOnline;
   
    if not bSendMessage then begin
       iState := mGetUserState(iUINTo);
        if iState = 1 then begin
           bSendMessage := true;
       end;
    end;
   
    if bSendMessage then begin
      // get sender's Telegram ID
      sID := mIntegrationTelegramGetUserIDByUIN(iUINTo);
      sEmailTo   := mGetUserPrimaryEmail(iUINTo);
      sEmailFrom := mGetUserPrimaryEmail(iUIN);
      sNameFrom := mGetUserFullNameByPreset(iUIN, 0);
     
         //Если тип сообщения строка и сотрудник подключен к боту Telegram
        //то отправка будет через Telegram (файлы все равно на телеграм не попадают смысл их передавать)
        //Иначе если не в онлайне отправка на емайл
        if (sID[1] <> '-') and (IsTextMessageType(iMsgType) = true) then begin // no errors
         
          // 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
        else if (length(sEmailTo) > 0) and (bNotOnline) then begin
       
          sTextSubject := 'Сообщение от '+sNameFrom + ' ' + FormatDateTime('[dd.mm.yyyy hh:nn:ss]', Now);
          if (length(sEmailFrom) > 0) then begin
              sTextFrom := '<a href="mailto:'+sEmailFrom+'">'+sNameFrom+'</a>';
          end
          else begin
              sTextFrom := sNameFrom;       
          end;   
         
          sTextBody := '<span style="color:green">' +
                       FormatDateTime('[dd.mm.yyyy hh:nn:ss]', Now) +
                       '</span>' +
                       ' '+
                       '<span style="color:blue"><b>' +
                    sTextFrom +
                       '</b></span>'+
                       '&gt; ';
                       
          if (IsTextMessageType(iMsgType) = true) then begin
             sTextBody := sTextBody + CRLF + ReplaceString(mConvertMsgToPlainText(sMsg, iMsgType), CRLF, '</br>', true, false);
          end
          else begin
             sTextBody := sTextBody + 'Вам был отправлен файл, но к большому сожалению функция передачи файла по емайлу еще не реализованна'+CRLF+'</br>';
          end;
         
          mSendEmail(sEmailTo, sTextSubject, sTextBody, 1, '');
        end;
    end;
end;

begin

end.