Skip to content

Commit e5f360c

Browse files
SNCFamiraBenkaciBENKACI Amira
and
BENKACI Amira
authored
send message type image (#1690)
* send message type image * send message type image --------- Co-authored-by: BENKACI Amira <amira_benkaci@lm-f2wqfgx23g.groupevsc.com>
1 parent 1f3bd4f commit e5f360c

16 files changed

+140
-30
lines changed

bot/connector-whatsapp-cloud/src/main/kotlin/WhatsAppCloudBuilder.kt

+16
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,22 @@ fun BotBus.whatsAppCloudText(
9292
userId = userId.id,
9393
)
9494

95+
fun BotBus.whatsAppCloudImage(
96+
id: String,
97+
link: String? = null,
98+
caption: CharSequence? = null,
99+
): WhatsAppCloudBotImageMessage =
100+
WhatsAppCloudBotImageMessage(
101+
messagingProduct = "whatsapp",
102+
image = WhatsAppCloudBotImage(
103+
id = id,
104+
link = link,
105+
caption = translate(caption).toString()
106+
),
107+
recipientType = WhatsAppCloudBotRecipientType.individual,
108+
userId = userId.id,
109+
)
110+
95111
fun I18nTranslator.whatsAppCloudReplyButtonMessage(
96112
text: CharSequence,
97113
vararg replies: QuickReply,

bot/connector-whatsapp-cloud/src/main/kotlin/model/send/message/WhatsAppCloudBotMessage.kt

+4-6
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,7 @@ import ai.tock.bot.connector.ConnectorMessage
2020
import ai.tock.bot.connector.ConnectorType
2121
import ai.tock.bot.connector.whatsapp.cloud.UserHashedIdCache
2222
import ai.tock.bot.connector.whatsapp.cloud.WhatsAppCloudConnectorMessage
23-
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.content.WhatsAppCloudBotInteractiveMessage
24-
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.content.WhatsAppCloudBotLocationMessage
25-
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.content.WhatsAppCloudBotTemplateMessage
26-
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.content.WhatsAppCloudBotTextMessage
23+
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.content.*
2724
import ai.tock.bot.connector.whatsapp.cloud.whatsAppCloudConnectorType
2825
import com.fasterxml.jackson.annotation.JsonIgnore
2926
import com.fasterxml.jackson.annotation.JsonProperty
@@ -41,9 +38,10 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo
4138
JsonSubTypes.Type(value = WhatsAppCloudBotInteractiveMessage::class, name = "interactive"),
4239
JsonSubTypes.Type(value = WhatsAppCloudBotLocationMessage::class, name = "location"),
4340
JsonSubTypes.Type(value = WhatsAppCloudBotTemplateMessage::class, name = "template"),
44-
)
41+
JsonSubTypes.Type(value = WhatsAppCloudBotImageMessage::class, name = "image")
42+
)
4543

