Skip to content

3.0.0

Choose a tag to compare

@NiktarioN NiktarioN released this 18 Aug 11:03
· 34 commits to master since this release

Изменения и улучшения

Шесть новых методов — диалоги и тикеты пользователя, поиск по телефону и по chat ID мессенджера, старт диалога с учеником, заметки к тикету и выгрузка ответов анкеты. Плюс теги в ответе заказа и четыре переименованных метода

Релиз мажорный: переименованы методы и связанные с ними типы. Ниже — что менять в коде, с примерами

🚀 Как обновиться

npm i getcourse-api@3

⚠️ Ломающие изменения

Переименованные методы

Fields путали с *CustomFields — методом, который возвращает только конкретный набор дополнительных полей, хотя сами *Fields-методы всегда работали с объектом целиком. Терминология для этого — Info

Было Стало
getUserFields getUserInfo
getDealFields getDealInfo
updateUserFields updateUserInfo
updateDealFields updateDealInfo

*CustomFields-методы не переименованы — с их именами всё было в порядке

Переименованные типы

Идут вслед за методами — правится только import type, вызовы методов не меняются

Было Стало Почему
DealTag DealTagNames имя отошло самому тегу заказа — { id, name }
OfferTag OfferTagNames симметрично DealTagNames, форма типа не менялась
SurveyAnswer UserSurveyAnswer имя отошло плоской выгрузке из нового getSurveyAnswers
GetUserFieldsRequest GetUserInfoRequest вслед за getUserInfo
UpdateUserFieldsRequest UpdateUserInfoRequest вслед за updateUserInfo
UpdateDealFieldsRequest UpdateDealInfoRequest вслед за updateDealInfo

getUserByTelegramChatId устарел

Работает по-прежнему, но помечен @deprecated — заменяется getUserByChatId, который покрывает Telegram, ВКонтакте и MAX одним методом

✨ Что нового

💬 Диалоги и тикеты пользователя одним вызовом

const dialogs = await gc.getUserDialogs({ userId: 251804773 });
const tickets = await gc.getUserTickets({ userId: 251804773 });

Раньше приходилось обходить диалоги по одному через getDialogHistory. Оба метода отдают одинаковую форму — массив { dialog_id, messages }, у тикетов в dialog_id лежит ID тикета

✉️ Написать ученику первым

await gc.startDialog({
  recipientId: 251804773,
  commentText: "Здравствуйте! Ваш заказ готов",
  transport: [3],
  userId: 903417,
});

Раньше требовалось входящее обращение от ученика, чтобы появился dialogId. startDialog принимает recipientId — ID ученика — вместо ID диалога. Повторный вызов с тем же учеником уходит в уже открытый диалог, новый не создаётся

🔍 Поиск пользователя по телефону и chat ID

const user = await gc.getUserInfo({ userId: 251804773 });
const fullName = `${user.data.first_name} ${user.data.last_name}`.trim();

const usersByPhone = await gc.getUserInfo({ phone: "+70000000000" });
const emails = Object.values(usersByPhone.data).map((person) => person.email);

const byChat = await gc.getUserByChatId({ messengerType: "tg", chatId: 118472905 });

По userId или email — один пользователь. По телефону — словарь { [userId]: User }, потому что номер может принадлежать нескольким людям. По chat ID Telegram, ВКонтакте или MAX — всегда один пользователь

Если совпадений нет ни по одному способу поиска — метод бросает GetCourseApiError, а не возвращает пустой результат

🎫 Заметка к тикету HelpDesk

await gc.addTicketNote({
  ticketId: 4471,
  text: "Внутренняя пометка, клиенту не видна",
  userId: 903417,
});

Аналог addDialogNote, но для HelpDesk. В отличие от addDialogNote требует userId — от чьего имени заводится заметка

📋 Ответы анкеты

const answers = await gc.getSurveyAnswers({ surveyId: 1668900 });

for (const answer of answers.data.answers) {
  console.log(answer.user_name, answer.answers);
}

Отличается от getUserSurveyAnswers: тот отдаёт анкеты по пользователю со вложенной моделью формы, getSurveyAnswers — плоскую выгрузку ответов по анкете с отдельным справочником вопросов (answers.data.questions)

🏷 Теги в ответе заказа

const deal = await gc.getDealInfo(12345);

deal.data.tags.map((tag) => tag.name);

getDealInfo теперь возвращает DealWithTags — заказ вместе с тегами. getUserDeals теги не отдаёт, там как был Deal, так и остался

🆘 Если что-то пошло не так

Нашли расхождение с реальным поведением API или не хватает метода — заводите issue. Типы в пакете строятся на живых ответах API, а не на схеме, поэтому такие сообщения ценны

Откатиться на прежнюю версию всегда можно командой npm i getcourse-api@2.0.1