Код:
// проверить соединение к телефонии (вызывается по нажатию на кнопку "Проверить соединение" на странице модуля)
async function VoipTestConnection(): Promise<VoipTestConnectionResult> {
try {
let response = await fetch(`${Namespace.params.data.api_endpoint}`, {
method: 'GET'
});
const message = await response.json();
if (response.status !== 200) {
throw new Error(`${response.status} ${response.statusText}: ${message.error}`);
}
return {
success: true
};
} catch (e) {
return {
success: false,
failReason: e.message,
};
}
}
Проверим соединение. Перейдем на страницу модуля, в блоке
Код:
// данные пользователя телефонии РТУ
interface VoipUser {
// id пользователя
id: string;
// номер телефона
phoneNumber: string;
// почта
email: string;
// ФИО
name: string;
// логин
sipLogin: string;
// пароль
sipPassword: string;
}
// получить список пользователей IP-телефонии (используется для сопоставления пользователей по нажатию кнопки "Настроить" на странице модуля)
async function VoipGetMembers(): Promise<VoipMember[]> {
let all_voip_users : VoipUser[] = [];
let all_users: {
id: string;
label: string;
}[] = [];
if (!Namespace.params.data.domains_list || !Namespace.params.data.domains_list.length) {
return [];
}
for (let one_row of Namespace.params.data.domains_list) {
if (one_row.domain.length > 0) {
let login_and_pwd = btoa(`${one_row.domain}:${one_row.password}`);
let response_get_users = await fetch(`${Namespace.params.data.api_endpoint}/users`, {
method: 'GET',
headers: {
'Authorization': `Basic ${login_and_pwd}`
}
});
if (!response_get_users.ok) {
await System.cache.setItem("testapi", `запрос получения пользователей ${response_get_users.status}: ${response_get_users.statusText}`, 300000);
throw new Error(`received error response get users ${response_get_users.status}: ${response_get_users.statusText}`);
}
const result = await response_get_users.json();
const users = <VoipUser[]>(result.list);
let voip_user = users.map(user => ({
id: `${user.phoneNumber}${one_row.domain_digital_code}`,
label: `${one_row.domain} ${user.name} (${user.phoneNumber})`,
}));
all_users = all_users.concat(voip_user);
all_voip_users = all_voip_users.concat(users);
}
}
await System.cache.setItem("testapi", `${JSON.stringify(all_voip_users)}`, 300000);
let all_emails = all_voip_users.map(x => x.email);
let group_operators = await System.userGroups.search().where(x => x.__name.eq("Операторы")).size(10000).first();
if (!group_operators) {
return all_users;
}
let users_in_operators = await group_operators.users(0, 10000);
if (!users_in_operators || !users_in_operators.length) {
return all_users;
}
let users_emails_in_operators = users_in_operators.filter(x => x.data.email !== undefined).map(x => x.data.email!);
let create_elma_users = await System.users.search().where((x, y) => y.and(x.email.in(users_emails_in_operators), x.email.in(all_emails))).size(10000).all();
let operators = await Namespace.params.fields.operators_app.app.search().where(x => x.email.in(all_emails)).size(10000).all();
if (!create_elma_users) {
return all_users;
}
for (let one_user of create_elma_users) {
let operator = operators.find(x => x.data.email == one_user.data.email);
if (!operator) {
break;
}
let domain = operator.data.domain;
if (!domain) {
break;
}
let domain_row = Namespace.params.data.domains_list.find(x => x.domain == domain);
if (!domain_row) {
break;
}
let pwd = domain_row.password;
if (!pwd) {
break;
}
let login_and_pwd = btoa(`${domain}:${pwd}`);
let voip_user = all_voip_users.find(x => x.email == one_user.data.email);
if (!voip_user) {
break;
}
let response_create_user = await fetch(`${Namespace.params.data.api_endpoint}/user`, {
method: 'POST',
headers: {
'Authorization': `Basic ${login_and_pwd}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
"id": voip_user.phoneNumber ? voip_user.phoneNumber : "",
"phoneNumber": voip_user.phoneNumber ? voip_user.phoneNumber : "",
"email": voip_user.email ? voip_user.email : "",
"name": voip_user.name ? voip_user.name : "",
"sipLogin": voip_user.sipLogin ? voip_user.sipLogin : "",
"sipPassword": voip_user.sipPassword ? voip_user.sipPassword : ""
})
});
if (!response_create_user.ok) {
throw new Error(`received error response create user ${response_create_user.status}: ${response_create_user.statusText}`);
}
}
let delete_elma_users = await System.users.search().where((x, y) =>
y.or(
y.not(x.email.in(users_emails_in_operators)),
x.__status.eq(UserStatus.Blocked)
)
).size(10000).all();
for (let one_user of delete_elma_users) {
let operator = operators.find(x => x.data.email == one_user.data.email);
if (!operator) {
break;
}
let domain = operator?.data.domain;
if (!domain) {
break;
}
let domain_row = Namespace.params.data.domains_list.find(x => x.domain == domain);
let pwd = domain_row?.password;
let login_and_pwd = btoa(`${domain}:${pwd}`);
let voip_user = all_voip_users.find(x => x.email == one_user.data.email);
if (!voip_user || !voip_user.id) {
break;
}
let response_delete_user = await fetch(`${Namespace.params.data.api_endpoint}/user`, {
method: 'DELETE',
headers: {
'Authorization': `Basic ${login_and_pwd}`
},
body: JSON.stringify({
"id": voip_user.id ? voip_user.id : ""
})
});
if (!response_delete_user.ok) {
throw new Error(`received error response delete user ${response_delete_user.status}: ${response_delete_user.statusText}`);
}
await operator.delete()
}
return all_users;
}
Помимо функции возврата массива пользователей платформе для корректного их использования далее в телефонии необходимо воспользоваться функциями создания/обновления пользователей, а также удаления. Согласно