@@ -37,6 +37,9 @@ import ai.tock.bot.connector.whatsapp.cloud.model.send.message.content.Component
3737import ai.tock.bot.connector.whatsapp.cloud.model.send.message.content.HeaderParameter
3838import ai.tock.bot.connector.whatsapp.cloud.model.send.message.content.PayloadParameter
3939import ai.tock.bot.connector.whatsapp.cloud.model.send.message.content.WhatsAppCloudBotActionButton
40+ import ai.tock.bot.connector.whatsapp.cloud.model.send.message.content.WhatsAppCloudBotHeaderType
41+ import ai.tock.bot.connector.whatsapp.cloud.model.send.message.content.WhatsAppCloudBotInteractiveHeader
42+ import ai.tock.bot.connector.whatsapp.cloud.model.send.message.content.WhatsAppCloudBotMediaImage
4043import ai.tock.bot.engine.BotRepository
4144import ai.tock.shared.Executor
4245import ai.tock.shared.TockProxyAuthenticator
@@ -117,7 +120,7 @@ class WhatsAppCloudApiService(private val apiClient: WhatsAppCloudApiClient) {
117120 }
118121 }
119122
120- private fun handleInteractiveMessage (
123+ private fun handleInteractiveMessage2 (
121124 phoneNumberId : String ,
122125 token : String ,
123126 messageRequest : WhatsAppCloudSendBotInteractiveMessage
@@ -127,7 +130,20 @@ class WhatsAppCloudApiService(private val apiClient: WhatsAppCloudApiClient) {
127130 val updateButtons = action.buttons.map { button ->
128131 updateButton(button)
129132 }
130- sendUpdatedInteractiveMessage(phoneNumberId, token, messageRequest, updateButtons)
133+
134+ if (messageRequest.interactive.header!= null ){
135+ val updateHeader = WhatsAppCloudBotInteractiveHeader (
136+ type = WhatsAppCloudBotHeaderType .image,
137+ image = WhatsAppCloudBotMediaImage (
138+ id = getRealIdImg(messageRequest, phoneNumberId, token)
139+
140+ )
141+ )
142+ sendUpdatedInteractiveMessage(phoneNumberId, token, messageRequest, updateButtons, updateHeader)
143+ }else {
144+ sendUpdatedInteractiveMessage(phoneNumberId, token, messageRequest, updateButtons)
145+ }
146+
131147 } else {
132148 send(messageRequest) {
133149 apiClient.graphApi.sendMessage(
@@ -140,6 +156,48 @@ class WhatsAppCloudApiService(private val apiClient: WhatsAppCloudApiClient) {
140156 }
141157 }
142158
159+
160+ private fun handleInteractiveMessage (
161+ phoneNumberId : String ,
162+ token : String ,
163+ messageRequest : WhatsAppCloudSendBotInteractiveMessage
164+ ) {
165+ val action = messageRequest.interactive.action ? : return sendMessage(phoneNumberId, token, messageRequest)
166+ val updatedButtons = action.buttons.takeIf { ! it.isNullOrEmpty() }?.map { updateButton(it) }
167+ val updatedHeader = messageRequest.interactive.header?.let {
168+ WhatsAppCloudBotInteractiveHeader (
169+ type = WhatsAppCloudBotHeaderType .image,
170+ image = WhatsAppCloudBotMediaImage (id = getRealIdImg(messageRequest, phoneNumberId, token))
171+ )
172+ }
173+ if (updatedButtons != null ) {
174+ sendUpdatedInteractiveMessage(phoneNumberId, token, messageRequest, updatedButtons, updatedHeader)
175+ } else {
176+ send(messageRequest) {
177+ apiClient.graphApi.sendMessage(
178+ phoneNumberId,
179+ token,
180+ messageRequest
181+ ).execute()
182+ }
183+ }
184+ }
185+
186+ private fun getRealIdImg (
187+ messageRequest : WhatsAppCloudSendBotInteractiveMessage ,
188+ phoneNumberId : String ,
189+ token : String
190+ ): String {
191+
192+ val headerImageId = messageRequest.interactive.header?.image?.id
193+
194+ val client = OkHttpClient .Builder ().apply (TockProxyAuthenticator ::install).build()
195+
196+ val res = sendMedia(client, phoneNumberId, token, headerImageId.toString(), FileType .PNG .type)
197+
198+ return res.id
199+ }
200+
143201 private fun updateButton (button : WhatsAppCloudBotActionButton ): WhatsAppCloudBotActionButton =
144202 if (button.reply.id.length >= 256 ) {
145203 val uuidPayload = UUID .randomUUID().toString()
@@ -162,11 +220,12 @@ class WhatsAppCloudApiService(private val apiClient: WhatsAppCloudApiClient) {
162220 phoneNumberId : String ,
163221 token : String ,
164222 messageRequest : WhatsAppCloudSendBotInteractiveMessage ,
165- updatedButtons : List <WhatsAppCloudBotActionButton >
223+ updatedButtons : List <WhatsAppCloudBotActionButton >,
224+ updateHeader : WhatsAppCloudBotInteractiveHeader ? = null
166225 ) {
167226 val updateAction = messageRequest.interactive.action?.copy(buttons = updatedButtons)
168227 val updateMessageRequest = messageRequest.copy(
169- interactive = messageRequest.interactive.copy(action = updateAction)
228+ interactive = messageRequest.interactive.copy(header = updateHeader, action = updateAction)
170229 )
171230 send(updateMessageRequest) {
172231 apiClient.graphApi.sendMessage(
0 commit comments