Пусть RingCentral подписывается вместо чеканки JWT
На вкладке «Настройки телефонов» участника запросили учетные данные JWT, и это было единственным способ их соединения. RingCentral JWT принадлежит одному пользо...
Сообщите RingCentral JWT из учетных данных приложения, вставленных в его коробку
Орг вставил учетные данные своего приложения RingCentral JSON - {"clientId": ..., "clientSecret": ..., "server": ...} смазать консоль разработчика показывает на...
Пускай выкатка закончит то, что делала старая подушка
Деплойты заменили единственный блок каждой службы, в котором не было ничего, чтобы поймать запросы. Полёт. Три настройки, применяемые по всему флоту: Престоп с...
Кодировать значения запроса JustCall ровно один раз
Клиент построил свой запрос с помощью build(true), который объявляет значения уже Закодировано — так ничего и не ускользнуло. Характер, который имеет значение «...
Применяйте конфигурацию FreePBX после каждой записи, или расширение никогда не достигнет Asterisk
Расширение 8777 (Aiden Perry, kamocrm) было создано из КамоКРМ 2026-09-02 И никогда не звонил. Мутация FreePBX GraphQL «addExtension» "пользователи", "устройств...
An account with no number to text from is a 409, not a 500
Starting a text threw IllegalStateException when neither the member nor the instance had an outbound number, which Spring turned into a 500 with a stack trace. ...
Один источник истины для настроек платформы
«Тестовое соединение» сообщило об отсутствии идентификатора главной учетной записи на телефонном сервере, чей За несколько минут до этого провизия преуспела, ис...
Полупредоставленный телефонный сервер никогда не может быть закончен и говорит не то
Об этом сообщает сервер KamoPBX от одной из организаций Ошибка: Телефонный провайдер не найден: **************************** С тех пор, как он был создан. Слу...
Outbound external calls were missing from FreePBX call history
On an outbound external call FreePBX rewrites the CDR `src` to the trunk's outbound caller ID — the org's own DID — so a call ext 8080 placed to 9493747110 is r...
Запись, байты которой исчезли, отвечает 410, а не 500
Тот же раздел, что и прокси-сервер изображений и загрузка документов. Запись звонка, которая является Не в хранилище постоянно нет, и игрок, которому вручили 50...
Расширение больше не стирает каждое назначение члена
MemberVoipConfigController.put пишет задание на два места - MEMBER VOIP CONFIG и **************** *******************, а затем очистил второй проход. Нет. прова...
Дайте кодировщику текстовых разговоров тай-брейк, чтобы привязанные метки времени не сбрасывались
lastActivityAt, так что обмен разговором, который точный отметка времени был исключен из Утеряно из списка навсегда, а не просто неправильно. Достижима на практ...
Ворота голосовой почты рассчитывают на VIEW VOICEMAIL
******************* Подаренный любой аутентифицированный член проведение строки MemberVoipConfig с непрочитанным счетом голосовой почты Нет никакой проверки пра...
Остановите RingCentral OAuth, подписав арендаторов с белыми метками
Два дефекта, оба на одном прыжке, и каждый из них скрывает другой. RingCentral отвергает все значения объема, которые может запросить это приложение. «invalid ...
Размер капсулы над собственным потолком JVM (skip ci)
Изображение начинается с -XX:MaxRAMPercentage=70 -XX:+ Всегда прикасайтесь, поэтому Одна только куча может занять 70% от лимита контейнера, а предтач сохраняет ...
Работа с голосовой почтой требует права, а не только обработки PHI
VoipVoicemailController требовал VIEW CALL LOGS на одном пути — воспроизведение и только в том случае, если организация занимается ПФР. Перечисление голосовых с...
Изолировать вызов глотание за строку и ссылку только после его совершения
Две ошибки с одним корнем: проглатывание участвовало в операции зачистки. Бросок в участвующую транзакцию знаменует сделку SHARED. только откат. SyncCallLogs п...
Пропустить мягкие удаленные расширения в подметке истории вызовов
syncExtensions soft-deletes — переключение статуса на UNKNOWN вместо удаления Таким образом, список накапливает каждое расширение, которое когда-либо имел экзем...
Закройте дыру в почтовом ящике и еще шесть дефектов команды
Обсуждение 6df0008 подтвердило 24 вывода. Важные из них: КРИТИЧЕСКИЙ — любой член может удалить почту коллеги. Команды голосовой почты были Составлено как «{ma...
Сканирование общих репозиториев MFA
MfaEnrollmentService - это @Service в библиотеке, разделенной Камо, так что Wildcard @ComponentScan("com.kamo") в этом приложении строит его независимо от того,...
Укрепите загрузку kububl против шелушащегося выхода [skip ci]
dl.k8s.io по выходу бегуна периодически падает в середине передачи: Curl: (56) OpenSSL SSL read: расшифровка не удалась или не удалась который не справляется с ...
Прекратите прикреплять просроченный секрет wildcard-kamocrm-com
wildcard-kamocrm-com был унаследованной мульти-SAN тайной, которую серт-менеджер осиротел. когда его сертификат был повторно указан в секрете хозяина. Ничего не...
Guard/internal/voip with InternalAuthFilter as documented — it 401'd on session auth
VoipInternalSyncController всегда документировал внутренний фильтр как свою охрану. но /internal/voip никогда не был в PROTECTED PREFIXES и не был исключен из O...
Постоянное сравнение секретов внутренней ауты (оракул времени)
Заменить String.equal на MessageDigest.isEqual, чтобы задержка ответа не могла X-Internal-Auth делится секретным байт за байтом. Широкий охват флота копировальн...
Вернуться 200 Ложь для неконфигурированных возможностей
GET/api/voip/capabilities бросила ProviderNotConfiguredException (422) Org не имела провайдера телефонов, регистрируя ошибку красной консоли на каждой загрузке ...
Исключить /api/voip/sms/templates из фильтра сеанса OTK
Конечные точки шаблона Doc-07 SMS - это внутренние звонки без сеанса, защищенные Внутренний фильтр (X-Internal-Auth), но OTKValidation Фильтр все еще работал на...
Внедрение POST/api/bulktext/отправка внутренних транзакционных SMS
SecurityService's BulkTextSmsClient (password-recovery + account-settings SMS) всегда POSTed **************** to /api/bulktext/send, Но контроллер так и не был ...
Создание записи ключа объекта MinIO, такого как поток изображений
Опустить расширение, когда FILE EXT является нулевым / пустым, чтобы имя объекта совпадало RecordingImagingService и ImagingController. Строка Java Concat с нул...
Разрешить расширение истории вызовов с помощью Member voip config, а не phone extension
************************************************************************************* Member voip config корректно отображает расширение. использовать Member vo...
Surface imaging fallback when provider has no call history
KamoPBXProvider.getCallHistory now returns null instead of throwing **************** so the 501 response no longer bypasses the imaging fallback. The provider c...
Resolve member→extension before VM/CDR provider lookup
CallController was passing memberId where FreePBX (and other PBX-style providers) expect an extension number — voicemail listing returned empty because no PBX e...
Захват нового ExtNumber в качестве окончательного захвата лямбды в контроллере MemberVoipConfigController
newExtNumber условно переназначен внутри if (isVoipEnabled & & ...) Блок, что делает его не совсем окончательным. Блок синхронизации TeamMember читает лямбда Op...
Не стирайте задание участника на синхронизацию от поставщиков, которым не хватает метаданных
**************************** безоговорочно переписанный PhoneExtension.assignedMemberId с любым возвратом провайдера. FreeBX (и любой провайдер, который не отсл...
Use extensionId as external ID, not Relay node id
FreePBX returns the same Relay id (ZXh0ZW5zaW9uOg== = "extension:") for every extension because the id field is not populated. Using it caused all extensions to...
Переписать все запросы/мутации GQL на интроспекции живых схем
Проверяли каждое имя поля и тип по фактической схеме FreePBX 17. Полный набор исправлений: Вопросы: - fetchAllExtensions: удалите из расширения несуществующее ...
Исправьте имя поля GraphQL для fetchAsteriskDetails
FreePBX API возвращает «Вы имели в виду fetchAsteriskDetails?» соответственно проверить запрос и его доступ к пути передачи данных.
Добавить заголовки XHR/Accept и парсинг струнных ответов для клиента GraphQL
Тот же шаблон, что и FreePBXTokenCache: добавьте X-Requested-With + Accept: Application/json подавление HTML-ответов FreePBX и переключение всех трех сайтов выз...
Добавьте заголовки Accept + XHR и анализ ответов на исходную строку для конечной точки токена
FreePBX возвращал текст/html при вызове через кластер DNS. Заголовок хоста не соответствовал настроенному PBX HOSTNAME. Добавить Принять: приложение/json и X-Re...
Исправьте строки OAuth2 для FreePBX API
FreePBX - это идентификаторы верхнего уровня: gql (все GraphQL) и «Отдых» (All REST) Формат gql:read означает GQL для модуля Называется «чтение», которого не су...
Включите com.kamo.z.shared.commerce в репозиторий
Последняя камо-общая библиотека распространяется **************************** (donotmodify.dao.services), в зависимости от конструктора ************************...
Bump kamo-shared-library to 1.4.0
Docker Stage 1 builds kamo-shared-library main (now 1.4.0) and installs it to the local .m2; the service pom still referenced 1.0.0 which Maven could not find, ...
Handle RC webhook validation token; make body optional for verification requests
Explicitly stringify Long IDs in SmsController responses
**************** Long-as-string approach was not taking effect. Directly call .toString() on all Long IDs in the controller flat-map responses to guarantee no J...
Serialize Long IDs as strings to prevent JS precision loss
CockroachDB unique_rowid() generates 64-bit integers larger than Number.MAX_SAFE_INTEGER (2^53-1). JS JSON.parse silently rounds them, causing conversation ID m...
Return flat map from send endpoint to prevent LazyInitializationException
VoipMessage.conversation is FetchType.LAZY; after @Transactional commits, Jackson serializing the entity would throw LazyInitializationException causing a 500, ...
Fall back to org mainPhoneNumber when member has no VOIP config
Members without an individual MemberVoipConfig (or no fromPhoneNumber set) now use the org's mainPhoneNumber from VoipProviderConfig as the outbound number, ins...
Remove getJwtKey() from WebhookController after OAuth migration
Signature validation used jwtKey as HMAC secret which no longer exists on VoipProviderConfig. Skip validation for now consistent with ****************
Use correct session key casing for orgID and memberID
KSessionService stores keys as orgID and memberID (capital D). Both controllers were calling .get("orgId") and .get("memberId") which always returns null, causi...
Как вы видите судоходство?
Все это приходит в ваше рабочее пространство самостоятельно. Начните с бесплатного плана и прочитайте эту страницу через месяц.
