@@ -1654,6 +1654,10 @@ export class ChatwootService {
16541654 return result ;
16551655 }
16561656
1657+ private isInteractiveButtonMessage ( messageType : string , message : any ) {
1658+ return messageType === 'interactiveMessage' && message . interactiveMessage ?. nativeFlowMessage ?. buttons ?. length > 0 ;
1659+ }
1660+
16571661 private getAdsMessage ( msg : any ) {
16581662 interface AdsMessage {
16591663 title : string ;
@@ -1972,8 +1976,9 @@ export class ChatwootService {
19721976 const adsMessage = this . getAdsMessage ( body ) ;
19731977
19741978 const reactionMessage = this . getReactionMessage ( body . message ) ;
1979+ const isInteractiveButtonMessage = this . isInteractiveButtonMessage ( body . messageType , body . message ) ;
19751980
1976- if ( ! bodyMessage && ! isMedia && ! reactionMessage ) {
1981+ if ( ! bodyMessage && ! isMedia && ! reactionMessage && ! isInteractiveButtonMessage ) {
19771982 this . logger . warn ( 'no body message found' ) ;
19781983 return ;
19791984 }
@@ -2098,6 +2103,50 @@ export class ChatwootService {
20982103 return ;
20992104 }
21002105
2106+ if ( isInteractiveButtonMessage ) {
2107+ const buttons = body . message . interactiveMessage . nativeFlowMessage . buttons ;
2108+ this . logger . info ( 'is Interactive Button Message: ' + JSON . stringify ( buttons ) ) ;
2109+
2110+ for ( const button of buttons ) {
2111+ const buttonParams = JSON . parse ( button . buttonParamsJson ) ;
2112+ const paymentSettings = buttonParams . payment_settings ;
2113+
2114+ if ( button . name === 'payment_info' && paymentSettings [ 0 ] . type === 'pix_static_code' ) {
2115+ const pixSettings = paymentSettings [ 0 ] . pix_static_code ;
2116+ const pixKeyType = ( ( ) => {
2117+ switch ( pixSettings . key_type ) {
2118+ case 'EVP' :
2119+ return 'Chave Aleatória' ;
2120+ case 'EMAIL' :
2121+ return 'E-mail' ;
2122+ case 'PHONE' :
2123+ return 'Telefone' ;
2124+ default :
2125+ return pixSettings . key_type ;
2126+ }
2127+ } ) ( ) ;
2128+ const pixKey = pixSettings . key_type === 'PHONE' ? pixSettings . key . replace ( '+55' , '' ) : pixSettings . key ;
2129+ const content = `*${ pixSettings . merchant_name } *\nChave PIX: ${ pixKey } (${ pixKeyType } )` ;
2130+
2131+ const send = await this . createMessage (
2132+ instance ,
2133+ getConversation ,
2134+ content ,
2135+ messageType ,
2136+ false ,
2137+ [ ] ,
2138+ body ,
2139+ 'WAID:' + body . key . id ,
2140+ quotedMsg ,
2141+ ) ;
2142+ if ( ! send ) this . logger . warn ( 'message not sent' ) ;
2143+ } else {
2144+ this . logger . warn ( 'Interactive Button Message not mapped' ) ;
2145+ }
2146+ }
2147+ return ;
2148+ }
2149+
21012150 const isAdsMessage = ( adsMessage && adsMessage . title ) || adsMessage . body || adsMessage . thumbnailUrl ;
21022151 if ( isAdsMessage ) {
21032152 const imgBuffer = await axios . get ( adsMessage . thumbnailUrl , { responseType : 'arraybuffer' } ) ;
0 commit comments