Skip to content

Commit d530156

Browse files
author
BENKACI Amira
committed
send message type image
1 parent 830e244 commit d530156

7 files changed

+124
-18
lines changed

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

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

95+
fun BotBus.whatsAppCloudImage(
96+
id: String,
97+
link: String? = null,
98+
caption: String? = null,
99+
): WhatsAppCloudBotImageMessage =
100+
WhatsAppCloudBotImageMessage(
101+
messagingProduct = "whatsapp",
102+
image = WhatsAppCloudBotImage(id, link, caption),
103+
recipientType = WhatsAppCloudBotRecipientType.individual,
104+
userId = userId.id,
105+
)
106+
95107
fun I18nTranslator.whatsAppCloudReplyButtonMessage(
96108
text: CharSequence,
97109
vararg replies: QuickReply,
@@ -328,7 +340,7 @@ fun <T : Bus<T>> T.whatsAppCloudTextParameterTemplate(
328340
typeParameter: CharSequence?,
329341
textButton: CharSequence?
330342
): TextParameter = TextParameter(
331-
type = ParameterType.valueOf(translate(typeParameter).toString()),
343+
type = ParameterType.valueOf((typeParameter).toString()),
332344
text = translate(textButton).toString(),
333345
)
334346

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

+3-5
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,7 +38,8 @@ 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

4644
abstract class WhatsAppCloudBotMessage ( val type: WhatsAppCoudBotMessageType, @JsonIgnore internal open val userId: String?) :
4745
ConnectorMessage, WhatsAppCloudConnectorMessage() {

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(WhatsAppCoudBotMessageType.image)

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ 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

3536
abstract class WhatsAppCloudSendBotMessage(val type: WhatsAppCoudBotMessageType) {
3637

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(WhatsAppCoudBotMessageType.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/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)