46-
abstract class WhatsAppCloudBotMessage ( val type: WhatsAppCoudBotMessageType, @JsonIgnore internal open val userId: String?) :
44+
abstract class WhatsAppCloudBotMessage (val type: WhatsAppCloudBotMessageType, @JsonIgnore internal open val userId: String?) :
4745
ConnectorMessage, WhatsAppCloudConnectorMessage() {
4846

4947
@get:JsonIgnore

bot/connector-whatsapp-cloud/src/main/kotlin/model/send/message/WhatsAppCoudBotMessageType.kt bot/connector-whatsapp-cloud/src/main/kotlin/model/send/message/WhatsAppCloudBotMessageType.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@
1616

1717
package ai.tock.bot.connector.whatsapp.cloud.model.send.message
1818

19-
enum class WhatsAppCoudBotMessageType {
19+
enum class WhatsAppCloudBotMessageType {
2020
text, reaction, image, audio , video, location, contacts, interactive, template
2121
}

bot/connector-whatsapp-cloud/src/main/kotlin/model/send/media/WhatsAppCloudSendBotImageMessage.kt bot/connector-whatsapp-cloud/src/main/kotlin/model/send/message/WhatsAppCloudSendBotImageMessage.kt

+7-10
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,13 @@
1414
* limitations under the License.
1515
*/
1616

17-
package ai.tock.bot.connector.whatsapp.cloud.model.send.media
17+
package ai.tock.bot.connector.whatsapp.cloud.model.send.message
1818

19-
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudBotRecipientType
20-
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudSendBotMessage
21-
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCoudBotMessageType
19+
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.content.WhatsAppCloudBotImage
2220

2321
data class WhatsAppCloudSendBotImageMessage(
24-
override val messagingProduct: String,
25-
override val to: String?,
26-
override val recipientType: WhatsAppCloudBotRecipientType?
27-
) : WhatsAppCloudSendBotMessage(WhatsAppCoudBotMessageType.image) {
28-
29-
}
22+
override val messagingProduct: String,
23+
val image: WhatsAppCloudBotImage,
24+
override val recipientType: WhatsAppCloudBotRecipientType,
25+
override val to: String,
26+
) : WhatsAppCloudSendBotMessage(WhatsAppCloudBotMessageType.image)

bot/connector-whatsapp-cloud/src/main/kotlin/model/send/message/WhatsAppCloudSendBotInteractiveMessage.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,4 @@ data class WhatsAppCloudSendBotInteractiveMessage(
2323
val interactive: WhatsAppCloudBotInteractive,
2424
override val recipientType: WhatsAppCloudBotRecipientType,
2525
override val to: String,
26-
) : WhatsAppCloudSendBotMessage(WhatsAppCoudBotMessageType.interactive)
26+
) : WhatsAppCloudSendBotMessage(WhatsAppCloudBotMessageType.interactive)

bot/connector-whatsapp-cloud/src/main/kotlin/model/send/message/WhatsAppCloudSendBotLocationMessage.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,4 @@ data class WhatsAppCloudSendBotLocationMessage(
2323
val location: WhatsAppCloudBotLocation,
2424
override val recipientType: WhatsAppCloudBotRecipientType,
2525
override val to: String,
26-
) : WhatsAppCloudSendBotMessage(WhatsAppCoudBotMessageType.location)
26+
) : WhatsAppCloudSendBotMessage(WhatsAppCloudBotMessageType.location)

bot/connector-whatsapp-cloud/src/main/kotlin/model/send/message/WhatsAppCloudSendBotMessage.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,10 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo
3030
JsonSubTypes.Type(value = WhatsAppCloudSendBotInteractiveMessage::class, name = "interactive"),
3131
JsonSubTypes.Type(value = WhatsAppCloudSendBotLocationMessage::class, name = "location"),
3232
JsonSubTypes.Type(value = WhatsAppCloudSendBotTemplateMessage::class, name = "template"),
33-
)
33+
JsonSubTypes.Type(value = WhatsAppCloudSendBotImageMessage::class, name = "image"),
34+
)
3435

