Любые идеи по развитию MyChat. Запросы на новые функции, предложения по улучшению уже работающих сервисов. Если вы знаете, что нужно добавить в MyChat — welcome!
ВладимирРябов
Собственно это и есть предложение: добавлять пользователя через API в список контактов при создании и после
Аватара пользователя
Алексей Пикуров
Здравствуйте.

Вы можете делать это в скриптовом движке на сервере. Или вы хотите это делать через REST? Опишите подробнее, пожалуйста.
ВладимирРябов
Чтобы при создании пользователя с внешнего сервера командой MCIAPI_CS_RegisterNewUser, я мог бы пользователя сразу же добавлять в определенный список контактов.
Аватара пользователя
Алексей Пикуров
MCIAPI_CS_MoveUserToDepartment
ВладимирРябов
Спасибо, попробую. Просмотрел, команду.
ВладимирРябов
где можно увидеть GroupID списка контактов?
Аватара пользователя
Алексей Пикуров
Можете скриптовой функцией mGetDepartmentIDByTextPath посмотреть.
ВладимирРябов
id списка определил, спасибо, получилось.

Отправляю запрос
Код: Выделить всё
{
 "cmd"       : "0017",
 "ServerKey" : "MyChat_token",
 "APIStype"  : "mydata",
  "UIN"       : 47,

 "GroupID"   : 15
}

на http://10.4.173.125:8081/API/?data= или http://10.4.173.125:8081/API/

получаю ошибку:
Код: Выделить всё
"cmd":1,"Error":30,"hash":"OBD7_45_0V1NoWQ","CMD":"6"


UIN пользователя -47 корректный
id группы- 15 определил через скрипт.
Аватара пользователя
Алексей Пикуров
Проблема в том, что функция переносит пользователя из одного подразделения в другое, а не добавляет в общий список контактов. Иными словами, юзер уже должен быть в общем списке контактов.

Отдельной функции добавления юзера в общий список контактов через Integration API ещё нет, но это можно сделать скриптом.
ВладимирРябов
Да, сделал скрипт, который переносит пользователя в нужный список.

Код: Выделить всё
var
  iUIN,x: integer;
  iGroupID: integer;
  sUserNameJSON,sDomaneNam,sMsg: string;
begin
  iUIN:=56;
 
  sUserNameJSON := mGetUserDataAsJSON(iUIN, 'DomainName');
  JSONGetString(sUserNameJSON, 'DomainName', sDomaneNam);
  mLogScript(sDomaneNam, 'Домен');
 
    if sDomaneNam = 'Viber' then begin
        iGroupID := mGetDepartmentIDByTextPath('Абоненты\VIBER');
        mLogScript(sDomaneNam, 'Viber')  end else
   
    if sDomaneNam = 'Telegram' then begin
        iGroupID := mGetDepartmentIDByTextPath('Абоненты\TELEGRAM');
        mLogScript(sDomaneNam, 'Telegram')  end else
       
    if sDomaneNam = 'VK' then  begin
        iGroupID := mGetDepartmentIDByTextPath('Абоненты\ВКОНТАКТЕ');
        mLogScript(sDomaneNam, 'ВК')  end else
                                      iGroupID := mGetDepartmentIDByTextPath('Абоненты');
   
      x := mAddUserToCommonContacts(iUIN,iGroupID);
                         
        case x of
          0: sMsg := 'all Ok!';
          -1: sMsg := 'user already is in the common contact list';
          -2: sMsg := 'wrong GroupID';
          -3: sMsg := 'user UIN does not exist';
          -4: sMsg := 'you can''t use UIN = 0';
        end;
       
      mLogScript(sMsg, IntToStr(iGroupID)); 

end.


У меня в качестве домена при создании пользователя через API указывается принадлежность к мессенджеру: VIBER, TELEGRAM или ВКОНТАКТЕ. Соответственно, есть соответствующие списки.
Данный скрипт переносит пользователя с iUIN:=56 в нужный- все работает.

Но в OnRegisrtrered пока не заработало, допиливаю.
ВладимирРябов
К сожалению, событие OnRegistered не работает (((
Пробовал разные варианты, для проверки я создал группу MyGroupForAllNewUsers и и добавил скрипт из примера:
Код: Выделить всё
procedure OnRegistered(iCID, iUIN: integer; var iRole: integer; var bBlocked: boolean);
var
  sGroupName: string;
  x: integer;
begin
  sGroupName := mGetRoleNameByID(iRole);
 
    if sGroupName = 'Guests' then x := mGetRoleIDByName('MyGroupForAllNewUsers');
   
    if x <> -1 then iRole := x;
end;

begin

end.

но ничего не происходит
Аватара пользователя
Алексей Пикуров
"MyGroupForAllNewUsers" — это группа прав или группа пользователей?
ВладимирРябов
Это скрипт из документации.
MyGroupForAllNewUsers- это и группа пользователей и список, и список контактов, и группа прав. Для проверки везде создал.
Аватара пользователя
Алексей Пикуров
Залогируйте, чему равен x после выполнения функции.

Должна быть группа пользователей, группы прав и контакты тут не при чём.
ВладимирРябов
Да скрипты-то работают, насколько я понимаю, они не работают в разделе OnRegistered

Меня сейчас содержимое скрипта не интересует. Мне важно, чтобы хоть какой-то скрипт выполнился по событию "Регистрация нового пользователя".

Я делаю следующее:
1. Создаю скрипт в разделе OnRegistered
2. Сам скрипт:
Код: Выделить всё
// ---------------------------------------
// Script created by admin (UIN 1)
// 12.11.2020 10:25:41
// ---------------------------------------

procedure OnRegistered(iCID, iUIN: integer; var iRole: integer; var bBlocked: boolean);
begin

  mLogScriptToDisk(mHTTPSendPostMessage('google.com', '', '', 2000));
  mLogScriptToDisk(mHTTPSendPostMessage('127.0.0.1:9999', '', '', 2000));


end;

begin

end.

3. Ставлю галочку активации.

Через API создаю нового пользователя. Пользователь создается. Соответственно, после создания пользователя должен запуститься этот скрипт. В логах пусто.

Проверял этот скрипт в разделе Library-Custom - все работает. В логах информация как в доке появляется. При создании пользовается- нет.
Аватара пользователя
Алексей Пикуров
Понял, о чём вы. Это событие срабатывает, только если пользователь регистрируется в чате самостоятельно. Если вы добавляете юзера через API, то событие не будет возбуждаться, мы этого не делали.

Я поставил в план работ, сделаем. Спасибо, что описали полезный кейс.
ВладимирРябов
Да. Проверил. При регистрации нового пользователя через приложение событие срабатывает.
Было бы отлично, чтобы срабатывало и при регистрации через API.
Аватара пользователя
Алексей Пикуров
Задачу решает функция MCIAPI_CS_AddUserToCommonContacts, уже работает в свежих сборках.

Возбуждать скриптовое событие при "дёргании" функции создания юзера не будем.