TP-58233 | Varun | Adding logs for chat messages (#10051)

Co-authored-by: Shivam Goyal <shivam.goyal@navi.com>
This commit is contained in:
Varun Jain
2024-03-08 20:06:55 +05:30
committed by GitHub
parent beaecc1bee
commit 67ae785def
3 changed files with 446 additions and 92 deletions

View File

@@ -14,7 +14,32 @@ import com.google.firebase.firestore.Query
import com.navi.chat.db.utils.convertMapToJson
import com.navi.chat.db.utils.transformFirestoreToWidgetModel
import com.navi.chat.provider.MessageOperation
import com.navi.chat.utils.NaviChatAnalytics
import com.navi.chat.utils.NaviChatAnalytics.Companion.ADDED
import com.navi.chat.utils.NaviChatAnalytics.Companion.ADDING_NEW_MESSAGE
import com.navi.chat.utils.NaviChatAnalytics.Companion.DOCUMENT
import com.navi.chat.utils.NaviChatAnalytics.Companion.DOCUMENT_ADDED_FROM_FIRESTORE
import com.navi.chat.utils.NaviChatAnalytics.Companion.DOCUMENT_TYPE
import com.navi.chat.utils.NaviChatAnalytics.Companion.ERROR_LISTENING_TO_FIRESTORE_CHANGES
import com.navi.chat.utils.NaviChatAnalytics.Companion.LISTENER_ATTACHED_TO_FIRESTORE_SUCCESSFULLY
import com.navi.chat.utils.NaviChatAnalytics.Companion.LISTEN_TO_CONTROLLER_WIDGET
import com.navi.chat.utils.NaviChatAnalytics.Companion.LISTEN_TO_FIRESTORE_CLIENT_CHANGES
import com.navi.chat.utils.NaviChatAnalytics.Companion.LISTEN_TO_FIRESTORE_FOR_MESSAGE_STATUS
import com.navi.chat.utils.NaviChatAnalytics.Companion.LISTEN_TO_FIRESTORE_SERVER_CHANGES
import com.navi.chat.utils.NaviChatAnalytics.Companion.MESSAGE_ADDED_TO_FIRESTORE
import com.navi.chat.utils.NaviChatAnalytics.Companion.MODIFIED
import com.navi.chat.utils.NaviChatAnalytics.Companion.NAVI_CHAT_WIDGET
import com.navi.chat.utils.NaviChatAnalytics.Companion.NOT_ABLE_TO_ATTACH_LISTENER_TO_FIRESTORE
import com.navi.chat.utils.NaviChatAnalytics.Companion.NOT_ABLE_TO_LISTEN_TO_FIRESTORE_CHANGES
import com.navi.chat.utils.NaviChatAnalytics.Companion.PATH
import com.navi.chat.utils.NaviChatAnalytics.Companion.PROCESSING_CONTROLLER_WIDGET
import com.navi.chat.utils.NaviChatAnalytics.Companion.SUCCESS_LISTENING_TO_FIRESTORE_CHANGES
import com.navi.chat.utils.NaviChatAnalytics.Companion.UPDATING_CLIENT_MESSAGE_RECEIPTS
import com.navi.chat.utils.NaviChatAnalytics.Companion.UPDATING_TYPING_STATUS
import com.navi.chat.utils.NaviChatAnalytics.Companion.WRITE_TO_FIRESTORE
import com.navi.chat.utils.SOURCE
import com.navi.chat.utils.TYPING_CUES_PATH_AGENT
import com.navi.common.utils.ERROR
import com.navi.naviwidgets.models.NaviChatWidget
import com.navi.naviwidgets.models.response.*
import com.navi.naviwidgets.utils.NAVI_CHAT_RT_CREATED_AT
@@ -24,6 +49,7 @@ import timber.log.Timber
class ChatFireStoreDatabase {
private var listenerToFirestoreChangesList = ArrayList<ListenerRegistration>()
private val crmEventTracker = NaviChatAnalytics.naviChatAnalytics.CRM()
fun writeToFireStore(
path: String,
@@ -33,8 +59,36 @@ class ChatFireStoreDatabase {
ChatFireStore.getFireStoreReference(path)
.add(naviChatWidget)
.addOnSuccessListener {
crmEventTracker.sendEvent(
MESSAGE_ADDED_TO_FIRESTORE,
hashMapOf(
NAVI_CHAT_WIDGET to naviChatWidget.toString(),
PATH to path,
SOURCE to WRITE_TO_FIRESTORE
)
)
listenerToFirestoreChangesList.add(
it.addSnapshotListener { value, _ ->
it.addSnapshotListener { value, errorEx ->
if (errorEx != null) {
crmEventTracker.sendEvent(
ERROR_LISTENING_TO_FIRESTORE_CHANGES,
hashMapOf(
NAVI_CHAT_WIDGET to naviChatWidget.toString(),
PATH to path,
ERROR to errorEx.toString(),
SOURCE to WRITE_TO_FIRESTORE
)
)
return@addSnapshotListener
}
crmEventTracker.sendEvent(
SUCCESS_LISTENING_TO_FIRESTORE_CHANGES,
hashMapOf(
NAVI_CHAT_WIDGET to naviChatWidget.toString(),
PATH to path,
SOURCE to WRITE_TO_FIRESTORE
)
)
value?.data?.let { data ->
if (
data[NAVI_CHAT_WIDGET_NAME] ==
@@ -44,7 +98,14 @@ class ChatFireStoreDatabase {
transformFirestoreToWidgetModel(data)
)
} else if (isWidgetExcluded(data[NAVI_CHAT_WIDGET_NAME] as String)) {
Timber.d("Adding new msg from writeToFireStore")
crmEventTracker.sendEvent(
ADDING_NEW_MESSAGE,
hashMapOf(
NAVI_CHAT_WIDGET to naviChatWidget.toString(),
PATH to path,
SOURCE to WRITE_TO_FIRESTORE
)
)
messageOperation.addNewMessage(
transformFirestoreToWidgetModel(data)
)
@@ -54,41 +115,86 @@ class ChatFireStoreDatabase {
)
}
.addOnFailureListener {
Timber.e("Not able to add message $naviChatWidget to fire store")
crmEventTracker.sendEvent(
NOT_ABLE_TO_ATTACH_LISTENER_TO_FIRESTORE,
hashMapOf(
NAVI_CHAT_WIDGET to naviChatWidget.toString(),
PATH to path,
ERROR to it.toString(),
SOURCE to WRITE_TO_FIRESTORE
)
)
}
}
fun listenToFirestoreClientChanges(path: String, messageOperation: MessageOperation) {
ChatFireStore.getFireStoreReference(path).get().addOnSuccessListener {
listenerToFirestoreChangesList.add(
ChatFireStore.getFireStoreReference(path).addSnapshotListener { value, errorEx ->
if (errorEx != null) {
return@addSnapshotListener
}
ChatFireStore.getFireStoreReference(path)
.get()
.addOnSuccessListener {
crmEventTracker.sendEvent(
LISTENER_ATTACHED_TO_FIRESTORE_SUCCESSFULLY,
hashMapOf(PATH to path, SOURCE to LISTEN_TO_FIRESTORE_CLIENT_CHANGES)
)
listenerToFirestoreChangesList.add(
ChatFireStore.getFireStoreReference(path).addSnapshotListener { value, errorEx
->
if (errorEx != null) {
crmEventTracker.sendEvent(
ERROR_LISTENING_TO_FIRESTORE_CHANGES,
hashMapOf(
PATH to path,
ERROR to errorEx.toString(),
SOURCE to LISTEN_TO_FIRESTORE_CLIENT_CHANGES
)
)
return@addSnapshotListener
}
crmEventTracker.sendEvent(
SUCCESS_LISTENING_TO_FIRESTORE_CHANGES,
hashMapOf(PATH to path, SOURCE to LISTEN_TO_FIRESTORE_CLIENT_CHANGES)
)
value?.let {
value.documentChanges.forEach { dc ->
when (dc.type) {
DocumentChange.Type.ADDED -> {}
DocumentChange.Type.MODIFIED -> {
if (
(dc.document.data[NAVI_CHAT_WIDGET_NAME] ==
NaviChatMessageWidget.WIDGET_NAME) ||
value?.let {
value.documentChanges.forEach { dc ->
when (dc.type) {
DocumentChange.Type.ADDED -> {}
DocumentChange.Type.MODIFIED -> {
if (
(dc.document.data[NAVI_CHAT_WIDGET_NAME] ==
NaviChatFileAttachmentWidget.WIDGET_NAME)
) {
messageOperation.updateMessageReceipts(
transformFirestoreToWidgetModel(dc.document.data)
)
NaviChatMessageWidget.WIDGET_NAME) ||
(dc.document.data[NAVI_CHAT_WIDGET_NAME] ==
NaviChatFileAttachmentWidget.WIDGET_NAME)
) {
crmEventTracker.sendEvent(
UPDATING_CLIENT_MESSAGE_RECEIPTS,
hashMapOf(
PATH to path,
DOCUMENT to dc.document.data.toString(),
DOCUMENT_TYPE to MODIFIED
)
)
messageOperation.updateMessageReceipts(
transformFirestoreToWidgetModel(dc.document.data)
)
}
}
DocumentChange.Type.REMOVED -> {}
}
DocumentChange.Type.REMOVED -> {}
}
}
}
}
)
}
)
}
.addOnFailureListener {
crmEventTracker.sendEvent(
NOT_ABLE_TO_ATTACH_LISTENER_TO_FIRESTORE,
hashMapOf(
PATH to path,
ERROR to it.toString(),
SOURCE to LISTEN_TO_FIRESTORE_CLIENT_CHANGES
)
)
}
}
fun listenToFirestoreChanges(
@@ -100,6 +206,10 @@ class ChatFireStoreDatabase {
.orderBy(NAVI_CHAT_RT_CREATED_AT, Query.Direction.ASCENDING)
.get()
.addOnSuccessListener {
crmEventTracker.sendEvent(
LISTENER_ATTACHED_TO_FIRESTORE_SUCCESSFULLY,
hashMapOf(PATH to path, SOURCE to LISTEN_TO_FIRESTORE_SERVER_CHANGES)
)
listenerToFirestoreChangesList.add(
if (latestMessageTimeStamp != null) {
Timber.d("Latest timestamp is not null: $latestMessageTimeStamp")
@@ -112,13 +222,37 @@ class ChatFireStoreDatabase {
}
.addSnapshotListener { value, errorEx ->
if (errorEx != null) {
crmEventTracker.sendEvent(
ERROR_LISTENING_TO_FIRESTORE_CHANGES,
hashMapOf(
PATH to path,
ERROR to errorEx.toString(),
SOURCE to LISTEN_TO_FIRESTORE_SERVER_CHANGES
)
)
return@addSnapshotListener
}
crmEventTracker.sendEvent(
SUCCESS_LISTENING_TO_FIRESTORE_CHANGES,
hashMapOf(
PATH to path,
SOURCE to LISTEN_TO_FIRESTORE_SERVER_CHANGES
),
)
value?.let {
value.documentChanges.forEach { dc ->
when (dc.type) {
DocumentChange.Type.ADDED -> {
crmEventTracker.sendEvent(
DOCUMENT_ADDED_FROM_FIRESTORE,
hashMapOf(
PATH to path,
DOCUMENT to dc.document.data.toString(),
DOCUMENT_TYPE to ADDED,
SOURCE to LISTEN_TO_FIRESTORE_SERVER_CHANGES
)
)
messageOperation.updateServerMessageReceipts(
dc.document.reference
)
@@ -148,6 +282,15 @@ class ChatFireStoreDatabase {
dc.document.data[NAVI_CHAT_WIDGET_NAME] ==
NaviChatControllerWidget.WIDGET_NAME
) {
crmEventTracker.sendEvent(
PROCESSING_CONTROLLER_WIDGET,
hashMapOf(
PATH to path,
DOCUMENT to dc.document.data.toString(),
DOCUMENT_TYPE to ADDED,
SOURCE to LISTEN_TO_FIRESTORE_SERVER_CHANGES
)
)
messageOperation.processControllerWidget(
convertMapToJson<NaviChatControllerWidget>(
dc.document.data
@@ -155,8 +298,14 @@ class ChatFireStoreDatabase {
as NaviChatControllerWidget
)
} else {
Timber.d(
"Adding new msg from listenToFirestoreChanges"
crmEventTracker.sendEvent(
ADDING_NEW_MESSAGE,
hashMapOf(
PATH to path,
DOCUMENT to dc.document.data.toString(),
DOCUMENT_TYPE to ADDED,
SOURCE to LISTEN_TO_FIRESTORE_SERVER_CHANGES
)
)
messageOperation.addNewMessage(
transformFirestoreToWidgetModel(
@@ -173,98 +322,205 @@ class ChatFireStoreDatabase {
}
)
}
.addOnFailureListener {
crmEventTracker.sendEvent(
NOT_ABLE_TO_LISTEN_TO_FIRESTORE_CHANGES,
hashMapOf(
PATH to path,
ERROR to it.toString(),
SOURCE to LISTEN_TO_FIRESTORE_SERVER_CHANGES
)
)
}
}
fun listenToControllerWidget(
path: String,
messageOperation: MessageOperation,
) {
ChatFireStore.getFireStoreReference(path).get().addOnSuccessListener {
listenerToFirestoreChangesList.add(
ChatFireStore.getFireStoreReference(path).addSnapshotListener { value, errorEx ->
if (errorEx != null) {
return@addSnapshotListener
}
ChatFireStore.getFireStoreReference(path)
.get()
.addOnSuccessListener {
crmEventTracker.sendEvent(
LISTENER_ATTACHED_TO_FIRESTORE_SUCCESSFULLY,
hashMapOf(PATH to path, SOURCE to LISTEN_TO_CONTROLLER_WIDGET)
)
listenerToFirestoreChangesList.add(
ChatFireStore.getFireStoreReference(path).addSnapshotListener { value, errorEx
->
if (errorEx != null) {
crmEventTracker.sendEvent(
ERROR_LISTENING_TO_FIRESTORE_CHANGES,
hashMapOf(
PATH to path,
ERROR to errorEx.toString(),
SOURCE to LISTEN_TO_CONTROLLER_WIDGET
)
)
return@addSnapshotListener
}
crmEventTracker.sendEvent(
SUCCESS_LISTENING_TO_FIRESTORE_CHANGES,
hashMapOf(PATH to path, SOURCE to LISTEN_TO_CONTROLLER_WIDGET)
)
value?.let {
value.documentChanges.forEach { dc ->
when (dc.type) {
DocumentChange.Type.ADDED -> {
if (
dc.document.data[NAVI_CHAT_WIDGET_NAME] ==
NaviChatControllerWidget.WIDGET_NAME
) {
messageOperation.processControllerWidget(
convertMapToJson<NaviChatControllerWidget>(
dc.document.data
value?.let {
value.documentChanges.forEach { dc ->
when (dc.type) {
DocumentChange.Type.ADDED -> {
if (
dc.document.data[NAVI_CHAT_WIDGET_NAME] ==
NaviChatControllerWidget.WIDGET_NAME
) {
crmEventTracker.sendEvent(
PROCESSING_CONTROLLER_WIDGET,
hashMapOf(
PATH to path,
DOCUMENT to dc.document.data.toString(),
DOCUMENT_TYPE to ADDED,
SOURCE to LISTEN_TO_CONTROLLER_WIDGET
)
)
as NaviChatControllerWidget
)
}
}
DocumentChange.Type.MODIFIED -> {
if (
dc.document.data[NAVI_CHAT_WIDGET_NAME] ==
NaviChatControllerWidget.WIDGET_NAME
) {
messageOperation.processControllerWidget(
convertMapToJson<NaviChatControllerWidget>(
dc.document.data
messageOperation.processControllerWidget(
convertMapToJson<NaviChatControllerWidget>(
dc.document.data
)
as NaviChatControllerWidget
)
as NaviChatControllerWidget
)
}
}
DocumentChange.Type.MODIFIED -> {
if (
dc.document.data[NAVI_CHAT_WIDGET_NAME] ==
NaviChatControllerWidget.WIDGET_NAME
) {
crmEventTracker.sendEvent(
PROCESSING_CONTROLLER_WIDGET,
hashMapOf(
PATH to path,
DOCUMENT to dc.document.data.toString(),
DOCUMENT_TYPE to MODIFIED,
SOURCE to LISTEN_TO_CONTROLLER_WIDGET
)
)
messageOperation.processControllerWidget(
convertMapToJson<NaviChatControllerWidget>(
dc.document.data
)
as NaviChatControllerWidget
)
}
}
DocumentChange.Type.REMOVED -> {}
}
DocumentChange.Type.REMOVED -> {}
}
}
}
}
)
}
)
}
.addOnFailureListener {
crmEventTracker.sendEvent(
NOT_ABLE_TO_ATTACH_LISTENER_TO_FIRESTORE,
hashMapOf(
PATH to path,
ERROR to it.toString(),
SOURCE to LISTEN_TO_CONTROLLER_WIDGET
)
)
}
}
fun listenToFireStoreListenerForMessageStatus(
path: String,
messageOperation: MessageOperation
) {
ChatFireStore.getFireStoreReference(path).get().addOnSuccessListener {
listenerToFirestoreChangesList.add(
ChatFireStore.getFireStoreReference(path).addSnapshotListener { value, errorEx ->
if (errorEx != null) {
return@addSnapshotListener
}
ChatFireStore.getFireStoreReference(path)
.get()
.addOnSuccessListener {
crmEventTracker.sendEvent(
LISTENER_ATTACHED_TO_FIRESTORE_SUCCESSFULLY,
hashMapOf(PATH to path, SOURCE to LISTEN_TO_FIRESTORE_FOR_MESSAGE_STATUS)
)
listenerToFirestoreChangesList.add(
ChatFireStore.getFireStoreReference(path).addSnapshotListener { value, errorEx
->
if (errorEx != null) {
crmEventTracker.sendEvent(
ERROR_LISTENING_TO_FIRESTORE_CHANGES,
hashMapOf(
PATH to path,
ERROR to errorEx.toString(),
SOURCE to LISTEN_TO_FIRESTORE_FOR_MESSAGE_STATUS
)
)
return@addSnapshotListener
}
crmEventTracker.sendEvent(
SUCCESS_LISTENING_TO_FIRESTORE_CHANGES,
hashMapOf(
PATH to path,
SOURCE to LISTEN_TO_FIRESTORE_FOR_MESSAGE_STATUS
)
)
value?.let {
value.documentChanges.forEach { dc ->
when (dc.type) {
DocumentChange.Type.ADDED -> {
if (dc.document.id == TYPING_CUES_PATH_AGENT) {
messageOperation.updateTypingStatus(
convertMapToJson<NaviChatTypingStatusWidget>(
dc.document.data
value?.let {
value.documentChanges.forEach { dc ->
when (dc.type) {
DocumentChange.Type.ADDED -> {
if (dc.document.id == TYPING_CUES_PATH_AGENT) {
crmEventTracker.sendEvent(
UPDATING_TYPING_STATUS,
hashMapOf(
PATH to path,
DOCUMENT to dc.document.data.toString(),
DOCUMENT_TYPE to ADDED,
SOURCE to LISTEN_TO_FIRESTORE_FOR_MESSAGE_STATUS
)
)
as NaviChatTypingStatusWidget
)
}
}
DocumentChange.Type.MODIFIED -> {
if (dc.document.id == TYPING_CUES_PATH_AGENT) {
messageOperation.updateTypingStatus(
convertMapToJson<NaviChatTypingStatusWidget>(
dc.document.data
messageOperation.updateTypingStatus(
convertMapToJson<NaviChatTypingStatusWidget>(
dc.document.data
)
as NaviChatTypingStatusWidget
)
as NaviChatTypingStatusWidget
)
}
}
DocumentChange.Type.MODIFIED -> {
if (dc.document.id == TYPING_CUES_PATH_AGENT) {
crmEventTracker.sendEvent(
UPDATING_TYPING_STATUS,
hashMapOf(
PATH to path,
DOCUMENT to dc.document.data.toString(),
DOCUMENT_TYPE to MODIFIED,
SOURCE to LISTEN_TO_FIRESTORE_FOR_MESSAGE_STATUS
)
)
messageOperation.updateTypingStatus(
convertMapToJson<NaviChatTypingStatusWidget>(
dc.document.data
)
as NaviChatTypingStatusWidget
)
}
}
DocumentChange.Type.REMOVED -> {}
}
DocumentChange.Type.REMOVED -> {}
}
}
}
}
)
}
)
}
.addOnFailureListener {
crmEventTracker.sendEvent(
NOT_ABLE_TO_LISTEN_TO_FIRESTORE_CHANGES,
hashMapOf(
PATH to path,
ERROR to it.toString(),
SOURCE to LISTEN_TO_FIRESTORE_FOR_MESSAGE_STATUS
)
)
}
}
fun removeFireStoreListener() {

View File

@@ -76,13 +76,21 @@ import com.navi.chat.provider.MessageOperation
import com.navi.chat.provider.firestore.FireStoreDataProvider
import com.navi.chat.usecase.ChatAttachmentViewClickedUseCase
import com.navi.chat.utils.*
import com.navi.chat.utils.NaviChatAnalytics.Companion.ADDING_AGENT_OR_CUSTOMER_MESSAGE_TO_CHAT_ADAPTER
import com.navi.chat.utils.NaviChatAnalytics.Companion.ADDING_BOT_MESSAGE_TO_CHAT_ADAPTER
import com.navi.chat.utils.NaviChatAnalytics.Companion.ADDING_NEW_MESSAGE_TO_CHAT_ADAPTER
import com.navi.chat.utils.NaviChatAnalytics.Companion.CHAT_DEEPLINK_CLICK
import com.navi.chat.utils.NaviChatAnalytics.Companion.CHAT_MESSAGE
import com.navi.chat.utils.NaviChatAnalytics.Companion.CHAT_MESSAGE_WIDGET_WITH_RECEIPTS_NOT_NULL
import com.navi.chat.utils.NaviChatAnalytics.Companion.EXISTING_CHAT_TRIGGERED
import com.navi.chat.utils.NaviChatAnalytics.Companion.INSERTING_NEW_MESSAGE_TO_CHAT_ADAPTER
import com.navi.chat.utils.NaviChatAnalytics.Companion.NAVI_CHAT_WIDGET
import com.navi.chat.utils.NaviChatAnalytics.Companion.NETWORK_AVAILABLE_IN_CHAT
import com.navi.chat.utils.NaviChatAnalytics.Companion.NETWORK_UNAVAILABLE_IN_CHAT
import com.navi.chat.utils.NaviChatAnalytics.Companion.NEW_CHAT_TRIGGERED
import com.navi.chat.utils.NaviChatAnalytics.Companion.SEND_BUTTON_CLICK
import com.navi.chat.utils.NaviChatAnalytics.Companion.UPDATE_SERVER_MESSAGE_RECEIPTS
import com.navi.chat.utils.NaviChatAnalytics.Companion.WRITE_USER_MESSAGE_TO_FIRESTORE
import com.navi.chat.viewmodels.AttachmentPickerViewModel
import com.navi.chat.viewmodels.NaviChatSharedViewModel
import com.navi.chat.viewmodels.NaviChatViewModel
@@ -874,6 +882,10 @@ class NaviChatFragment : BaseFragment(), WidgetCallback, MessageOperation, Toolb
readResponse: Boolean = false
) {
if (::chatDataProvider.isInitialized) {
crmEventTracker.sendEvent(
WRITE_USER_MESSAGE_TO_FIRESTORE,
hashMapOf(CONVERSATION_ID to conversationId.toString(), CHAT_MESSAGE to message)
)
chatDataProvider.writeMessage(
formPlainTextNewMessage(
metaData = metaData,
@@ -1126,6 +1138,13 @@ class NaviChatFragment : BaseFragment(), WidgetCallback, MessageOperation, Toolb
doc.get().addOnSuccessListener {
if (it != null && it.data?.containsKey(NAVI_CHAT_RECEIPTS) == false) {
doc.update(updateData)
crmEventTracker.sendEvent(
UPDATE_SERVER_MESSAGE_RECEIPTS,
hashMapOf(
CONVERSATION_ID to conversationId.toString(),
NAVI_CHAT_RECEIPTS to updateData.toString()
)
)
} else {
val receipts = it.data?.get(NAVI_CHAT_RECEIPTS) as? Map<*, *>
if (receipts != null && receipts.containsKey(READ_AUDIT)) {
@@ -1254,8 +1273,23 @@ class NaviChatFragment : BaseFragment(), WidgetCallback, MessageOperation, Toolb
widgetModel is NaviChatMessageWidget &&
widgetModel.receipts != null
) {
crmEventTracker.sendEvent(
CHAT_MESSAGE_WIDGET_WITH_RECEIPTS_NOT_NULL,
hashMapOf(
CONVERSATION_ID to conversationId.toString(),
NAVI_CHAT_WIDGET to widgetModel.toString(),
NAVI_CHAT_RECEIPTS to widgetModel.receipts.toString(),
)
)
return
}
crmEventTracker.sendEvent(
ADDING_NEW_MESSAGE_TO_CHAT_ADAPTER,
hashMapOf(
CONVERSATION_ID to conversationId.toString(),
NAVI_CHAT_WIDGET to widgetModel.toString()
)
)
hideActionItemListIfNotReminder(widgetModel)
@@ -1268,6 +1302,13 @@ class NaviChatFragment : BaseFragment(), WidgetCallback, MessageOperation, Toolb
}
if (widgetModel.senderType.equals(BOT, true)) {
crmEventTracker.sendEvent(
ADDING_BOT_MESSAGE_TO_CHAT_ADAPTER,
hashMapOf(
CONVERSATION_ID to conversationId.toString(),
NAVI_CHAT_WIDGET to widgetModel.toString()
)
)
if (
widgetModel.widgetNameForBaseAdapter != NaviChatConversationStatusWidget.WIDGET_NAME
) {
@@ -1295,6 +1336,13 @@ class NaviChatFragment : BaseFragment(), WidgetCallback, MessageOperation, Toolb
insertItemAtIndexAndSetTimeStamp(0, widgetModel)
}
} else {
crmEventTracker.sendEvent(
ADDING_AGENT_OR_CUSTOMER_MESSAGE_TO_CHAT_ADAPTER,
hashMapOf(
CONVERSATION_ID to conversationId.toString(),
NAVI_CHAT_WIDGET to widgetModel.toString(),
)
)
if (
chatRVAdapter.list.isNotEmpty() &&
chatRVAdapter.list[0] is NaviChatTypingStatusWidget
@@ -1311,6 +1359,13 @@ class NaviChatFragment : BaseFragment(), WidgetCallback, MessageOperation, Toolb
widgetModel: NaviChatWidget,
scrollWithoutDelay: Boolean? = false
) {
crmEventTracker.sendEvent(
INSERTING_NEW_MESSAGE_TO_CHAT_ADAPTER,
hashMapOf(
CONVERSATION_ID to conversationId.toString(),
NAVI_CHAT_WIDGET to widgetModel.toString()
)
)
if (naviChatViewModel.latestMessageTimeStamp != null) {
if (
!naviChatViewModel.getDividerShown() &&
@@ -1328,6 +1383,13 @@ class NaviChatFragment : BaseFragment(), WidgetCallback, MessageOperation, Toolb
private fun addBotMessageListToAdapterAndHideTypingStatus() {
showHideTypingStatus(false)
for (message in botMessageList) {
crmEventTracker.sendEvent(
INSERTING_NEW_MESSAGE_TO_CHAT_ADAPTER,
hashMapOf(
CONVERSATION_ID to conversationId.toString(),
NAVI_CHAT_WIDGET to message.toString()
)
)
chatRVAdapter.insertNewItemAtIndex(0, message)
scrollChatToLatestMessageReceived()
}

View File

@@ -113,6 +113,42 @@ class NaviChatAnalytics private constructor() {
const val FAQ_SEARCHED_WITH_RESULTS = "faq_searched_with_results"
const val FAQ_SEARCHED_WITH_NO_RESULTS = "faq_searched_no_results"
const val FAQ_SEARCH_QUERY_TEXT = "faq_search_query_text"
const val PATH = "path"
const val ERROR = "error"
const val DOCUMENT = "document"
const val DOCUMENT_TYPE = "document_type"
const val ADDED = "added"
const val MODIFIED = "modified"
const val NAVI_CHAT_WIDGET = "navi_chat_widget"
const val WRITE_TO_FIRESTORE = "write_to_firestore"
const val LISTEN_TO_FIRESTORE_SERVER_CHANGES = "listen_to_firestore_server_changes"
const val LISTEN_TO_FIRESTORE_CLIENT_CHANGES = "listen_to_firestore_client_changes"
const val LISTEN_TO_CONTROLLER_WIDGET = "listen_to_controller_widget"
const val LISTEN_TO_FIRESTORE_FOR_MESSAGE_STATUS = "listen_to_firestore_for_message_status"
const val WRITE_USER_MESSAGE_TO_FIRESTORE = "write_user_message_to_firestore"
const val MESSAGE_ADDED_TO_FIRESTORE =
"Message added to Firestore successfully from writeToFireStore"
const val LISTENER_ATTACHED_TO_FIRESTORE_SUCCESSFULLY =
"Listener attached to Firestore successfully"
const val NOT_ABLE_TO_ATTACH_LISTENER_TO_FIRESTORE =
"Not able to attach listener to Firestore"
const val SUCCESS_LISTENING_TO_FIRESTORE_CHANGES = "Success listening to Firestore changes"
const val ERROR_LISTENING_TO_FIRESTORE_CHANGES = "Error listening to Firestore changes"
const val NOT_ABLE_TO_LISTEN_TO_FIRESTORE_CHANGES =
"Not able to listen to Firestore changes"
const val UPDATING_CLIENT_MESSAGE_RECEIPTS = "Updating client message receipts"
const val UPDATING_TYPING_STATUS = "Updating typing status"
const val PROCESSING_CONTROLLER_WIDGET = "Processing controller widget"
const val ADDING_NEW_MESSAGE = "Adding new message"
const val DOCUMENT_ADDED_FROM_FIRESTORE = "Document added from Firestore"
const val UPDATE_SERVER_MESSAGE_RECEIPTS = "Update server message receipts"
const val CHAT_MESSAGE_WIDGET_WITH_RECEIPTS_NOT_NULL =
"Chat message widget with receipts not null"
const val ADDING_NEW_MESSAGE_TO_CHAT_ADAPTER = "Adding new message to chat adapter"
const val ADDING_BOT_MESSAGE_TO_CHAT_ADAPTER = "Adding bot message to chat adapter"
const val ADDING_AGENT_OR_CUSTOMER_MESSAGE_TO_CHAT_ADAPTER =
"Adding agent or customer message to chat adapter"
const val INSERTING_NEW_MESSAGE_TO_CHAT_ADAPTER = "Inserting new message to chat adapter"
val naviChatAnalytics: NaviChatAnalytics by lazy { Holder.INSTANCE }
}