[core] Chatwoot - fix LID contact sending failure due to device part in JID (#42)
Normalize LID JIDs using normalizeJid() before passing to LidContactInfo so that the device part (e.g. :11 in 183...977:11@lid) is stripped before being persisted as WA_CHAT_ID in Chatwoot custom attributes. Without this fix, GOWS rejects sendText calls with the error "message recipient must be a user JID with no device part" because FindChatID returns the raw LID (with :11) that was stored during the incoming message flow. * [PLUS] fix Chatwoot normalize LID device part on read to unblock existing contacts Introduce normalizeChatId() helper in ids.ts that strips the device part (e.g. :11) from LID JIDs using normalizeJid(). Apply it in FindChatID and GetAllChatIDs so that contacts already persisted with a raw LID such as 183...977:11@lid are transparently normalized at read time. This covers the send path for contacts created before the WhatsAppContactInfo factory fix, preventing GOWS from rejecting sendText calls with "message recipient must be a user JID with no device part".
This commit is contained in:
1 parent
c8f067229b
commit
d2b7d94607
2 files changed
+7
-13
No files matched your search
@@ -2,7 +2,7 @@ import { AttributeKey, INBOX_CONTACT_CHAT_ID } from '@waha/apps/chatwoot/const';
|
||||
import * as lodash from 'lodash';
|
||||
import { WhatsAppMessage } from '@waha/apps/chatwoot/storage';
|
||||
import { buildMessageId } from '@waha/core/engines/noweb/session.noweb.core';
|
||||
import { isLidUser } from '@waha/core/utils/jids';
|
||||
import { isLidUser, normalizeJid } from '@waha/core/utils/jids';
|
||||
|
||||
export function GetJID(contact: any): string | null {
|
||||
return contact?.custom_attributes?.[AttributeKey.WA_JID];
|
||||
@@ -23,20 +23,13 @@ export function GetAllChatIDs(contact: any): Array<string> {
|
||||
attrs[AttributeKey.WA_JID],
|
||||
attrs[AttributeKey.WA_LID],
|
||||
];
|
||||
return lodash.uniq(ids.filter(Boolean));
|
||||
return lodash.uniq(ids.filter(Boolean).map(normalizeJid));
|
||||
}
|
||||
|
||||
export function FindChatID(contact: any): string | null {
|
||||
if (GetChatID(contact)) {
|
||||
return GetChatID(contact);
|
||||
}
|
||||
if (GetJID(contact)) {
|
||||
return GetJID(contact);
|
||||
}
|
||||
if (GetLID(contact)) {
|
||||
return GetLID(contact);
|
||||
}
|
||||
return null;
|
||||
const chatId =
|
||||
GetChatID(contact) ?? GetJID(contact) ?? GetLID(contact) ?? null;
|
||||
return chatId ? normalizeJid(chatId) : null;
|
||||
}
|
||||
|
||||
export function SerializeWhatsAppKey(message: WhatsAppMessage): string {
|
||||
|
||||
@@ -13,6 +13,7 @@ import {
|
||||
isJidStatusBroadcast,
|
||||
isLidUser,
|
||||
isPnUser,
|
||||
normalizeJid,
|
||||
} from '@waha/core/utils/jids';
|
||||
import { UnknownJIDFormat } from '@waha/apps/chatwoot/errors';
|
||||
import { E164Parser } from '@waha/core/utils/PhoneJidNormalizer';
|
||||
@@ -270,7 +271,7 @@ export function WhatsAppContactInfo(
|
||||
} else if (isJidBroadcast(chatId)) {
|
||||
return new BroadcastContactInfo(session, chatId, locale);
|
||||
} else if (isLidUser(chatId)) {
|
||||
return new LidContactInfo(session, chatId, locale);
|
||||
return new LidContactInfo(session, normalizeJid(chatId), locale);
|
||||
} else if (isPnUser(chatId)) {
|
||||
return new JidContactInfo(session, chatId, locale);
|
||||
} else {
|
||||
|
||||
Reference in new issue
Block a user