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

Вы можете делать это в скриптовом движке на сервере. Или вы хотите это делать через REST? Опишите подробнее, пожалуйста.
ВладимирРябов
Чтобы при создании пользователя с внешнего сервера командой MCIAPI_CS_RegisterNewUser, я мог бы пользователя сразу же добавлять в определенный список контактов.
Аватара пользователя
Алексей Пикуров
Можете скриптовой функцией 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, уже работает в свежих сборках.

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