35-
abstract class WhatsAppCloudSendBotMessage(val type: WhatsAppCoudBotMessageType) {
36+
abstract class WhatsAppCloudSendBotMessage(val type: WhatsAppCloudBotMessageType) {
3637

3738
@get:JsonProperty("messaging_product")
3839
abstract val messagingProduct:String

bot/connector-whatsapp-cloud/src/main/kotlin/model/send/message/WhatsAppCloudSendBotTemplateMessage.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,4 @@ data class WhatsAppCloudSendBotTemplateMessage(
2323
val template: WhatsAppCloudBotTemplate,
2424
override val recipientType: WhatsAppCloudBotRecipientType,
2525
override val to: String,
26-
) : WhatsAppCloudSendBotMessage(WhatsAppCoudBotMessageType.template)
26+
) : WhatsAppCloudSendBotMessage(WhatsAppCloudBotMessageType.template)

bot/connector-whatsapp-cloud/src/main/kotlin/model/send/message/WhatsAppCloudSendBotTextMessage.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,4 @@ data class WhatsAppCloudSendBotTextMessage (
2626
override val to: String,
2727
@get:JsonProperty("preview_url")
2828
val previewUrl: Boolean = false,
29-
) : WhatsAppCloudSendBotMessage(WhatsAppCoudBotMessageType.text)
29+
) : WhatsAppCloudSendBotMessage(WhatsAppCloudBotMessageType.text)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* Copyright (C) 2017/2021 e-voyageurs technologies
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package ai.tock.bot.connector.whatsapp.cloud.model.send.message.content
18+
19+
data class WhatsAppCloudBotImage(
20+
var id: String,
21+
val link: String?,
22+
val caption: String?
23+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright (C) 2017/2021 e-voyageurs technologies
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package ai.tock.bot.connector.whatsapp.cloud.model.send.message.content
18+
19+
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.*
20+
import ai.tock.bot.engine.config.UploadedFilesService.attachmentType
21+
import ai.tock.bot.engine.message.Attachment
22+
import ai.tock.bot.engine.message.GenericMessage
23+
24+
data class WhatsAppCloudBotImageMessage (
25+
override val messagingProduct: String,
26+
val image: WhatsAppCloudBotImage,
27+
override val recipientType: WhatsAppCloudBotRecipientType,
28+
override val userId: String? = null,
29+
) : WhatsAppCloudBotMessage(WhatsAppCloudBotMessageType.image, userId) {
30+
override fun toSendBotMessage(recipientId: String): WhatsAppCloudSendBotMessage =
31+
WhatsAppCloudSendBotImageMessage(
32+
messagingProduct,
33+
image,
34+
recipientType,
35+
recipientId
36+
)
37+
38+
override fun toGenericMessage(): GenericMessage =
39+
GenericMessage(
40+
texts = mapOf(GenericMessage.TEXT_PARAM to "image"),
41+
attachments = listOf(Attachment(image.id, attachmentType(image.id)))
42+
)
43+
}

bot/connector-whatsapp-cloud/src/main/kotlin/model/send/message/content/WhatsAppCloudBotInteractiveMessage.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ data class WhatsAppCloudBotInteractiveMessage (
2525
val interactive: WhatsAppCloudBotInteractive,
2626
override val recipientType: WhatsAppCloudBotRecipientType,
2727
override val userId: String? = null,
28-
): WhatsAppCloudBotMessage(WhatsAppCoudBotMessageType.interactive, userId) {
28+
): WhatsAppCloudBotMessage(WhatsAppCloudBotMessageType.interactive, userId) {
2929
override fun toGenericMessage(): GenericMessage? {
3030
val texts = mapOf(GenericMessage.TEXT_PARAM to (interactive.body?.text ?: ""))
3131
return GenericMessage(

bot/connector-whatsapp-cloud/src/main/kotlin/model/send/message/content/WhatsAppCloudBotLocationMessage.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudBotM
2020
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudBotRecipientType
2121
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudSendBotLocationMessage
2222
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudSendBotMessage
23-
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCoudBotMessageType
23+
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudBotMessageType
2424
import ai.tock.bot.engine.message.GenericMessage
2525

2626
data class WhatsAppCloudBotLocationMessage(
2727
override val messagingProduct: String,
2828
val location: WhatsAppCloudBotLocation,
2929
override val recipientType: WhatsAppCloudBotRecipientType,
3030
override val userId: String? = null,
31-
) : WhatsAppCloudBotMessage(WhatsAppCoudBotMessageType.location, userId) {
31+
) : WhatsAppCloudBotMessage(WhatsAppCloudBotMessageType.location, userId) {
3232
override fun toSendBotMessage(recipientId: String): WhatsAppCloudSendBotMessage =
3333
WhatsAppCloudSendBotLocationMessage(
3434
messagingProduct,

bot/connector-whatsapp-cloud/src/main/kotlin/model/send/message/content/WhatsAppCloudBotTemplateMessage.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudBotM
2020
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudBotRecipientType
2121
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudSendBotMessage
2222
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudSendBotTemplateMessage
23-
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCoudBotMessageType
23+
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudBotMessageType
2424
import ai.tock.bot.engine.message.GenericMessage
2525

2626
data class WhatsAppCloudBotTemplateMessage(
2727
override val messagingProduct: String,
2828
val template: WhatsAppCloudBotTemplate,
2929
override val recipientType: WhatsAppCloudBotRecipientType,
3030
override val userId: String? = null,
31-
) : WhatsAppCloudBotMessage(WhatsAppCoudBotMessageType.template, userId) {
31+
) : WhatsAppCloudBotMessage(WhatsAppCloudBotMessageType.template, userId) {
3232
override fun toSendBotMessage(recipientId: String): WhatsAppCloudSendBotMessage =
3333
WhatsAppCloudSendBotTemplateMessage(
3434
messagingProduct,

bot/connector-whatsapp-cloud/src/main/kotlin/model/send/message/content/WhatsAppCloudBotTextMessage.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ data class WhatsAppCloudBotTextMessage (
2626
val text: TextContent,
2727
override val recipientType: WhatsAppCloudBotRecipientType,
2828
override val userId: String? = null,
29-
) : WhatsAppCloudBotMessage(WhatsAppCoudBotMessageType.text, userId) {
29+
) : WhatsAppCloudBotMessage(WhatsAppCloudBotMessageType.text, userId) {
3030
override fun toSendBotMessage(recipientId: String): WhatsAppCloudSendBotMessage =
3131
WhatsAppCloudSendBotTextMessage(
3232
messagingProduct,

bot/connector-whatsapp-cloud/src/main/kotlin/services/WhatsAppCloudApiService.kt

+33-1
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,11 @@ import ai.tock.bot.connector.whatsapp.cloud.model.send.manageTemplate.ResponseCr
2626
import ai.tock.bot.connector.whatsapp.cloud.model.send.manageTemplate.WhatsAppCloudTemplate
2727
import ai.tock.bot.connector.whatsapp.cloud.model.send.media.FileType
2828
import ai.tock.bot.connector.whatsapp.cloud.model.send.media.MediaResponse
29+
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudSendBotTemplateMessage
2930
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudSendBotInteractiveMessage
31+
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudSendBotImageMessage
3032
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudSendBotLocationMessage
3133
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudSendBotMessage
32-
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudSendBotTemplateMessage
3334
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.WhatsAppCloudSendBotTextMessage
3435
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.content.Component
3536
import ai.tock.bot.connector.whatsapp.cloud.model.send.message.content.HeaderParameter
@@ -68,8 +69,11 @@ class WhatsAppCloudApiService(private val apiClient: WhatsAppCloudApiClient) {
6869
try {
6970
when (messageRequest) {
7071
is WhatsAppCloudSendBotTextMessage,
72+
7173
is WhatsAppCloudSendBotLocationMessage -> handleSimpleMessage(phoneNumberId, token, messageRequest)
7274

75+
is WhatsAppCloudSendBotImageMessage -> handleImageMessage(phoneNumberId, token, messageRequest)
76+
7377
is WhatsAppCloudSendBotInteractiveMessage -> handleInteractiveMessage(
7478
phoneNumberId,
7579
token,
@@ -83,6 +87,13 @@ class WhatsAppCloudApiService(private val apiClient: WhatsAppCloudApiClient) {
8387
}
8488
}
8589

90+
private fun handleImageMessage(phoneNumberId: String, token: String, messageRequest: WhatsAppCloudSendBotImageMessage) {
91+
replaceWithRealMessageImageId(messageRequest, phoneNumberId, token)
92+
send(messageRequest) {
93+
apiClient.graphApi.sendMessage(phoneNumberId, token, messageRequest).execute()
94+
}
95+
}
96+
8697
private fun handleSimpleMessage(phoneNumberId: String, token: String, messageRequest: WhatsAppCloudSendBotMessage) {
8798
send(messageRequest) {
8899
apiClient.graphApi.sendMessage(phoneNumberId, token, messageRequest).execute()
@@ -302,6 +313,27 @@ class WhatsAppCloudApiService(private val apiClient: WhatsAppCloudApiClient) {
302313
}
303314
}
304315

316+
private fun replaceWithRealMessageImageId(
317+
messageRequest: WhatsAppCloudSendBotImageMessage,
318+
phoneNumberId: String,
319+
token: String
320+
) {
321+
val client = OkHttpClient.Builder().apply(TockProxyAuthenticator::install).build()
322+
323+
var res = sendMedia(
324+
client,
325+
phoneNumberId,
326+
token,
327+
messageRequest.image.id,
328+
FileType.PNG.type
329+
)
330+
331+
val image = messageRequest.image
332+
val newImageId = res.id
333+
image.id = newImageId
334+
}
335+
336+
305337
private fun replaceWithRealImageId(
306338
messageRequest: WhatsAppCloudSendBotTemplateMessage,
307339
phoneNumberId: String,

0 commit comments

Comments
 (0)