Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
Аватара пользователя
Алексей Пикуров
Иногда в компаниях нужно, чтобы, например, все пользователи могли общаться с дирекцией, но продажникам общаться с бухгалтерией нельзя, и наоборот. Однако другим группам людей из общего списка контактов писать можно.

Получается довольно сложная схема, причём в разных компаниях она может быть ещё более сложной.

Хотелось бы настроить сервер мессенджера MyChat так, чтобы это всё работало автоматически.

Начиная с версии 5.22 добавлены необходимые функции скриптового движка и это легко сделать, создав скрипт на событие OnPrivateRequest. Я его назвал "PrivateRestrictionsByDepartments":

PrivateRestrictionsByDepartments.png
Ограничение приватного общения в чате по группам контактов в корпоративном мессенджере MyChat
PrivateRestrictionsByDepartments.png (85.86 КБ) Просмотров: 4625


Текст скрипта:

Код: Выделить всё
function OnPrivateRequest(iCID, iUIN, iUINTo, iRole, iRoleReciever, iTask: integer): boolean;
var
  sDeptFrom, sDeptTo, sUserName: string;
  bFlag: boolean;
begin
  bFlag := true;
 
  // получаем названия групп в списках контактов пользователей
  sDeptFrom := mGetUserDepartmentName(iUIN);
  sDeptTo   := mGetUserDepartmentName(iUINTo);
 
    // если и получатель сообщения и отправитель находятся в
    // общем списке контактов
    if (length(sDeptFrom) > 0) and (length(sDeptTo) > 0) then begin
      if sDeptFrom = 'Бухгалтерия' then begin
        // бухгалтерия может писать всем, кроме отдела продаж     
        if sDeptTo = 'Отдел продаж' then bFlag := false;
      end else
      if sDeptFrom = 'Отдел продаж' then begin
        // отдел продаж может писать всем, кроме бухгалтерии
        if sDeptTo = 'Бухгалтерия' then bFlag := false;
      end;
      //------------------------------------------------------------------
      if not bFlag then begin
        sUserName := mGetUserAttribute(iUINTo, 'DisplayName');
        mSendCustomMsgToClientConsoleByCID(iCID, 'Вам запрещено общаться с ' + sUserName,
                                           'Error', true, true, 74);
      end;                                                     
    end;
 
  result := bFlag;
end;

begin

end.


Задавайте любые вопросы, предлагайте усовершенствования.