-
Notifications
You must be signed in to change notification settings - Fork 5.4k
Description
Welcome!
- Yes, I have searched for similar issues on GitHub and found none.
What did you do?
[Evolution API] v2.3.3 190 - Tue Sep 09 2025 11:23:30 LOG [BaileysMessageProcessor] [string] Processing batch of 1 messages
[Evolution API] [wanderley] v2.3.3 190 - Tue Sep 09 2025 11:23:30 INFO [ChannelStartupService] [string] Message duplicated ignored: 3F5BB0A0F7C5814F0D52
2025/09/09 10:24AM 50 pid=190 hostname=82dd79529a66 key={"remoteJid":"120363419697103562@g.us","fromMe":false,"id":"3A62B02B158CBBC0B956","participant":"557999012820@s.whatsapp.net","participantAlt":"54095264137225@lid"} err={"type":"TypeError","message":"The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received an instance of Object","stack":"TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received an instance of Object\n at Function.from (node:buffer:322:9)\n at SenderKeyState.getSigningKeyPublic (file:///evolution/node_modules/baileys/lib/Signal/Group/sender-key-state.js:61:23)\n at GroupCipher.decrypt (file:///evolution/node_modules/baileys/lib/Signal/Group/group_cipher.js:38:57)\n at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n at async executeTransactionWork (file:///evolution/node_modules/baileys/lib/Utils/auth-utils.js:293:24)\n at async Object.transaction (file:///evolution/node_modules/baileys/lib/Utils/auth-utils.js:439:28)\n at async decrypt (file:///evolution/node_modules/baileys/lib/Utils/decode-wa-message.js:194:45)\n at async file:///evolution/node_modules/baileys/lib/Socket/messages-recv.js:962:21\n at async file:///evolution/node_modules/baileys/lib/Utils/make-mutex.js:16:36\n at async Promise.all (index 0)","code":"ERR_INVALID_ARG_TYPE"} messageType=skmsg sender=120363419697103562@g.us author=557999012820@s.whatsapp.net isSessionRecordError=false msg=failed to decrypt message
[Evolution API] v2.3.3 190 - Tue Sep 09 2025 11:24:00 LOG [BaileysMessageProcessor] [string] Processing batch of 1 messages
[Evolution API] v2.3.3 190 - Tue Sep 09 2025 11:24:00 WARN [ChatwootService] [string] no body message found
[Evolution API] [wanderley] v2.3.3 190 - Tue Sep 09 2025 11:24:00 LOG [ChannelStartupService] [string] Update not read messages 120363419697103562@g.us
[Evolution API] [wanderley] v2.3.3 190 - Tue Sep 09 2025 11:24:00 LOG [ChannelStartupService] [object]
{
key: {
remoteJid: '120363419697103562@g.us',
remoteJidAlt: undefined,
fromMe: false,
id: '3A62B02B158CBBC0B956',
participant: '557999012820@s.whatsapp.net',
participantAlt: '54095264137225@lid'
},
pushName: 'Vitor Gabriel',
status: 'DELIVERY_ACK',
�
message: {
senderKeyDistributionMessage: {
groupId: '120363419697103562@g.us',
axolotlSenderKeyDistributionMessage: [Array]
},
messageContextInfo: { deviceListMetadata: [Object], deviceListMetadataVersion: 2 }
},
contextInfo: undefined,
messageType: 'unknown',
messageTimestamp: 1757427840,
instanceId: 'bc2c65dc-a04b-483e-b668-0d4cabec619c',
source: 'ios'
}
[Evolution API] v2.3.3 190 - Tue Sep 09 2025 11:24:01 LOG [BaileysMessageProcessor] [string] Processing batch of 1 messages
[Evolution API] [wanderley] v2.3.3 190 - Tue Sep 09 2025 11:24:01 INFO [ChannelStartupService] [string] Message duplicated ignored: 3A62B02B158CBBC0B956
[Evolution API] v2.3.3 190 - Tue Sep 09 2025 11:24:05 LOG [BaileysMessageProcessor] [string] Processing batch of 1 messages
[Evolution API] v2.3.3 190 - Tue Sep 09 2025 11:24:05 LOG [BaileysMessageProcessor] [string] Processing batch of 1 messages
[Evolution API] v2.3.3 190 - Tue Sep 09 2025 11:24:05 ERROR [ChatwootService] [object]
PrismaClientKnownRequestError:
Invalid this.prismaRepository.message.updateMany() invocation in
/evolution/dist/main.js:86:650
83 VALUES ($1, 'Contact', $2, 'labels', NOW()),[n,e]),!0}catch{return!1}}async findContact(s,e){let t=await this.clientCw(s);if(!t)return this.logger.warn("client not found"),null;let o,i=e.includes("@g.us");i?o=e:o=+${e};let n;return i?n=await t.contacts.search({accountId:this.provider.accountId,q:o}):n=await(0,Mt.request)(this.getClientCwConfig(),{method:"POST",url:/api/v1/accounts/${this.provider.accountId}/contacts/filter,body:{payload:this.getFilterPayload(o)}}),!n&&n?.payload?.length===0?(this.logger.warn("contact not found"),null):i?n.payload.find(r=>r.identifier===o):n.payload.length>1?this.findContactInContactList(n.payload,o):n.payload[0]}async mergeContacts(s,e){try{return await(0,Mt.request)(this.getClientCwConfig(),{method:"POST",url:/api/v1/accounts/${this.provider.accountId}/actions/contact_merge,body:{base_contact_id:s,mergee_contact_id:e}})}catch{return this.logger.error("Error merging contacts"),null}}async mergeBrazilianContacts(s){try{return await(0,Mt.request)(this.getClientCwConfig(),{method:"POST",url:/api/v1/accounts/${this.provider.accountId}/actions/contact_merge,body:{base_contact_id:s.find(t=>t.phone_number.length===14)?.id,mergee_contact_id:s.find(t=>t.phone_number.length===13)?.id}})}catch{return this.logger.error("Error merging contacts"),null}}findContactInContactList(s,e){let t=this.getNumbers(e),o=this.getSearchableFields();if(s.length===2&&this.getClientCwConfig().mergeBrazilContacts&&e.startsWith("+55")){let r=this.mergeBrazilianContacts(s);if(r)return r}let i=t.reduce((r,a)=>a.length>r.length?a:r,""),n=s.find(r=>r.phone_number===i);if(n)return n;for(let r of s)for(let a of o)if(r[a]&&t.includes(r[a]))return r;return null}getNumbers(s){let e=[];if(e.push(s),s.startsWith("+55")&&s.length===14){let t=s.slice(0,5)+s.slice(6);e.push(t)}else if(s.startsWith("+55")&&s.length===13){let t=s.slice(0,5)+"9"+s.slice(5);e.push(t)}return e}getSearchableFields(){return["phone_number"]}getFilterPayload(s){let e=[],t=this.getNumbers(s),o=this.getSearchableFields();return o.forEach((i,n)=>{t.forEach((r,a)=>{let c=o.length-1===n&&t.length-1===a?null:"OR";e.push({attribute_key:i,filter_operator:"equal_to",values:[r.replace("+","")],query_operator:c})})}),e}async createConversation(s,e){let t=e.key.previousRemoteJid?.includes("@lid")&&e.key.senderPn,o=e.key.remoteJid,i=${s.instanceName}:createConversation-${o},n=${s.instanceName}:lock:createConversation-${o},r=5e3;try{if(t&&e.key.senderPn!==e.key.previousRemoteJid){let a=await this.findContact(s,e.key.remoteJid.split("@")[0]);if(a&&a.identifier!==e.key.senderPn&&(this.logger.verbose(Identifier needs update: (contact.identifier: ${a.identifier}, body.key.remoteJid: ${e.key.remoteJid}, body.key.senderPn: ${e.key.senderPn}),await this.updateContact(s,a.id,{identifier:e.key.senderPn,phone_number:+${e.key.senderPn.split("@")[0]}})===null)){let l=await this.findContact(s,e.key.senderPn.split("@")[0]);l&&(await this.mergeContacts(l.id,a.id),this.logger.verbose(Merge contacts: (${l.id}) ${l.phone_number} and (${a.id}) ${a.phone_number}))}}if(this.logger.verbose("--- Start createConversation ---"),this.logger.verbose(Instance: ${JSON.stringify(s)}),await this.cache.has(i)){let a=await this.cache.get(i);return this.logger.verbose(Found conversation to: ${o}, conversation ID: ${a}),a}if(await this.cache.has(n)){this.logger.verbose(Opera\xE7\xE3o de cria\xE7\xE3o j\xE1 em andamento para ${o}, aguardando resultado...);let a=Date.now();for(;await this.cache.has(n);){if(Date.now()-a>r){this.logger.warn(Timeout aguardando lock para ${o});break}if(await new Promise(c=>setTimeout(c,300)),await this.cache.has(i)){let c=await this.cache.get(i);return this.logger.verbose(Resolves creation of: ${o}, conversation ID: ${c}),c}}}await this.cache.set(n,!0,30),this.logger.verbose(Bloqueio adquirido para: ${n});try{if(await this.cache.has(i))return await this.cache.get(i);let a=await this.clientCw(s);if(!a)return null;let c=o.includes("@g.us"),l=c?o:o.split("@")[0],u=e.key.fromMe?l:e.pushName,d=await this.getInbox(s);if(!d)return null;if(c){this.logger.verbose("Processing group conversation");let E=await this.waMonitor.waInstances[s.instanceName].client.groupMetadata(l);this.logger.verbose(Group metadata: ${JSON.stringify(E)}),u=${E.subject} (GROUP);let I=await this.waMonitor.waInstances[s.instanceName].profilePicture(e.key.participant.split("@")[0]);this.logger.verbose(Participant profile picture URL: ${JSON.stringify(I)});let T=await this.findContact(s,e.key.participant.split("@")[0]);this.logger.verbose(Found participant: ${JSON.stringify(T)}),T?(!T.name||T.name===l)&&await this.updateContact(s,T.id,{name:e.pushName,avatar_url:I.profilePictureUrl||null}):await this.createContact(s,e.key.participant.split("@")[0],d.id,!1,e.pushName,I.profilePictureUrl||null,e.key.participant)}let h=await this.waMonitor.waInstances[s.instanceName].profilePicture(l);this.logger.verbose(Contact profile picture URL: ${JSON.stringify(h)});let g=await this.findContact(s,l);if(g){if(this.logger.verbose(Found contact: ${JSON.stringify(g)}),!e.key.fromMe){let E=h?.profilePictureUrl?.split("#")[0].split("?")[0].split("/").pop()||"",I=g?.thumbnail?.split("#")[0].split("?")[0].split("/").pop()||"",T=E!==I,O=!g.name||g.name===l||(+${l}.startsWith("+55")?this.getNumbers(+${l}).some(L=>g.name===L||g.name===L.substring(3)||g.name===L.substring(1)):!1);this.logger.verbose(Picture needs update: ${T}),this.logger.verbose(Name needs update: ${O}),(T||O)&&(g=await this.updateContact(s,g.id,{...O&&{name:u},...E===""&&{avatar:null},...T&&{avatar_url:h?.profilePictureUrl}}))}}else g=await this.createContact(s,l,d.id,c,u,h.profilePictureUrl||null,o);if(!g)return this.logger.warn("Contact not created or found"),null;let m=g?.payload?.id||g?.payload?.contact?.id||g?.id;this.logger.verbose(Contact ID: ${m});let y=await a.contacts.listConversations({accountId:this.provider.accountId,id:m});if(this.logger.verbose(Contact conversations: ${JSON.stringify(y)}),!y||!y.payload)return this.logger.error("No conversations found or payload is undefined"),null;let S=y.payload.find(E=>E.inbox_id==d.id);if(S&&(this.provider.reopenConversation?(this.logger.verbose(Found conversation in reopenConversation mode: ${JSON.stringify(S)}),S&&this.provider.conversationPending&&S.status!=="open"&&await a.conversations.toggleStatus({accountId:this.provider.accountId,conversationId:S.id,data:{status:"pending"}})):(S=y.payload.find(E=>E&&E.status!=="resolved"&&E.inbox_id==d.id),this.logger.verbose(Found conversation: ${JSON.stringify(S)})),S))return this.logger.verbose(Returning existing conversation ID: ${S.id}),this.cache.set(i,S.id),S.id;let C={contact_id:m.toString(),inbox_id:d.id.toString()};if(this.provider.conversationPending&&(C.status="pending"),await this.cache.has(i))return await this.cache.get(i);let v=await a.conversations.create({accountId:this.provider.accountId,data:C});return v?(this.logger.verbose(New conversation created of ${o} with ID: ${v.id}),this.cache.set(i,v.id),v.id):(this.logger.warn("Conversation not created or found"),null)}finally{await this.cache.delete(n),this.logger.verbose(Block released for: ${n})}}catch(a){return this.logger.error(Error in createConversation: ${a}),null}}async getInbox(s){let e=${s.instanceName}:getInbox;if(await this.cache.has(e))return await this.cache.get(e);let t=await this.clientCw(s);if(!t)return this.logger.warn("client not found"),null;let o=await t.inboxes.list({accountId:this.provider.accountId});if(!o)return this.logger.warn("inbox not found"),null;let i=o.payload.find(n=>n.name===this.getClientCwConfig().nameInbox);return i?(this.cache.set(e,i),i):(this.logger.warn("inbox not found"),null)}async createMessage(s,e,t,o,i,n,r,a,c){let l=await this.clientCw(s);if(!l)return this.logger.warn("client not found"),null;let u=await this.getReplyToIds(r,s),d=c?.chatwootMessageId||null,h=await l.messages.create({accountId:this.provider.accountId,conversationId:e,data:{content:t,message_type:o,attachments:n,private:i||!1,source_id:a,content_attributes:{...u},source_reply_id:d?d.toString():null}});return h||(this.logger.warn("message not found"),null)}async getOpenConversationByContact(s,e,t){let o=await this.clientCw(s);return o?(await o.contacts.listConversations({accountId:this.provider.accountId,id:t.id})).payload.find(n=>n.inbox_id===e.id&&n.status==="open")||void 0:(this.logger.warn("client not found"),null)}async createBotMessage(s,e,t,o){let i=await this.clientCw(s);if(!i)return this.logger.warn("client not found"),null;let n=await this.findContact(s,"123456");if(!n)return this.logger.warn("contact not found"),null;let r=await this.getInbox(s);if(!r)return this.logger.warn("inbox not found"),null;let a=await this.getOpenConversationByContact(s,r,n);if(!a){this.logger.warn("conversation not found");return}let c=await i.messages.create({accountId:this.provider.accountId,conversationId:a.id,data:{content:e,message_type:t,attachments:o}});return c||(this.logger.warn("message not found"),null)}async sendData(s,e,t,o,i,n,r,a,c){if(a&&this.isImportHistoryAvailable()){let h=await X.getExistingSourceIds([a],s);if(h&&h.size>0)return this.logger.warn("Message already saved on chatwoot"),null}let l=new hn.default;i&&l.append("content",i),l.append("message_type",o),l.append("attachments[]",e,{filename:t});let u=c?.chatwootMessageId||null;if(r&&n){let h=await this.getReplyToIds(r,n);if(h.in_reply_to||h.in_reply_to_external_id){let g=JSON.stringify({...h});l.append("content_attributes",g)}}u&&l.append("source_reply_id",u.toString()),a&&l.append("source_id",a);let d={method:"post",maxBodyLength:1/0,url:${this.provider.url}/api/v1/accounts/${this.provider.accountId}/conversations/${s}/messages,headers:{api_access_token:this.provider.token,...l.getHeaders()},data:l};try{let{data:h}=await Rt.default.request(d);return h}catch(h){this.logger.error(h)}}async createBotQr(s,e,t,o,i){if(!await this.clientCw(s))return this.logger.warn("client not found"),null;if(!this.configService.get("CHATWOOT").BOT_CONTACT)return this.logger.log("Chatwoot bot contact is disabled"),!0;let r=await this.findContact(s,"123456");if(!r)return this.logger.warn("contact not found"),null;let a=await this.getInbox(s);if(!a)return this.logger.warn("inbox not found"),null;let c=await this.getOpenConversationByContact(s,a,r);if(!c){this.logger.warn("conversation not found");return}let l=new hn.default;e&&l.append("content",e),l.append("message_type",t),o&&i&&l.append("attachments[]",o,{filename:i});let u={method:"post",maxBodyLength:1/0,url:${this.provider.url}/api/v1/accounts/${this.provider.accountId}/conversations/${c.id}/messages,headers:{api_access_token:this.provider.token,...l.getHeaders()},data:l};try{let{data:d}=await Rt.default.request(u);return d}catch(d){this.logger.error(d)}}async sendAttachment(s,e,t,o,i){try{let n=yn.default.parse(decodeURIComponent(t)),r=ht.default.lookup(n?.ext)||"",a=n?.name+n?.ext;if(!r){let h=t.split("/");a=decodeURIComponent(h[h.length-1]),r=(await Rt.default.get(t,{responseType:"arraybuffer"})).headers["content-type"]}let c="document";switch(r.split("/")[0]){case"image":c="image";break;case"video":c="video";break;case"audio":c="audio";break;default:c="document";break}if(c==="audio"){let h={number:e,audio:t,delay:1200,quoted:i?.quoted};return j("/message/sendWhatsAppAudio"),await s?.audioWhatsapp(h,null,!0)}c==="image"&&n&&[".gif",".svg",".tiff",".tif"].includes(n?.ext)&&(c="document");let u={number:e,mediatype:c,fileName:a,media:t,delay:1200,quoted:i?.quoted};return j("/message/sendMedia"),o&&(u.caption=o),await s?.mediaMessage(u,null,!0)}catch(n){this.logger.error(n)}}async onSendMessageError(s,e,t){this.logger.verbose(onSendMessageError ${JSON.stringify(t)});let o=await this.clientCw(s);if(o){if(t&&t?.status===400&&t?.message[0]?.exists===!1){o.messages.create({accountId:this.provider.accountId,conversationId:e,data:{content:${U.t("cw.message.numbernotinwhatsapp")},message_type:"outgoing",private:!0}});return}o.messages.create({accountId:this.provider.accountId,conversationId:e,data:{content:U.t("cw.message.notsent",{error:t?${t.toString()}:""}),message_type:"outgoing",private:!0}})}}async receiveWebhook(s,e){try{if(await new Promise(c=>setTimeout(c,500)),!await this.clientCw(s))return this.logger.warn("client not found"),null;if(this.provider.reopenConversation===!1&&e.event==="conversation_status_changed"&&e.status==="resolved"&&e.meta?.sender?.identifier){let c=${s.instanceName}:createConversation-${e.meta.sender.identifier};this.cache.delete(c)}if(!e?.conversation||e.private||e.event==="message_updated"&&!e.content_attributes?.deleted)return{message:"bot"};let o=e.conversation.meta.sender?.identifier||e.conversation.meta.sender?.phone_number.replace("+",""),i=e.content?e.content.replaceAll(/(?<!\*)\*((?!\s)([^\n*]+?)(?<!\s))\*(?!\*)/g,"_$1_").replaceAll(/\*{2}((?!\s)([^\n*]+?)(?<!\s))\*{2}/g,"*$1*").replaceAll(/~{2}((?!\s)([^\n*]+?)(?<!\s))~{2}/g,"~$1~").replaceAll(/(?<!)((?!\s)([^*]+?)(?<!\s))(?!)/g,"$1"):e.content,n=e?.conversation?.messages[0]?.sender?.available_name||e?.sender?.name,r=this.waMonitor.waInstances[s.instanceName];if(e.event==="message_updated"&&e.content_attributes?.deleted){let c=await this.prismaRepository.message.findFirst({where:{chatwootMessageId:e.id,instanceId:s.instanceId}});if(c){let l=c.key;await r?.client.sendMessage(l.remoteJid,{delete:l}),await this.prismaRepository.message.deleteMany({where:{instanceId:s.instanceId,chatwootMessageId:e.id}})}return{message:"bot"}}let a=this.configService.get("CHATWOOT").BOT_CONTACT;if(o==="123456"&&e.message_type==="outgoing"){let c=i.replace("/","");if(a&&(c.includes("init")||c.includes("iniciar")))if(r?.connectionStatus?.state!=="open"){let u=c.split(":")[1];await r.connectToWhatsapp(u)}else await this.createBotMessage(s,U.t("cw.inbox.alreadyConnected",{inboxName:e.inbox.name}),"incoming");if(c==="clearcache"&&(r.clearCacheChatwoot(),await this.createBotMessage(s,U.t("cw.inbox.clearCache",{inboxName:e.inbox.name}),"incoming")),c==="status"){let l=r?.connectionStatus?.state;l||await this.createBotMessage(s,U.t("cw.inbox.notFound",{inboxName:e.inbox.name}),"incoming"),l&&await this.createBotMessage(s,U.t("cw.inbox.status",{inboxName:e.inbox.name,state:l}),"incoming")}if(a&&(c==="disconnect"||c==="desconectar")){let l=U.t("cw.inbox.disconnect",{inboxName:e.inbox.name});await this.createBotMessage(s,l,"incoming"),await r?.client?.logout("Log out instance: "+s.instanceName),await r?.client?.ws?.close()}}if(e.message_type==="outgoing"&&e?.conversation?.messages?.length&&o!=="123456"){if(e?.conversation?.messages[0]?.source_id?.substring(0,5)==="WAID:")return{message:"bot"};if(!r&&e.conversation?.id)return this.onSendMessageError(s,e.conversation?.id,"Instance not found"),{message:"bot"};let c;if(n==null)c=i;else{let u=this.provider.signDelimiter?this.provider.signDelimiter.replaceAll("\n",`
�
`
85 ,d=this.provider.signMsg?[${n}:]:[];d.push(i),c=d.join(u)}for(let u of e.conversation.messages)if(u.attachments&&u.attachments.length>0)for(let d of u.attachments){i||(c=null);let h={quoted:await this.getQuotedMessage(e,s)},g=await this.sendAttachment(r,o,d.data_url,c,h);!g&&e.conversation?.id&&this.onSendMessageError(s,e.conversation?.id),await this.updateChatwootMessageId({...g,owner:s.instanceName},{messageId:e.id,inboxId:e.inbox?.id,conversationId:e.conversation?.id,contactInboxSourceId:e.conversation?.contact_inbox?.source_id},s)}else{let d={number:o,text:c,delay:1200,quoted:await this.getQuotedMessage(e,s)};j("/message/sendText");let h;try{if(h=await r?.textMessage(d,!0),!h)throw new Error("Message not sent");fn.default.isLong(h?.messageTimestamp)&&(h.messageTimestamp=h.messageTimestamp?.toNumber()),await this.updateChatwootMessageId({...h,instanceId:s.instanceId},{messageId:e.id,inboxId:e.inbox?.id,conversationId:e.conversation?.id,contactInboxSourceId:e.conversation?.contact_inbox?.source_id},s)}catch(g){throw!h&&e.conversation?.id&&this.onSendMessageError(s,e.conversation?.id,g),g}}if(this.configService.get("CHATWOOT").MESSAGE_READ){let u=await this.prismaRepository.message.findFirst({where:{key:{path:["fromMe"],equals:!1},instanceId:s.instanceId}});if(u&&!u.chatwootIsRead){let d=u.key;r?.markMessageAsRead({readMessages:[{id:d.id,fromMe:d.fromMe,remoteJid:d.remoteJid}]});let h={chatwootMessageId:u.chatwootMessageId,chatwootConversationId:u.chatwootConversationId,chatwootInboxId:u.chatwootInboxId,chatwootContactInboxSourceId:u.chatwootContactInboxSourceId,chatwootIsRead:!0};await this.prismaRepository.message.updateMany({where:{instanceId:s.instanceId,key:{path:["id"],equals:d.id}},data:h})}}}if(e.message_type==="template"&&e.event==="message_created"){let c={number:o,text:e.content.replace(/\\\r\n|\\\n|\n/g,
→ 86 `),delay:1200};j("/message/sendText"),await r?.textMessage(c)}return{message:"bot"}}catch(t){return this.logger.error(t),{message:"bot"}}}async updateChatwootMessageId(s,e,t){let o=s.key;!e.messageId||!o?.id||(await this.prismaRepository.message.updateMany(
Input error. A JSON path cannot be set without a scalar filter.
at Xn.handleRequestError (/evolution/node_modules/@prisma/client/runtime/library.js:121:7459)
at Xn.handleAndLogRequestError (/evolution/node_modules/@prisma/client/runtime/library.js:121:6784)
at Xn.request (/evolution/node_modules/@prisma/client/runtime/library.js:121:6491)
at async l (/evolution/node_modules/@prisma/client/runtime/library.js:130:9812)
at async Pe.getMessageByKeyId (/evolution/dist/main.js:86:614)
at async Pe.eventWhatsapp (/evolution/dist/main.js:135:39) {
code: 'P2019',
�
{
modelName: 'Message',
details: 'A JSON path cannot be set without a scalar filter.'
},
clientVersion: '6.11.1'
}
[Evolution API] v2.3.3 190 - Tue Sep 09 2025 11:24:05 ERROR [ChatwootService] [object]
PrismaClientKnownRequestError:
Invalid this.prismaRepository.message.updateMany() invocation in
/evolution/dist/main.js:86:650
83 VALUES ($1, 'Contact', $2, 'labels', NOW()),[n,e]),!0}catch{return!1}}async findContact(s,e){let t=await this.clientCw(s);if(!t)return this.logger.warn("client not found"),null;let o,i=e.includes("@g.us");i?o=e:o=+${e};let n;return i?n=await t.contacts.search({accountId:this.provider.accountId,q:o}):n=await(0,Mt.request)(this.getClientCwConfig(),{method:"POST",url:/api/v1/accounts/${this.provider.accountId}/contacts/filter,body:{payload:this.getFilterPayload(o)}}),!n&&n?.payload?.length===0?(this.logger.warn("contact not found"),null):i?n.payload.find(r=>r.identifier===o):n.payload.length>1?this.findContactInContactList(n.payload,o):n.payload[0]}async mergeContacts(s,e){try{return await(0,Mt.request)(this.getClientCwConfig(),{method:"POST",url:/api/v1/accounts/${this.provider.accountId}/actions/contact_merge,body:{base_contact_id:s,mergee_contact_id:e}})}catch{return this.logger.error("Error merging contacts"),null}}async mergeBrazilianContacts(s){try{return await(0,Mt.request)(this.getClientCwConfig(),{method:"POST",url:/api/v1/accounts/${this.provider.accountId}/actions/contact_merge,body:{base_contact_id:s.find(t=>t.phone_number.length===14)?.id,mergee_contact_id:s.find(t=>t.phone_number.length===13)?.id}})}catch{return this.logger.error("Error merging contacts"),null}}findContactInContactList(s,e){let t=this.getNumbers(e),o=this.getSearchableFields();if(s.length===2&&this.getClientCwConfig().mergeBrazilContacts&&e.startsWith("+55")){let r=this.mergeBrazilianContacts(s);if(r)return r}let i=t.reduce((r,a)=>a.length>r.length?a:r,""),n=s.find(r=>r.phone_number===i);if(n)return n;for(let r of s)for(let a of o)if(r[a]&&t.includes(r[a]))return r;return null}getNumbers(s){let e=[];if(e.push(s),s.startsWith("+55")&&s.length===14){let t=s.slice(0,5)+s.slice(6);e.push(t)}else if(s.startsWith("+55")&&s.length===13){let t=s.slice(0,5)+"9"+s.slice(5);e.push(t)}return e}getSearchableFields(){return["phone_number"]}getFilterPayload(s){let e=[],t=this.getNumbers(s),o=this.getSearchableFields();return o.forEach((i,n)=>{t.forEach((r,a)=>{let c=o.length-1===n&&t.length-1===a?null:"OR";e.push({attribute_key:i,filter_operator:"equal_to",values:[r.replace("+","")],query_operator:c})})}),e}async createConversation(s,e){let t=e.key.previousRemoteJid?.includes("@lid")&&e.key.senderPn,o=e.key.remoteJid,i=${s.instanceName}:createConversation-${o},n=${s.instanceName}:lock:createConversation-${o},r=5e3;try{if(t&&e.key.senderPn!==e.key.previousRemoteJid){let a=await this.findContact(s,e.key.remoteJid.split("@")[0]);if(a&&a.identifier!==e.key.senderPn&&(this.logger.verbose(Identifier needs update: (contact.identifier: ${a.identifier}, body.key.remoteJid: ${e.key.remoteJid}, body.key.senderPn: ${e.key.senderPn}),await this.updateContact(s,a.id,{identifier:e.key.senderPn,phone_number:+${e.key.senderPn.split("@")[0]}})===null)){let l=await this.findContact(s,e.key.senderPn.split("@")[0]);l&&(await this.mergeContacts(l.id,a.id),this.logger.verbose(Merge contacts: (${l.id}) ${l.phone_number} and (${a.id}) ${a.phone_number}))}}if(this.logger.verbose("--- Start createConversation ---"),this.logger.verbose(Instance: ${JSON.stringify(s)}),await this.cache.has(i)){let a=await this.cache.get(i);return this.logger.verbose(Found conversation to: ${o}, conversation ID: ${a}),a}if(await this.cache.has(n)){this.logger.verbose(Opera\xE7\xE3o de cria\xE7\xE3o j\xE1 em andamento para ${o}, aguardando resultado...);let a=Date.now();for(;await this.cache.has(n);){if(Date.now()-a>r){this.logger.warn(Timeout aguardando lock para ${o});break}if(await new Promise(c=>setTimeout(c,300)),await this.cache.has(i)){let c=await this.cache.get(i);return this.logger.verbose(Resolves creation of: ${o}, conversation ID: ${c}),c}}}await this.cache.set(n,!0,30),this.logger.verbose(Bloqueio adquirido para: ${n});try{if(await this.cache.has(i))return await this.cache.get(i);let a=await this.clientCw(s);if(!a)return null;let c=o.includes("@g.us"),l=c?o:o.split("@")[0],u=e.key.fromMe?l:e.pushName,d=await this.getInbox(s);if(!d)return null;if(c){this.logger.verbose("Processing group conversation");let E=await this.waMonitor.waInstances[s.instanceName].client.groupMetadata(l);this.logger.verbose(Group metadata: ${JSON.stringify(E)}),u=${E.subject} (GROUP);let I=await this.waMonitor.waInstances[s.instanceName].profilePicture(e.key.participant.split("@")[0]);this.logger.verbose(Participant profile picture URL: ${JSON.stringify(I)});let T=await this.findContact(s,e.key.participant.split("@")[0]);this.logger.verbose(Found participant: ${JSON.stringify(T)}),T?(!T.name||T.name===l)&&await this.updateContact(s,T.id,{name:e.pushName,avatar_url:I.profilePictureUrl||null}):await this.createContact(s,e.key.participant.split("@")[0],d.id,!1,e.pushName,I.profilePictureUrl||null,e.key.participant)}let h=await this.waMonitor.waInstances[s.instanceName].profilePicture(l);this.logger.verbose(Contact profile picture URL: ${JSON.stringify(h)});let g=await this.findContact(s,l);if(g){if(this.logger.verbose(Found contact: ${JSON.stringify(g)}),!e.key.fromMe){let E=h?.profilePictureUrl?.split("#")[0].split("?")[0].split("/").pop()||"",I=g?.thumbnail?.split("#")[0].split("?")[0].split("/").pop()||"",T=E!==I,O=!g.name||g.name===l||(+${l}.startsWith("+55")?this.getNumbers(+${l}).some(L=>g.name===L||g.name===L.substring(3)||g.name===L.substring(1)):!1);this.logger.verbose(Picture needs update: ${T}),this.logger.verbose(Name needs update: ${O}),(T||O)&&(g=await this.updateContact(s,g.id,{...O&&{name:u},...E===""&&{avatar:null},...T&&{avatar_url:h?.profilePictureUrl}}))}}else g=await this.createContact(s,l,d.id,c,u,h.profilePictureUrl||null,o);if(!g)return this.logger.warn("Contact not created or found"),null;let m=g?.payload?.id||g?.payload?.contact?.id||g?.id;this.logger.verbose(Contact ID: ${m});let y=await a.contacts.listConversations({accountId:this.provider.accountId,id:m});if(this.logger.verbose(Contact conversations: ${JSON.stringify(y)}),!y||!y.payload)return this.logger.error("No conversations found or payload is undefined"),null;let S=y.payload.find(E=>E.inbox_id==d.id);if(S&&(this.provider.reopenConversation?(this.logger.verbose(Found conversation in reopenConversation mode: ${JSON.stringify(S)}),S&&this.provider.conversationPending&&S.status!=="open"&&await a.conversations.toggleStatus({accountId:this.provider.accountId,conversationId:S.id,data:{status:"pending"}})):(S=y.payload.find(E=>E&&E.status!=="resolved"&&E.inbox_id==d.id),this.logger.verbose(Found conversation: ${JSON.stringify(S)})),S))return this.logger.verbose(Returning existing conversation ID: ${S.id}),this.cache.set(i,S.id),S.id;let C={contact_id:m.toString(),inbox_id:d.id.toString()};if(this.provider.conversationPending&&(C.status="pending"),await this.cache.has(i))return await this.cache.get(i);let v=await a.conversations.create({accountId:this.provider.accountId,data:C});return v?(this.logger.verbose(New conversation created of ${o} with ID: ${v.id}),this.cache.set(i,v.id),v.id):(this.logger.warn("Conversation not created or found"),null)}finally{await this.cache.delete(n),this.logger.verbose(Block released for: ${n})}}catch(a){return this.logger.error(Error in createConversation: ${a}),null}}async getInbox(s){let e=${s.instanceName}:getInbox;if(await this.cache.has(e))return await this.cache.get(e);let t=await this.clientCw(s);if(!t)return this.logger.warn("client not found"),null;let o=await t.inboxes.list({accountId:this.provider.accountId});if(!o)return this.logger.warn("inbox not found"),null;let i=o.payload.find(n=>n.name===this.getClientCwConfig().nameInbox);return i?(this.cache.set(e,i),i):(this.logger.warn("inbox not found"),null)}async createMessage(s,e,t,o,i,n,r,a,c){let l=await this.clientCw(s);if(!l)return this.logger.warn("client not found"),null;let u=await this.getReplyToIds(r,s),d=c?.chatwootMessageId||null,h=await l.messages.create({accountId:this.provider.accountId,conversationId:e,data:{content:t,message_type:o,attachments:n,private:i||!1,source_id:a,content_attributes:{...u},source_reply_id:d?d.toString():null}});return h||(this.logger.warn("message not found"),null)}async getOpenConversationByContact(s,e,t){let o=await this.clientCw(s);return o?(await o.contacts.listConversations({accountId:this.provider.accountId,id:t.id})).payload.find(n=>n.inbox_id===e.id&&n.status==="open")||void 0:(this.logger.warn("client not found"),null)}async createBotMessage(s,e,t,o){let i=await this.clientCw(s);if(!i)return this.logger.warn("client not found"),null;let n=await this.findContact(s,"123456");if(!n)return this.logger.warn("contact not found"),null;let r=await this.getInbox(s);if(!r)return this.logger.warn("inbox not found"),null;let a=await this.getOpenConversationByContact(s,r,n);if(!a){this.logger.warn("conversation not found");return}let c=await i.messages.create({accountId:this.provider.accountId,conversationId:a.id,data:{content:e,message_type:t,attachments:o}});return c||(this.logger.warn("message not found"),null)}async sendData(s,e,t,o,i,n,r,a,c){if(a&&this.isImportHistoryAvailable()){let h=await X.getExistingSourceIds([a],s);if(h&&h.size>0)return this.logger.warn("Message already saved on chatwoot"),null}let l=new hn.default;i&&l.append("content",i),l.append("message_type",o),l.append("attachments[]",e,{filename:t});let u=c?.chatwootMessageId||null;if(r&&n){let h=await this.getReplyToIds(r,n);if(h.in_reply_to||h.in_reply_to_external_id){let g=JSON.stringify({...h});l.append("content_attributes",g)}}u&&l.append("source_reply_id",u.toString()),a&&l.append("source_id",a);let d={method:"post",maxBodyLength:1/0,url:${this.provider.url}/api/v1/accounts/${this.provider.accountId}/conversations/${s}/messages,headers:{api_access_token:this.provider.token,...l.getHeaders()},data:l};try{let{data:h}=await Rt.default.request(d);return h}catch(h){this.logger.error(h)}}async createBotQr(s,e,t,o,i){if(!await this.clientCw(s))return this.logger.warn("client not found"),null;if(!this.configService.get("CHATWOOT").BOT_CONTACT)return this.logger.log("Chatwoot bot contact is disabled"),!0;let r=await this.findContact(s,"123456");if(!r)return this.logger.warn("contact not found"),null;let a=await this.getInbox(s);if(!a)return this.logger.warn("inbox not found"),null;let c=await this.getOpenConversationByContact(s,a,r);if(!c){this.logger.warn("conversation not found");return}let l=new hn.default;e&&l.append("content",e),l.append("message_type",t),o&&i&&l.append("attachments[]",o,{filename:i});let u={method:"post",maxBodyLength:1/0,url:${this.provider.url}/api/v1/accounts/${this.provider.accountId}/conversations/${c.id}/messages,headers:{api_access_token:this.provider.token,...l.getHeaders()},data:l};try{let{data:d}=await Rt.default.request(u);return d}catch(d){this.logger.error(d)}}async sendAttachment(s,e,t,o,i){try{let n=yn.default.parse(decodeURIComponent(t)),r=ht.default.lookup(n?.ext)||"",a=n?.name+n?.ext;if(!r){let h=t.split("/");a=decodeURIComponent(h[h.length-1]),r=(await Rt.default.get(t,{responseType:"arraybuffer"})).headers["content-type"]}let c="document";switch(r.split("/")[0]){case"image":c="image";break;case"video":c="video";break;case"audio":c="audio";break;default:c="document";break}if(c==="audio"){let h={number:e,audio:t,delay:1200,quoted:i?.quoted};return j("/message/sendWhatsAppAudio"),await s?.audioWhatsapp(h,null,!0)}c==="image"&&n&&[".gif",".svg",".tiff",".tif"].includes(n?.ext)&&(c="document");let u={number:e,mediatype:c,fileName:a,media:t,delay:1200,quoted:i?.quoted};return j("/message/sendMedia"),o&&(u.caption=o),await s?.mediaMessage(u,null,!0)}catch(n){this.logger.error(n)}}async onSendMessageError(s,e,t){this.logger.verbose(onSendMessageError ${JSON.stringify(t)});let o=await this.clientCw(s);if(o){if(t&&t?.status===400&&t?.message[0]?.exists===!1){o.messages.create({accountId:this.provider.accountId,conversationId:e,data:{content:${U.t("cw.message.numbernotinwhatsapp")},message_type:"outgoing",private:!0}});return}o.messages.create({accountId:this.provider.accountId,conversationId:e,data:{content:U.t("cw.message.notsent",{error:t?${t.toString()}:""}),message_type:"outgoing",private:!0}})}}async receiveWebhook(s,e){try{if(await new Promise(c=>setTimeout(c,500)),!await this.clientCw(s))return this.logger.warn("client not found"),null;if(this.provider.reopenConversation===!1&&e.event==="conversation_status_changed"&&e.status==="resolved"&&e.meta?.sender?.identifier){let c=${s.instanceName}:createConversation-${e.meta.sender.identifier};this.cache.delete(c)}if(!e?.conversation||e.private||e.event==="message_updated"&&!e.content_attributes?.deleted)return{message:"bot"};let o=e.conversation.meta.sender?.identifier||e.conversation.meta.sender?.phone_number.replace("+",""),i=e.content?e.content.replaceAll(/(?<!\*)\*((?!\s)([^\n*]+?)(?<!\s))\*(?!\*)/g,"_$1_").replaceAll(/\*{2}((?!\s)([^\n*]+?)(?<!\s))\*{2}/g,"*$1*").replaceAll(/~{2}((?!\s)([^\n*]+?)(?<!\s))~{2}/g,"~$1~").replaceAll(/(?<!)((?!\s)([^*]+?)(?<!\s))(?!)/g,"$1"):e.content,n=e?.conversation?.messages[0]?.sender?.available_name||e?.sender?.name,r=this.waMonitor.waInstances[s.instanceName];if(e.event==="message_updated"&&e.content_attributes?.deleted){let c=await this.prismaRepository.message.findFirst({where:{chatwootMessageId:e.id,instanceId:s.instanceId}});if(c){let l=c.key;await r?.client.sendMessage(l.remoteJid,{delete:l}),await this.prismaRepository.message.deleteMany({where:{instanceId:s.instanceId,chatwootMessageId:e.id}})}return{message:"bot"}}let a=this.configService.get("CHATWOOT").BOT_CONTACT;if(o==="123456"&&e.message_type==="outgoing"){let c=i.replace("/","");if(a&&(c.includes("init")||c.includes("iniciar")))if(r?.connectionStatus?.state!=="open"){let u=c.split(":")[1];await r.connectToWhatsapp(u)}else await this.createBotMessage(s,U.t("cw.inbox.alreadyConnected",{inboxName:e.inbox.name}),"incoming");if(c==="clearcache"&&(r.clearCacheChatwoot(),await this.createBotMessage(s,U.t("cw.inbox.clearCache",{inboxName:e.inbox.name}),"incoming")),c==="status"){let l=r?.connectionStatus?.state;l||await this.createBotMessage(s,U.t("cw.inbox.notFound",{inboxName:e.inbox.name}),"incoming"),l&&await this.createBotMessage(s,U.t("cw.inbox.status",{inboxName:e.inbox.name,state:l}),"incoming")}if(a&&(c==="disconnect"||c==="desconectar")){let l=U.t("cw.inbox.disconnect",{inboxName:e.inbox.name});await this.createBotMessage(s,l,"incoming"),await r?.client?.logout("Log out instance: "+s.instanceName),await r?.client?.ws?.close()}}if(e.message_type==="outgoing"&&e?.conversation?.messages?.length&&o!=="123456"){if(e?.conversation?.messages[0]?.source_id?.substring(0,5)==="WAID:")return{message:"bot"};if(!r&&e.conversation?.id)return this.onSendMessageError(s,e.conversation?.id,"Instance not found"),{message:"bot"};let c;if(n==null)c=i;else{let u=this.provider.signDelimiter?this.provider.signDelimiter.replaceAll("\n",`
�
`
85 ,d=this.provider.signMsg?[${n}:]:[];d.push(i),c=d.join(u)}for(let u of e.conversation.messages)if(u.attachments&&u.attachments.length>0)for(let d of u.attachments){i||(c=null);let h={quoted:await this.getQuotedMessage(e,s)},g=await this.sendAttachment(r,o,d.data_url,c,h);!g&&e.conversation?.id&&this.onSendMessageError(s,e.conversation?.id),await this.updateChatwootMessageId({...g,owner:s.instanceName},{messageId:e.id,inboxId:e.inbox?.id,conversationId:e.conversation?.id,contactInboxSourceId:e.conversation?.contact_inbox?.source_id},s)}else{let d={number:o,text:c,delay:1200,quoted:await this.getQuotedMessage(e,s)};j("/message/sendText");let h;try{if(h=await r?.textMessage(d,!0),!h)throw new Error("Message not sent");fn.default.isLong(h?.messageTimestamp)&&(h.messageTimestamp=h.messageTimestamp?.toNumber()),await this.updateChatwootMessageId({...h,instanceId:s.instanceId},{messageId:e.id,inboxId:e.inbox?.id,conversationId:e.conversation?.id,contactInboxSourceId:e.conversation?.contact_inbox?.source_id},s)}catch(g){throw!h&&e.conversation?.id&&this.onSendMessageError(s,e.conversation?.id,g),g}}if(this.configService.get("CHATWOOT").MESSAGE_READ){let u=await this.prismaRepository.message.findFirst({where:{key:{path:["fromMe"],equals:!1},instanceId:s.instanceId}});if(u&&!u.chatwootIsRead){let d=u.key;r?.markMessageAsRead({readMessages:[{id:d.id,fromMe:d.fromMe,remoteJid:d.remoteJid}]});let h={chatwootMessageId:u.chatwootMessageId,chatwootConversationId:u.chatwootConversationId,chatwootInboxId:u.chatwootInboxId,chatwootContactInboxSourceId:u.chatwootContactInboxSourceId,chatwootIsRead:!0};await this.prismaRepository.message.updateMany({where:{instanceId:s.instanceId,key:{path:["id"],equals:d.id}},data:h})}}}if(e.message_type==="template"&&e.event==="message_created"){let c={number:o,text:e.content.replace(/\\\r\n|\\\n|\n/g,
→ 86 `),delay:1200};j("/message/sendText"),await r?.textMessage(c)}return{message:"bot"}}catch(t){return this.logger.error(t),{message:"bot"}}}async updateChatwootMessageId(s,e,t){let o=s.key;!e.messageId||!o?.id||(await this.prismaRepository.message.updateMany(
Input error. A JSON path cannot be set without a scalar filter.
at Xn.handleRequestError (/evolution/node_modules/@prisma/client/runtime/library.js:121:7459)
at Xn.handleAndLogRequestError (/evolution/node_modules/@prisma/client/runtime/library.js:121:6784)
at Xn.request (/evolution/node_modules/@prisma/client/runtime/library.js:121:6491)
at async l (/evolution/node_modules/@prisma/client/runtime/library.js:130:9812)
at async Pe.getMessageByKeyId (/evolution/dist/main.js:86:614)
at async Pe.eventWhatsapp (/evolution/dist/main.js:135:39) {
code: 'P2019',
�
{
modelName: 'Message',
details: 'A JSON path cannot be set without a scalar filter.'
},
clientVersion: '6.11.1'
}
[Evolution API] v2.3.3 190 - Tue Sep 09 2025 11:24:06 LOG [BaileysMessageProcessor] [string] Processing batch of 1 messages
Message received from phone, id= 3EB06D42EC95FEB1239B25 WebMessageInfo {
messageStubParameters: [],
labels: [],
userReceipt: [],
reactions: [],
pollUpdates: [],
eventResponses: [],
statusMentions: [],
messageAddOns: [],
statusMentionSources: [],
supportAiCitations: [],
key: MessageKey {
remoteJid: '120363419697103562@g.us',
fromMe: false,
id: '3AE3B13EA46248765B7B'
},
message: Message {
conversation: 'Nesse meu caso foi uma migração da gupshup para app próprio'
},
messageTimestamp: Long { low: 1757427768, high: 0, unsigned: true },
participant: '557999012820@s.whatsapp.net',
messageSecret: Uint8Array(32) [
244, 149, 25, 52, 181, 228, 115, 106,
67, 92, 2, 133, 165, 236, 14, 156,
84, 62, 221, 246, 255, 51, 129, 153,
12, 183, 214, 65, 234, 3, 155, 224
],
reportingTokenInfo: ReportingTokenInfo {
reportingTag: Uint8Array(20) [
1, 10, 83, 159, 2, 54,
207, 64, 200, 16, 163, 217,
149, 79, 147, 182, 111, 250,
243, 138
]
},
isMentionedInStatus: false
}
[Evolution API] [wanderley] v2.3.3 190 - Tue Sep 09 2025 11:24:06 INFO [ChannelStartupService] [string] Message duplicated ignored: 3AE3B13EA46248765B7B
[Evolution API] v2.3.3 190 - Tue Sep 09 2025 11:24:06 LOG [BaileysMessageProcessor] [string] Processing batch of 1 messages
Message received from phone, id= 3EB02017DBD13BA8C1F610 WebMessageInfo {
messageStubParameters: [],
labels: [],
userReceipt: [],
reactions: [],
pollUpdates: [],
eventResponses: [],
statusMentions: [],
messageAddOns: [],
statusMentionSources: [],
supportAiCitations: [],
key: MessageKey {
remoteJid: '120363419697103562@g.us',
fromMe: false,
id: '3F5BB0A0F7C5814F0D52'
},
message: Message {
extendedTextMessage: ExtendedTextMessage {
text: 'As vezes só aparece que esta em aprovação mas ta funcionando',
previewType: 0,
contextInfo: [ContextInfo],
inviteLinkGroupTypeV2: 0
}
},
messageTimestamp: Long { low: 1757427809, high: 0, unsigned: true },
participant: '555384615886@s.whatsapp.net',
reportingTokenInfo: ReportingTokenInfo {
reportingTag: Uint8Array(16) [
1, 10, 168, 156, 119, 16,
240, 7, 178, 132, 91, 225,
162, 14, 72, 48
]
},
isMentionedInStatus: false
}
[Evolution API] [wanderley] v2.3.3 190 - Tue Sep 09 2025 11:24:06 INFO [ChannelStartupService] [string] Message duplicated ignored: 3F5BB0A0F7C5814F0D52
[Evolution API] v2.3.3 190 - Tue Sep 09 2025 11:24:16 LOG [BaileysMessageProcessor] [string] Processing batch of 1 messages
[Evolution API] v2.3.3 190 - Tue Sep 09 2025 11:24:16 ERROR [ChatwootService] [object]
PrismaClientKnownRequestError:
Invalid this.prismaRepository.message.updateMany() invocation in
/evolution/dist/main.js:86:650
83 VALUES ($1, 'Contact', $2, 'labels', NOW()),[n,e]),!0}catch{return!1}}async findContact(s,e){let t=await this.clientCw(s);if(!t)return this.logger.warn("client not found"),null;let o,i=e.includes("@g.us");i?o=e:o=+${e};let n;return i?n=await t.contacts.search({accountId:this.provider.accountId,q:o}):n=await(0,Mt.request)(this.getClientCwConfig(),{method:"POST",url:/api/v1/accounts/${this.provider.accountId}/contacts/filter,body:{payload:this.getFilterPayload(o)}}),!n&&n?.payload?.length===0?(this.logger.warn("contact not found"),null):i?n.payload.find(r=>r.identifier===o):n.payload.length>1?this.findContactInContactList(n.payload,o):n.payload[0]}async mergeContacts(s,e){try{return await(0,Mt.request)(this.getClientCwConfig(),{method:"POST",url:/api/v1/accounts/${this.provider.accountId}/actions/contact_merge,body:{base_contact_id:s,mergee_contact_id:e}})}catch{return this.logger.error("Error merging contacts"),null}}async mergeBrazilianContacts(s){try{return await(0,Mt.request)(this.getClientCwConfig(),{method:"POST",url:/api/v1/accounts/${this.provider.accountId}/actions/contact_merge,body:{base_contact_id:s.find(t=>t.phone_number.length===14)?.id,mergee_contact_id:s.find(t=>t.phone_number.length===13)?.id}})}catch{return this.logger.error("Error merging contacts"),null}}findContactInContactList(s,e){let t=this.getNumbers(e),o=this.getSearchableFields();if(s.length===2&&this.getClientCwConfig().mergeBrazilContacts&&e.startsWith("+55")){let r=this.mergeBrazilianContacts(s);if(r)return r}let i=t.reduce((r,a)=>a.length>r.length?a:r,""),n=s.find(r=>r.phone_number===i);if(n)return n;for(let r of s)for(let a of o)if(r[a]&&t.includes(r[a]))return r;return null}getNumbers(s){let e=[];if(e.push(s),s.startsWith("+55")&&s.length===14){let t=s.slice(0,5)+s.slice(6);e.push(t)}else if(s.startsWith("+55")&&s.length===13){let t=s.slice(0,5)+"9"+s.slice(5);e.push(t)}return e}getSearchableFields(){return["phone_number"]}getFilterPayload(s){let e=[],t=this.getNumbers(s),o=this.getSearchableFields();return o.forEach((i,n)=>{t.forEach((r,a)=>{let c=o.length-1===n&&t.length-1===a?null:"OR";e.push({attribute_key:i,filter_operator:"equal_to",values:[r.replace("+","")],query_operator:c})})}),e}async createConversation(s,e){let t=e.key.previousRemoteJid?.includes("@lid")&&e.key.senderPn,o=e.key.remoteJid,i=${s.instanceName}:createConversation-${o},n=${s.instanceName}:lock:createConversation-${o},r=5e3;try{if(t&&e.key.senderPn!==e.key.previousRemoteJid){let a=await this.findContact(s,e.key.remoteJid.split("@")[0]);if(a&&a.identifier!==e.key.senderPn&&(this.logger.verbose(Identifier needs update: (contact.identifier: ${a.identifier}, body.key.remoteJid: ${e.key.remoteJid}, body.key.senderPn: ${e.key.senderPn}),await this.updateContact(s,a.id,{identifier:e.key.senderPn,phone_number:+${e.key.senderPn.split("@")[0]}})===null)){let l=await this.findContact(s,e.key.senderPn.split("@")[0]);l&&(await this.mergeContacts(l.id,a.id),this.logger.verbose(Merge contacts: (${l.id}) ${l.phone_number} and (${a.id}) ${a.phone_number}))}}if(this.logger.verbose("--- Start createConversation ---"),this.logger.verbose(Instance: ${JSON.stringify(s)}),await this.cache.has(i)){let a=await this.cache.get(i);return this.logger.verbose(Found conversation to: ${o}, conversation ID: ${a}),a}if(await this.cache.has(n)){this.logger.verbose(Opera\xE7\xE3o de cria\xE7\xE3o j\xE1 em andamento para ${o}, aguardando resultado...);let a=Date.now();for(;await this.cache.has(n);){if(Date.now()-a>r){this.logger.warn(Timeout aguardando lock para ${o});break}if(await new Promise(c=>setTimeout(c,300)),await this.cache.has(i)){let c=await this.cache.get(i);return this.logger.verbose(Resolves creation of: ${o}, conversation ID: ${c}),c}}}await this.cache.set(n,!0,30),this.logger.verbose(Bloqueio adquirido para: ${n});try{if(await this.cache.has(i))return await this.cache.get(i);let a=await this.clientCw(s);if(!a)return null;let c=o.includes("@g.us"),l=c?o:o.split("@")[0],u=e.key.fromMe?l:e.pushName,d=await this.getInbox(s);if(!d)return null;if(c){this.logger.verbose("Processing group conversation");let E=await this.waMonitor.waInstances[s.instanceName].client.groupMetadata(l);this.logger.verbose(Group metadata: ${JSON.stringify(E)}),u=${E.subject} (GROUP);let I=await this.waMonitor.waInstances[s.instanceName].profilePicture(e.key.participant.split("@")[0]);this.logger.verbose(Participant profile picture URL: ${JSON.stringify(I)});let T=await this.findContact(s,e.key.participant.split("@")[0]);this.logger.verbose(Found participant: ${JSON.stringify(T)}),T?(!T.name||T.name===l)&&await this.updateContact(s,T.id,{name:e.pushName,avatar_url:I.profilePictureUrl||null}):await this.createContact(s,e.key.participant.split("@")[0],d.id,!1,e.pushName,I.profilePictureUrl||null,e.key.participant)}let h=await this.waMonitor.waInstances[s.instanceName].profilePicture(l);this.logger.verbose(Contact profile picture URL: ${JSON.stringify(h)});let g=await this.findContact(s,l);if(g){if(this.logger.verbose(Found contact: ${JSON.stringify(g)}),!e.key.fromMe){let E=h?.profilePictureUrl?.split("#")[0].split("?")[0].split("/").pop()||"",I=g?.thumbnail?.split("#")[0].split("?")[0].split("/").pop()||"",T=E!==I,O=!g.name||g.name===l||(+${l}.startsWith("+55")?this.getNumbers(+${l}).some(L=>g.name===L||g.name===L.substring(3)||g.name===L.substring(1)):!1);this.logger.verbose(Picture needs update: ${T}),this.logger.verbose(Name needs update: ${O}),(T||O)&&(g=await this.updateContact(s,g.id,{...O&&{name:u},...E===""&&{avatar:null},...T&&{avatar_url:h?.profilePictureUrl}}))}}else g=await this.createContact(s,l,d.id,c,u,h.profilePictureUrl||null,o);if(!g)return this.logger.warn("Contact not created or found"),null;let m=g?.payload?.id||g?.payload?.contact?.id||g?.id;this.logger.verbose(Contact ID: ${m});let y=await a.contacts.listConversations({accountId:this.provider.accountId,id:m});if(this.logger.verbose(Contact conversations: ${JSON.stringify(y)}),!y||!y.payload)return this.logger.error("No conversations found or payload is undefined"),null;let S=y.payload.find(E=>E.inbox_id==d.id);if(S&&(this.provider.reopenConversation?(this.logger.verbose(Found conversation in reopenConversation mode: ${JSON.stringify(S)}),S&&this.provider.conversationPending&&S.status!=="open"&&await a.conversations.toggleStatus({accountId:this.provider.accountId,conversationId:S.id,data:{status:"pending"}})):(S=y.payload.find(E=>E&&E.status!=="resolved"&&E.inbox_id==d.id),this.logger.verbose(Found conversation: ${JSON.stringify(S)})),S))return this.logger.verbose(Returning existing conversation ID: ${S.id}),this.cache.set(i,S.id),S.id;let C={contact_id:m.toString(),inbox_id:d.id.toString()};if(this.provider.conversationPending&&(C.status="pending"),await this.cache.has(i))return await this.cache.get(i);let v=await a.conversations.create({accountId:this.provider.accountId,data:C});return v?(this.logger.verbose(New conversation created of ${o} with ID: ${v.id}),this.cache.set(i,v.id),v.id):(this.logger.warn("Conversation not created or found"),null)}finally{await this.cache.delete(n),this.logger.verbose(Block released for: ${n})}}catch(a){return this.logger.error(Error in createConversation: ${a}),null}}async getInbox(s){let e=${s.instanceName}:getInbox;if(await this.cache.has(e))return await this.cache.get(e);let t=await this.clientCw(s);if(!t)return this.logger.warn("client not found"),null;let o=await t.inboxes.list({accountId:this.provider.accountId});if(!o)return this.logger.warn("inbox not found"),null;let i=o.payload.find(n=>n.name===this.getClientCwConfig().nameInbox);return i?(this.cache.set(e,i),i):(this.logger.warn("inbox not found"),null)}async createMessage(s,e,t,o,i,n,r,a,c){let l=await this.clientCw(s);if(!l)return this.logger.warn("client not found"),null;let u=await this.getReplyToIds(r,s),d=c?.chatwootMessageId||null,h=await l.messages.create({accountId:this.provider.accountId,conversationId:e,data:{content:t,message_type:o,attachments:n,private:i||!1,source_id:a,content_attributes:{...u},source_reply_id:d?d.toString():null}});return h||(this.logger.warn("message not found"),null)}async getOpenConversationByContact(s,e,t){let o=await this.clientCw(s);return o?(await o.contacts.listConversations({accountId:this.provider.accountId,id:t.id})).payload.find(n=>n.inbox_id===e.id&&n.status==="open")||void 0:(this.logger.warn("client not found"),null)}async createBotMessage(s,e,t,o){let i=await this.clientCw(s);if(!i)return this.logger.warn("client not found"),null;let n=await this.findContact(s,"123456");if(!n)return this.logger.warn("contact not found"),null;let r=await this.getInbox(s);if(!r)return this.logger.warn("inbox not found"),null;let a=await this.getOpenConversationByContact(s,r,n);if(!a){this.logger.warn("conversation not found");return}let c=await i.messages.create({accountId:this.provider.accountId,conversationId:a.id,data:{content:e,message_type:t,attachments:o}});return c||(this.logger.warn("message not found"),null)}async sendData(s,e,t,o,i,n,r,a,c){if(a&&this.isImportHistoryAvailable()){let h=await X.getExistingSourceIds([a],s);if(h&&h.size>0)return this.logger.warn("Message already saved on chatwoot"),null}let l=new hn.default;i&&l.append("content",i),l.append("message_type",o),l.append("attachments[]",e,{filename:t});let u=c?.chatwootMessageId||null;if(r&&n){let h=await this.getReplyToIds(r,n);if(h.in_reply_to||h.in_reply_to_external_id){let g=JSON.stringify({...h});l.append("content_attributes",g)}}u&&l.append("source_reply_id",u.toString()),a&&l.append("source_id",a);let d={method:"post",maxBodyLength:1/0,url:${this.provider.url}/api/v1/accounts/${this.provider.accountId}/conversations/${s}/messages,headers:{api_access_token:this.provider.token,...l.getHeaders()},data:l};try{let{data:h}=await Rt.default.request(d);return h}catch(h){this.logger.error(h)}}async createBotQr(s,e,t,o,i){if(!await this.clientCw(s))return this.logger.warn("client not found"),null;if(!this.configService.get("CHATWOOT").BOT_CONTACT)return this.logger.log("Chatwoot bot contact is disabled"),!0;let r=await this.findContact(s,"123456");if(!r)return this.logger.warn("contact not found"),null;let a=await this.getInbox(s);if(!a)return this.logger.warn("inbox not found"),null;let c=await this.getOpenConversationByContact(s,a,r);if(!c){this.logger.warn("conversation not found");return}let l=new hn.default;e&&l.append("content",e),l.append("message_type",t),o&&i&&l.append("attachments[]",o,{filename:i});let u={method:"post",maxBodyLength:1/0,url:${this.provider.url}/api/v1/accounts/${this.provider.accountId}/conversations/${c.id}/messages,headers:{api_access_token:this.provider.token,...l.getHeaders()},data:l};try{let{data:d}=await Rt.default.request(u);return d}catch(d){this.logger.error(d)}}async sendAttachment(s,e,t,o,i){try{let n=yn.default.parse(decodeURIComponent(t)),r=ht.default.lookup(n?.ext)||"",a=n?.name+n?.ext;if(!r){let h=t.split("/");a=decodeURIComponent(h[h.length-1]),r=(await Rt.default.get(t,{responseType:"arraybuffer"})).headers["content-type"]}let c="document";switch(r.split("/")[0]){case"image":c="image";break;case"video":c="video";break;case"audio":c="audio";break;default:c="document";break}if(c==="audio"){let h={number:e,audio:t,delay:1200,quoted:i?.quoted};return j("/message/sendWhatsAppAudio"),await s?.audioWhatsapp(h,null,!0)}c==="image"&&n&&[".gif",".svg",".tiff",".tif"].includes(n?.ext)&&(c="document");let u={number:e,mediatype:c,fileName:a,media:t,delay:1200,quoted:i?.quoted};return j("/message/sendMedia"),o&&(u.caption=o),await s?.mediaMessage(u,null,!0)}catch(n){this.logger.error(n)}}async onSendMessageError(s,e,t){this.logger.verbose(onSendMessageError ${JSON.stringify(t)});let o=await this.clientCw(s);if(o){if(t&&t?.status===400&&t?.message[0]?.exists===!1){o.messages.create({accountId:this.provider.accountId,conversationId:e,data:{content:${U.t("cw.message.numbernotinwhatsapp")},message_type:"outgoing",private:!0}});return}o.messages.create({accountId:this.provider.accountId,conversationId:e,data:{content:U.t("cw.message.notsent",{error:t?${t.toString()}:""}),message_type:"outgoing",private:!0}})}}async receiveWebhook(s,e){try{if(await new Promise(c=>setTimeout(c,500)),!await this.clientCw(s))return this.logger.warn("client not found"),null;if(this.provider.reopenConversation===!1&&e.event==="conversation_status_changed"&&e.status==="resolved"&&e.meta?.sender?.identifier){let c=${s.instanceName}:createConversation-${e.meta.sender.identifier};this.cache.delete(c)}if(!e?.conversation||e.private||e.event==="message_updated"&&!e.content_attributes?.deleted)return{message:"bot"};let o=e.conversation.meta.sender?.identifier||e.conversation.meta.sender?.phone_number.replace("+",""),i=e.content?e.content.replaceAll(/(?<!\*)\*((?!\s)([^\n*]+?)(?<!\s))\*(?!\*)/g,"_$1_").replaceAll(/\*{2}((?!\s)([^\n*]+?)(?<!\s))\*{2}/g,"*$1*").replaceAll(/~{2}((?!\s)([^\n*]+?)(?<!\s))~{2}/g,"~$1~").replaceAll(/(?<!)((?!\s)([^*]+?)(?<!\s))(?!)/g,"$1"):e.content,n=e?.conversation?.messages[0]?.sender?.available_name||e?.sender?.name,r=this.waMonitor.waInstances[s.instanceName];if(e.event==="message_updated"&&e.content_attributes?.deleted){let c=await this.prismaRepository.message.findFirst({where:{chatwootMessageId:e.id,instanceId:s.instanceId}});if(c){let l=c.key;await r?.client.sendMessage(l.remoteJid,{delete:l}),await this.prismaRepository.message.deleteMany({where:{instanceId:s.instanceId,chatwootMessageId:e.id}})}return{message:"bot"}}let a=this.configService.get("CHATWOOT").BOT_CONTACT;if(o==="123456"&&e.message_type==="outgoing"){let c=i.replace("/","");if(a&&(c.includes("init")||c.includes("iniciar")))if(r?.connectionStatus?.state!=="open"){let u=c.split(":")[1];await r.connectToWhatsapp(u)}else await this.createBotMessage(s,U.t("cw.inbox.alreadyConnected",{inboxName:e.inbox.name}),"incoming");if(c==="clearcache"&&(r.clearCacheChatwoot(),await this.createBotMessage(s,U.t("cw.inbox.clearCache",{inboxName:e.inbox.name}),"incoming")),c==="status"){let l=r?.connectionStatus?.state;l||await this.createBotMessage(s,U.t("cw.inbox.notFound",{inboxName:e.inbox.name}),"incoming"),l&&await this.createBotMessage(s,U.t("cw.inbox.status",{inboxName:e.inbox.name,state:l}),"incoming")}if(a&&(c==="disconnect"||c==="desconectar")){let l=U.t("cw.inbox.disconnect",{inboxName:e.inbox.name});await this.createBotMessage(s,l,"incoming"),await r?.client?.logout("Log out instance: "+s.instanceName),await r?.client?.ws?.close()}}if(e.message_type==="outgoing"&&e?.conversation?.messages?.length&&o!=="123456"){if(e?.conversation?.messages[0]?.source_id?.substring(0,5)==="WAID:")return{message:"bot"};if(!r&&e.conversation?.id)return this.onSendMessageError(s,e.conversation?.id,"Instance not found"),{message:"bot"};let c;if(n==null)c=i;else{let u=this.provider.signDelimiter?this.provider.signDelimiter.replaceAll("\n",`
�
`
85 ,d=this.provider.signMsg?[${n}:]:[];d.push(i),c=d.join(u)}for(let u of e.conversation.messages)if(u.attachments&&u.attachments.length>0)for(let d of u.attachments){i||(c=null);let h={quoted:await this.getQuotedMessage(e,s)},g=await this.sendAttachment(r,o,d.data_url,c,h);!g&&e.conversation?.id&&this.onSendMessageError(s,e.conversation?.id),await this.updateChatwootMessageId({...g,owner:s.instanceName},{messageId:e.id,inboxId:e.inbox?.id,conversationId:e.conversation?.id,contactInboxSourceId:e.conversation?.contact_inbox?.source_id},s)}else{let d={number:o,text:c,delay:1200,quoted:await this.getQuotedMessage(e,s)};j("/message/sendText");let h;try{if(h=await r?.textMessage(d,!0),!h)throw new Error("Message not sent");fn.default.isLong(h?.messageTimestamp)&&(h.messageTimestamp=h.messageTimestamp?.toNumber()),await this.updateChatwootMessageId({...h,instanceId:s.instanceId},{messageId:e.id,inboxId:e.inbox?.id,conversationId:e.conversation?.id,contactInboxSourceId:e.conversation?.contact_inbox?.source_id},s)}catch(g){throw!h&&e.conversation?.id&&this.onSendMessageError(s,e.conversation?.id,g),g}}if(this.configService.get("CHATWOOT").MESSAGE_READ){let u=await this.prismaRepository.message.findFirst({where:{key:{path:["fromMe"],equals:!1},instanceId:s.instanceId}});if(u&&!u.chatwootIsRead){let d=u.key;r?.markMessageAsRead({readMessages:[{id:d.id,fromMe:d.fromMe,remoteJid:d.remoteJid}]});let h={chatwootMessageId:u.chatwootMessageId,chatwootConversationId:u.chatwootConversationId,chatwootInboxId:u.chatwootInboxId,chatwootContactInboxSourceId:u.chatwootContactInboxSourceId,chatwootIsRead:!0};await this.prismaRepository.message.updateMany({where:{instanceId:s.instanceId,key:{path:["id"],equals:d.id}},data:h})}}}if(e.message_type==="template"&&e.event==="message_created"){let c={number:o,text:e.content.replace(/\\\r\n|\\\n|\n/g,
→ 86 `),delay:1200};j("/message/sendText"),await r?.textMessage(c)}return{message:"bot"}}catch(t){return this.logger.error(t),{message:"bot"}}}async updateChatwootMessageId(s,e,t){let o=s.key;!e.messageId||!o?.id||(await this.prismaRepository.message.updateMany(
Input error. A JSON path cannot be set without a scalar filter.
at Xn.handleRequestError (/evolution/node_modules/@prisma/client/runtime/library.js:121:7459)
at Xn.handleAndLogRequestError (/evolution/node_modules/@prisma/client/runtime/library.js:121:6784)
at Xn.request (/evolution/node_modules/@prisma/client/runtime/library.js:121:6491)
at async l (/evolution/node_modules/@prisma/client/runtime/library.js:130:9812)
at async Pe.getMessageByKeyId (/evolution/dist/main.js:86:614)
at async Pe.eventWhatsapp (/evolution/dist/main.js:135:39) {
code: 'P2019',
�
{
modelName: 'Message',
details: 'A JSON path cannot be set without a scalar filter.'
},
clientVersion: '6.11.1'
}
What did you expect?
Que não ouve erros.
What did you observe instead of what you expected?
erros.
Screenshots/Videos
No response
Which version of the API are you using?
2.3.3 homolog 09/09/2025
What is your environment?
Docker
Other environment specifications
No response
If applicable, paste the log output
No response
Additional Notes
No response