@@ -1666,6 +1666,13 @@ export class ChatwootService {
16661666 return result ;
16671667 }
16681668
1669+ private isInteractiveButtonMessage ( messageType : string , message : any ) {
1670+ return (
1671+ messageType === 'interactiveMessage' &&
1672+ message . interactiveMessage ?. nativeFlowMessage ?. buttons ?. length > 0
1673+ ) ;
1674+ }
1675+
16691676 private getAdsMessage ( msg : any ) {
16701677 interface AdsMessage {
16711678 title : string ;
@@ -1984,8 +1991,9 @@ export class ChatwootService {
19841991 const adsMessage = this . getAdsMessage ( body ) ;
19851992
19861993 const reactionMessage = this . getReactionMessage ( body . message ) ;
1994+ const isInteractiveButtonMessage = this . isInteractiveButtonMessage ( body . messageType , body . message ) ;
19871995
1988- if ( ! bodyMessage && ! isMedia && ! reactionMessage ) {
1996+ if ( ! bodyMessage && ! isMedia && ! reactionMessage && ! isInteractiveButtonMessage ) {
19891997 this . logger . warn ( 'no body message found' ) ;
19901998 return ;
19911999 }
@@ -2118,6 +2126,50 @@ export class ChatwootService {
21182126 return ;
21192127 }
21202128
2129+ if ( isInteractiveButtonMessage ) {
2130+ const buttons = body . message . interactiveMessage . nativeFlowMessage . buttons ;
2131+ this . logger . info ( 'is Interactive Button Message: ' + JSON . stringify ( buttons ) ) ;
2132+
2133+ for ( const button of buttons ) {
2134+ const buttonParams = JSON . parse ( button . buttonParamsJson ) ;
2135+ const paymentSettings = buttonParams . payment_settings ;
2136+
2137+ if ( button . name === 'payment_info' && paymentSettings [ 0 ] . type === 'pix_static_code' ) {
2138+ const pixSettings = paymentSettings [ 0 ] . pix_static_code ;
2139+ const pixKeyType = ( ( ) => {
2140+ switch ( pixSettings . key_type ) {
2141+ case 'EVP' :
2142+ return 'Chave Aleatória' ;
2143+ case 'EMAIL' :
2144+ return 'E-mail' ;
2145+ case 'PHONE' :
2146+ return 'Telefone' ;
2147+ default :
2148+ return pixSettings . key_type ;
2149+ }
2150+ } ) ( ) ;
2151+ const pixKey = pixSettings . key_type === 'PHONE' ? pixSettings . key . replace ( '+55' , '' ) : pixSettings . key ;
2152+ const content = `*${ pixSettings . merchant_name } *\nChave PIX: ${ pixKey } (${ pixKeyType } )` ;
2153+
2154+ const send = await this . createMessage (
2155+ instance ,
2156+ getConversation ,
2157+ content ,
2158+ messageType ,
2159+ false ,
2160+ [ ] ,
2161+ body ,
2162+ 'WAID:' + body . key . id ,
2163+ quotedMsg ,
2164+ ) ;
2165+ if ( ! send ) this . logger . warn ( 'message not sent' ) ;
2166+ } else {
2167+ this . logger . warn ( 'Interactive Button Message not mapped' ) ;
2168+ }
2169+ }
2170+ return ;
2171+ }
2172+
21212173 const isAdsMessage = ( adsMessage && adsMessage . title ) || adsMessage . body || adsMessage . thumbnailUrl ;
21222174 if ( isAdsMessage ) {
21232175 const imgBuffer = await axios . get ( adsMessage . thumbnailUrl , { responseType : 'arraybuffer' } ) ;
0 commit comments