letschatty 0.4.340__tar.gz → 0.4.341__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {letschatty-0.4.340 → letschatty-0.4.341}/PKG-INFO +1 -1
- {letschatty-0.4.340 → letschatty-0.4.341}/pyproject.toml +1 -1
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/chat/chat.py +11 -2
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/chain_of_thought_in_chat.py +5 -3
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/chat_assets.py +3 -2
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/sale.py +3 -3
- letschatty-0.4.341/src/letschatty/models/company/integrations/shopify/shopify_product_sync_status.py +42 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/chat/chat_service.py +20 -10
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/validators/analytics_validator.py +11 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/LICENSE +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/README.md +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/ai_microservices/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/ai_microservices/expected_output.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/ai_microservices/lambda_events.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/ai_microservices/lambda_invokation_types.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/ai_microservices/n8n_ai_agents_payload.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/ai_microservices/openai_payloads.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/base.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/chat_based_events/ai_agent_chat.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/chat_based_events/business_area.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/chat_based_events/chat_based_event.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/chat_based_events/chat_context.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/chat_based_events/chat_funnel.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/chat_based_events/chat_status.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/chat_based_events/contact_point.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/chat_based_events/continuous_conversation.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/chat_based_events/highlight.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/chat_based_events/message.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/chat_based_events/messages_intent_context.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/chat_based_events/product_chat.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/chat_based_events/quality_scoring.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/chat_based_events/sale.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/chat_based_events/tag_chat.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/chat_based_events/workflow.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/company_based_events/asset_events.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/company_based_events/company_events.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/company_based_events/user_events.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/event_type_to_classes.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/event_types.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/metrics/__init_.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/metrics/daily_contact_points.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/metrics/daily_new_chats.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/metrics/daily_sent_templates_grouped.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/metrics/sales_roadmap.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/metrics/sent_templates.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/smart_messages/friendly_code_for_source.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/smart_messages/topic.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/smart_messages/topic_message.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/google_ad_utm_source.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/helpers.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/other_source.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/pure_ad.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/pure_ad_utm_source.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/source_base.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/template_source.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/topic_default_source.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/utm_source.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/utms/referer_info.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/utms/utm_query_params.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/whatsapp_default_source.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/auth/jwt.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/base_models/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/base_models/ai_agent_component.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/base_models/chatty_asset_model.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/base_models/helpers.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/base_models/related_asset_usage_example.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/base_models/singleton.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/base_models/update_model_interface.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/base_models/validate_timestamps_and_id.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/channels/channel.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/chat/assets_assigned_to_chat.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/chat/chat_status_modifications.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/chat/chat_with_assets.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/chat/client.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/chat/continuous_conversation.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/chat/filter_parameters.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/chat/flow_link_state.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/chat/highlight.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/chat/preview.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/chat/quality_scoring.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/chat/scheduled_messages.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/chat/temporary_chat.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/chat/time_left.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/CRM/business_area.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/CRM/funnel.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/ai_agent_message_draft.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/ai_agents_decision_output.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/chat_example.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/chat_example_test.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/chatty_ai_agent.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/chatty_ai_agent_config_for_automation.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/chatty_ai_agent_in_chat.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/chatty_ai_mode.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/context_item.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/faq.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/follow_up_strategy.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/get_chat_with_prompt_response.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/knowleadge_base_components.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/n8n_agents_info.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/n8n_schema_incoming_message_output.json +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/n8n_schema_smart_follow_up_output.json +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/pre_qualify_config.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/statuses.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/assignment/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/assignment/assignment_assets.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/automation.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/chatty_fast_answers/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/chatty_fast_answers/chatty_fast_answer.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/company_assets.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/contact_point.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/filter_criteria.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/flow.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/launch/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/launch/launch.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/launch/scheduled_communication.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/launch/subscription.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/media/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/media/file.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/product.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/tag.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/users/agent_chats_snapshot.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/users/user.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/users/user_asset_permission.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/workflow_execution.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/company_chats_snapshot.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/company_messaging_settgins.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/conversation_topic.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/empresa.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/form_field.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/insight.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/notifications/notification.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/copilot/links.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/data_base/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/data_base/collection_interface.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/data_base/mongo_connection.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/execution/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/execution/execution.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/execution/executor.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/forms/company/auth0_company_registration_form.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/forms/company/meta_register.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/audio.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/base/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/base/chatty_message_json.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/base/message_base.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/base/message_draft.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/button.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/central_notification.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/contact.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/document.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/image.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/interactive.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/location.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/reaction.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_audio.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_button.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_central.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_contacts.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_document.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_image.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_interactive.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_location.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_media.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_reaction.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_sticker.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_text.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_video.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/chatty_context/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/chatty_context/chatty_context.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/chatty_referal/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/schema/chatty_referal/chatty_referal.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/sticker.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/text.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/chatty_messages/video.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/message_templates/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/message_templates/chatty_template_campaign.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/message_templates/filled_data_from_frontend.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/message_templates/payload_for_sending_template.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/message_templates/raw_meta_template.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/message_templates/recipient_of_template_campaign.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/message_templates/required_for_frontend_templates.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/meta_base_notification_json.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/meta_error_json.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/meta_inexistent_json.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/meta_message_json.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/meta_status_json.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/meta_unknown_json.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/schema/content_messages/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/schema/content_messages/button_content.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/schema/content_messages/contacts_content.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/schema/content_messages/interactive_content.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/schema/content_messages/location_content.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/schema/content_messages/multimedia_content.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/schema/content_messages/order_content.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/schema/content_messages/reaction_content.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/schema/content_messages/system_content.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/schema/content_messages/text_content.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/schema/values/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/schema/values/value_errors.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/schema/values/value_messages.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/messages/meta_message_model/schema/values/value_statuses.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/custom_exceptions/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/custom_exceptions/custom_exceptions.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/definitions.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/types/CRUD_operations.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/types/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/types/channel_types.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/types/chats_actions.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/types/country.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/types/deletion_type.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/types/executor_types.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/types/identifier.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/types/message_status_types.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/types/message_types.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/types/phone_number.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/types/serializer_type.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/types/source_types.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/utils/types/typealiases.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/ai_agents/context_builder_v2.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/ai_agents/cot_follow_up_examples.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/ai_agents/followup_schema.json +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/ai_agents/smart_follow_up_context_builder_v2.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/ai_agents/smart_follow_up_service_v2.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/ai_agents/tool_descriptions/assign_chat_to_ai_agent_itself.json +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/ai_agents/tool_descriptions/human_handover.json +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/ai_agents/tool_descriptions.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/ai_components_service.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/chat/chat_extractors.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/chat/client_service.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/chat/conversation_topics_service.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/chatty_assets/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/chatty_assets/asset_service.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/chatty_assets/base_container.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/chatty_assets/base_container_with_collection.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/chatty_assets/documentation_diagram.png +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/chatty_assets/readme.md +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/concurrent/concurrent.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/contact_points/contact_point_service.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/continuous_conversation_service/continuous_conversation_helper.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/events/events_manager.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/analytics/contact_point_factory.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/analytics/events_factory.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/analytics/smart_messages/topics_factory.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/analytics/sources/helpers.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/analytics/sources/source_factory.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/chats/chat_factory.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/chatty_fast_answers/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/chatty_fast_answers/chatty_fast_answers_factory.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/clients/client_factory.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/company/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/company/empresa_factory.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/lambda_ai_orchestrartor/lambda_events_factory.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/messages/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/messages/central_notification_factory.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/messages/chatty_message_factory.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/messages/child_db_message_factory.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/messages/child_request_message.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/messages/from_template_hot_fix.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/messages/message_templates/template_factory.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/messages/message_templates/test.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/meta_notifications/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/meta_notifications/meta_notification_factory.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/factories/product_factory.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/filter_criteria_service.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/messages_helpers/__init__.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/messages_helpers/get_caption_or_body_or_preview.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/scheduled_messages_service/scheduled_messages_helpers.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/template_campaigns/template_campaign_service.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/users/agent_service.py +0 -0
- {letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/users/user_factory.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "letschatty"
|
|
3
|
-
version = "0.4.
|
|
3
|
+
version = "0.4.341" # Or whichever is your latest version
|
|
4
4
|
description = "Models and custom classes to work across the Chattyverse"
|
|
5
5
|
authors = ["Axel <axel@letschatty.com>"]
|
|
6
6
|
license = "MIT"
|
|
@@ -269,7 +269,17 @@ class Chat(CompanyAssetModel):
|
|
|
269
269
|
@property
|
|
270
270
|
def bought_product_ids(self) -> List[StrObjectId]:
|
|
271
271
|
"""Get all sale ids in the chat"""
|
|
272
|
-
|
|
272
|
+
product_ids: List[StrObjectId] = []
|
|
273
|
+
for sale in self.sales:
|
|
274
|
+
sale_product_ids = getattr(sale, "product_ids", None)
|
|
275
|
+
if sale_product_ids:
|
|
276
|
+
for product_id in sale_product_ids:
|
|
277
|
+
if product_id not in product_ids:
|
|
278
|
+
product_ids.append(product_id)
|
|
279
|
+
elif sale.product_id:
|
|
280
|
+
if sale.product_id not in product_ids:
|
|
281
|
+
product_ids.append(sale.product_id)
|
|
282
|
+
return product_ids
|
|
273
283
|
|
|
274
284
|
@property
|
|
275
285
|
def products(self) -> List[AssignedAssetToChat]:
|
|
@@ -366,4 +376,3 @@ class Chat(CompanyAssetModel):
|
|
|
366
376
|
dump["last_message"] = self.last_message.model_dump_json(serializer=SerializerType.DATABASE) if self.last_message else None
|
|
367
377
|
dump["flow_states"] = [flow_state.model_dump_json(serializer=SerializerType.DATABASE) for flow_state in self.flow_states]
|
|
368
378
|
return dump
|
|
369
|
-
|
|
@@ -84,12 +84,13 @@ class ChainOfThoughtInChatPreview(ChattyAssetPreview):
|
|
|
84
84
|
# trigger_id removed - trigger info is in: incoming_message_ids for user_message,
|
|
85
85
|
# triggered_by_user_id for manual_trigger, smart_follow_up_id for follow_up
|
|
86
86
|
chain_of_thought : Optional[str] = Field(default=None, description="The chain of thought")
|
|
87
|
+
confidence: Optional[int] = Field(default=None, ge=0, le=100, description="Confidence 0-100")
|
|
87
88
|
status: Optional[ChainOfThoughtInChatStatus] = Field(default=None, description="The status of the chain of thought")
|
|
88
89
|
name: str = Field(description="A title for the chain of thought")
|
|
89
90
|
|
|
90
91
|
@classmethod
|
|
91
92
|
def get_projection(cls) -> dict[str, Any]:
|
|
92
|
-
return super().get_projection() | {"chat_id": 1, "trigger": 1, "chain_of_thought": 1, "name": 1, "status": 1}
|
|
93
|
+
return super().get_projection() | {"chat_id": 1, "trigger": 1, "chain_of_thought": 1, "confidence": 1, "name": 1, "status": 1}
|
|
93
94
|
|
|
94
95
|
@classmethod
|
|
95
96
|
def from_dict(cls, data: dict) -> 'ChainOfThoughtInChatPreview':
|
|
@@ -103,6 +104,7 @@ class ChainOfThoughtInChatPreview(ChattyAssetPreview):
|
|
|
103
104
|
chat_id=asset.chat_id,
|
|
104
105
|
trigger=asset.trigger,
|
|
105
106
|
chain_of_thought=asset.chain_of_thought,
|
|
107
|
+
confidence=asset.confidence,
|
|
106
108
|
status=asset.status,
|
|
107
109
|
company_id=asset.company_id,
|
|
108
110
|
created_at=asset.created_at,
|
|
@@ -121,6 +123,7 @@ class ChainOfThoughtInChat(CompanyAssetModel):
|
|
|
121
123
|
chatty_ai_agent_id : StrObjectId = Field(description="The chatty ai agent id")
|
|
122
124
|
chatty_ai_agent : Dict[str, Any] = Field(description="The chatty ai agent at the moment of triggering the chain of thought", exclude=True,default_factory=dict)
|
|
123
125
|
chain_of_thought : Optional[str] = Field(default=None, description="The chain of thought")
|
|
126
|
+
confidence: Optional[int] = Field(default=None, ge=0, le=100, description="Confidence 0-100")
|
|
124
127
|
name: str = Field(description="A title for the chain of thought", alias="title")
|
|
125
128
|
preview_class: ClassVar[Type[ChattyAssetPreview]] = ChainOfThoughtInChatPreview
|
|
126
129
|
|
|
@@ -128,5 +131,4 @@ class ChainOfThoughtInChat(CompanyAssetModel):
|
|
|
128
131
|
if self.chain_of_thought is None:
|
|
129
132
|
self.chain_of_thought = cot
|
|
130
133
|
else:
|
|
131
|
-
self.chain_of_thought += f"\n{cot}"
|
|
132
|
-
|
|
134
|
+
self.chain_of_thought += f"\n{cot}"
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/chat_assets.py
RENAMED
|
@@ -10,7 +10,7 @@ from datetime import datetime
|
|
|
10
10
|
from zoneinfo import ZoneInfo
|
|
11
11
|
from bson import ObjectId
|
|
12
12
|
import json
|
|
13
|
-
from typing import Dict, Any, Optional
|
|
13
|
+
from typing import Dict, Any, Optional, List
|
|
14
14
|
from letschatty.models.utils.types.serializer_type import SerializerType
|
|
15
15
|
from letschatty.models.company.assets.ai_agents_v2.chatty_ai_mode import ChattyAIMode
|
|
16
16
|
|
|
@@ -67,7 +67,8 @@ class AssignedAssetToChat(BaseModel):
|
|
|
67
67
|
|
|
68
68
|
|
|
69
69
|
class SaleAssignedToChat(AssignedAssetToChat):
|
|
70
|
-
product_id: StrObjectId = Field(
|
|
70
|
+
product_id: Optional[StrObjectId] = Field(default=None)
|
|
71
|
+
product_ids: List[StrObjectId] = Field(default_factory=list)
|
|
71
72
|
|
|
72
73
|
class ContactPointAssignedToChat(AssignedAssetToChat):
|
|
73
74
|
source_id: StrObjectId = Field(frozen=True)
|
|
@@ -5,7 +5,7 @@ from ...utils.types.identifier import StrObjectId
|
|
|
5
5
|
|
|
6
6
|
class Sale(CompanyAssetModel):
|
|
7
7
|
chat_id: StrObjectId
|
|
8
|
-
product_id: StrObjectId
|
|
8
|
+
product_id: Optional[StrObjectId] = Field(default=None)
|
|
9
9
|
quantity: int
|
|
10
10
|
total_amount: float
|
|
11
11
|
currency: str
|
|
@@ -16,7 +16,7 @@ class Sale(CompanyAssetModel):
|
|
|
16
16
|
creator_id: StrObjectId
|
|
17
17
|
|
|
18
18
|
class SaleRequest(BaseModel):
|
|
19
|
-
product_id: StrObjectId
|
|
19
|
+
product_id: Optional[StrObjectId] = Field(default=None)
|
|
20
20
|
quantity: int
|
|
21
21
|
creator_id: StrObjectId
|
|
22
22
|
total_amount: float
|
|
@@ -36,4 +36,4 @@ class SaleRequest(BaseModel):
|
|
|
36
36
|
"paid_amount": 100,
|
|
37
37
|
"installments": 1,
|
|
38
38
|
"details": {}
|
|
39
|
-
}
|
|
39
|
+
}
|
letschatty-0.4.341/src/letschatty/models/company/integrations/shopify/shopify_product_sync_status.py
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
from typing import Optional
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from zoneinfo import ZoneInfo
|
|
5
|
+
from pydantic import Field
|
|
6
|
+
from letschatty.models.base_models import CompanyAssetModel
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ShopifyProductSyncStatusEnum(str, Enum):
|
|
10
|
+
"""Status enum for Shopify product sync operations"""
|
|
11
|
+
STARTED = "started"
|
|
12
|
+
RUNNING = "running"
|
|
13
|
+
FINISHED = "finished"
|
|
14
|
+
FAILED = "failed"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ShopifyProductSyncStatus(CompanyAssetModel):
|
|
18
|
+
"""Tracks the status and results of Shopify product synchronization operations.
|
|
19
|
+
|
|
20
|
+
Each sync operation creates a new document in the collection with its own status,
|
|
21
|
+
timestamps, and product counts.
|
|
22
|
+
"""
|
|
23
|
+
name: str = Field(
|
|
24
|
+
default="",
|
|
25
|
+
description="Name/identifier for this sync operation"
|
|
26
|
+
)
|
|
27
|
+
status: ShopifyProductSyncStatusEnum = Field(
|
|
28
|
+
default=ShopifyProductSyncStatusEnum.STARTED,
|
|
29
|
+
description="Current sync status"
|
|
30
|
+
)
|
|
31
|
+
finished_at: Optional[datetime] = Field(
|
|
32
|
+
default=None,
|
|
33
|
+
description="Timestamp when sync finished"
|
|
34
|
+
)
|
|
35
|
+
products_created: int = Field(
|
|
36
|
+
default=0,
|
|
37
|
+
description="Number of products created during sync"
|
|
38
|
+
)
|
|
39
|
+
products_updated: int = Field(
|
|
40
|
+
default=0,
|
|
41
|
+
description="Number of products updated during sync"
|
|
42
|
+
)
|
|
@@ -285,36 +285,46 @@ class ChatService:
|
|
|
285
285
|
return next((state for state in chat.flow_states if state.is_smart_follow_up), None)
|
|
286
286
|
|
|
287
287
|
@staticmethod
|
|
288
|
-
def create_sale(
|
|
288
|
+
def create_sale(
|
|
289
|
+
chat: Chat,
|
|
290
|
+
execution_context: ExecutionContext,
|
|
291
|
+
sale: Sale,
|
|
292
|
+
product: Optional[Product],
|
|
293
|
+
product_ids: Optional[List[StrObjectId]] = None,
|
|
294
|
+
product_label: Optional[str] = None
|
|
295
|
+
) -> SaleAssignedToChat:
|
|
289
296
|
"""
|
|
290
297
|
Add a sale to the chat.
|
|
291
298
|
"""
|
|
292
299
|
if next((sale for sale in chat.client.sales if sale.asset_id == sale.id), None) is not None:
|
|
293
300
|
raise AssetAlreadyAssigned(f"Sale with id {sale.id} already assigned to chat {chat.id}")
|
|
301
|
+
label = product_label or (product.name if product else "multiples productos")
|
|
302
|
+
assigned_product_ids = product_ids or ([product.id] if product else [])
|
|
294
303
|
assigned_asset = SaleAssignedToChat(
|
|
295
304
|
asset_type=ChatAssetType.SALE,
|
|
296
305
|
asset_id=sale.id,
|
|
297
306
|
assigned_at=sale.created_at,
|
|
298
307
|
assigned_by=execution_context.executor.id,
|
|
299
|
-
product_id=product.id
|
|
308
|
+
product_id=product.id if product else None,
|
|
309
|
+
product_ids=assigned_product_ids
|
|
300
310
|
)
|
|
301
311
|
execution_context.set_event_time(assigned_asset.assigned_at)
|
|
302
312
|
bisect.insort(chat.client.sales, assigned_asset)
|
|
303
|
-
ChatService.create_highlight(chat=chat, execution_context=execution_context, highlight_data=HighlightRequestData(title=f"🛍️ Venta de {
|
|
304
|
-
ChatService.add_central_notification_from_text(chat=chat, body=f"Venta de {
|
|
313
|
+
ChatService.create_highlight(chat=chat, execution_context=execution_context, highlight_data=HighlightRequestData(title=f"🛍️ Venta de {label}", description=f"Venta de {label} creada por {execution_context.executor.name}", starred=False, subtype=MessageSubtype.SALE_ADDED))
|
|
314
|
+
ChatService.add_central_notification_from_text(chat=chat, body=f"Venta de {label} agregada al chat {chat.id} por {execution_context.executor.name}", subtype=MessageSubtype.SALE_ADDED)
|
|
305
315
|
return assigned_asset
|
|
306
316
|
|
|
307
317
|
@staticmethod
|
|
308
|
-
def update_sale(chat
|
|
318
|
+
def update_sale(chat: Chat, execution_context: ExecutionContext, sale: Sale, product_label: str) -> Sale:
|
|
309
319
|
"""
|
|
310
320
|
Update a sale for the chat.
|
|
311
321
|
"""
|
|
312
|
-
ChatService.create_highlight(chat=chat, execution_context=execution_context, highlight_data=HighlightRequestData(title=f"🛍️ Venta actualizada de {
|
|
313
|
-
ChatService.add_central_notification_from_text(chat=chat, body=f"Venta de {
|
|
322
|
+
ChatService.create_highlight(chat=chat, execution_context=execution_context, highlight_data=HighlightRequestData(title=f"🛍️ Venta actualizada de {product_label}", description=f"Venta de {product_label} actualizada por {execution_context.executor.name}", starred=False, subtype=MessageSubtype.SALE_UPDATED))
|
|
323
|
+
ChatService.add_central_notification_from_text(chat=chat, body=f"Venta de {product_label} actualizada en el chat {chat.id} por {execution_context.executor.name}", subtype=MessageSubtype.SALE_UPDATED)
|
|
314
324
|
return sale
|
|
315
325
|
|
|
316
326
|
@staticmethod
|
|
317
|
-
def delete_sale(chat
|
|
327
|
+
def delete_sale(chat: Chat, execution_context: ExecutionContext, sale_id: StrObjectId, product_label: str) -> SaleAssignedToChat:
|
|
318
328
|
"""
|
|
319
329
|
Logically remove a sale from the chat.
|
|
320
330
|
"""
|
|
@@ -322,8 +332,8 @@ class ChatService:
|
|
|
322
332
|
assigned_asset_to_remove = next(sale for sale in chat.client.sales if sale.asset_id == sale_id)
|
|
323
333
|
chat.client.sales.remove(assigned_asset_to_remove)
|
|
324
334
|
execution_context.set_event_time(datetime.now(tz=ZoneInfo("UTC")))
|
|
325
|
-
ChatService.create_highlight(chat=chat, execution_context=execution_context, highlight_data=HighlightRequestData(title=f"🛍️ Venta eliminada de {
|
|
326
|
-
ChatService.add_central_notification_from_text(chat=chat, body=f"Venta de {
|
|
335
|
+
ChatService.create_highlight(chat=chat, execution_context=execution_context, highlight_data=HighlightRequestData(title=f"🛍️ Venta eliminada de {product_label}", description=f"Venta de {product_label} eliminada por {execution_context.executor.name}", starred=False, subtype=MessageSubtype.SALE_DELETED))
|
|
336
|
+
ChatService.add_central_notification_from_text(chat=chat, body=f"Venta de {product_label} eliminada del chat {chat.id} por {execution_context.executor.name}", subtype=MessageSubtype.SALE_DELETED)
|
|
327
337
|
return assigned_asset_to_remove
|
|
328
338
|
except StopIteration:
|
|
329
339
|
raise NotFoundError(message=f"Sale with id {sale_id} not found in chat {chat.id}")
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/services/validators/analytics_validator.py
RENAMED
|
@@ -10,6 +10,10 @@ if TYPE_CHECKING:
|
|
|
10
10
|
|
|
11
11
|
class SourcesAndTopicsValidator:
|
|
12
12
|
"""This class provides methods to validate sources and topics."""
|
|
13
|
+
@staticmethod
|
|
14
|
+
def normalize_source_name(name: str) -> str:
|
|
15
|
+
return name.strip().lower()
|
|
16
|
+
|
|
13
17
|
@staticmethod
|
|
14
18
|
def source_validation_check(sources : Dict[str,Source], topics : Dict[str,Topic], source : Source, existing_source_id : str | None = None) -> None:
|
|
15
19
|
"""Checks validation of a source against other sources and topics."""
|
|
@@ -28,9 +32,16 @@ class SourcesAndTopicsValidator:
|
|
|
28
32
|
"""This method checks that no duplicated source is created.
|
|
29
33
|
For Pure Ads, it checks that the ad_id is unique and doesn't exist already.
|
|
30
34
|
For Other Sources, it checks that exact trigger doesn't exist already. """
|
|
35
|
+
normalized_name = SourcesAndTopicsValidator.normalize_source_name(source.name)
|
|
36
|
+
existing_source_name = None
|
|
37
|
+
if existing_source_id and existing_source_id in sources:
|
|
38
|
+
existing_source_name = SourcesAndTopicsValidator.normalize_source_name(sources[existing_source_id].name)
|
|
39
|
+
should_check_name = existing_source_name is None or normalized_name != existing_source_name
|
|
31
40
|
for source_id, source_to_check in sources.items():
|
|
32
41
|
if source_id == existing_source_id:
|
|
33
42
|
continue
|
|
43
|
+
if should_check_name and SourcesAndTopicsValidator.normalize_source_name(source_to_check.name) == normalized_name:
|
|
44
|
+
raise ConflictedSource(f":warning: *Conflict while adding source: Name already exists* \n New source '{source.name}' \n- Id {source.id} \n Existing source '{source_to_check.name}' \n- Id {source_to_check.id}", conflicting_source_id=source_to_check.id)
|
|
34
45
|
if source == source_to_check: #type: ignore
|
|
35
46
|
if isinstance(source, OtherSource):
|
|
36
47
|
raise ConflictedSource(f":warning: *Conflict while adding source: Trigger already exists* \n New source '{source.name}' \n- Id {source.id} \n- Trigger {source.trigger[:30]} \n Existing source '{source_to_check.name}' \n- Id {source_to_check.id} \n- Trigger '{source_to_check.trigger[:30]}'", conflicting_source_id=source_to_check.id)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/ai_microservices/__init__.py
RENAMED
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/ai_microservices/expected_output.py
RENAMED
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/ai_microservices/lambda_events.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/ai_microservices/openai_payloads.py
RENAMED
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/events/event_types.py
RENAMED
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/metrics/__init_.py
RENAMED
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/metrics/daily_new_chats.py
RENAMED
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/metrics/sales_roadmap.py
RENAMED
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/metrics/sent_templates.py
RENAMED
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/smart_messages/topic.py
RENAMED
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/helpers.py
RENAMED
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/other_source.py
RENAMED
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/pure_ad.py
RENAMED
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/source_base.py
RENAMED
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/template_source.py
RENAMED
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/analytics/sources/utm_source.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/base_models/ai_agent_component.py
RENAMED
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/base_models/chatty_asset_model.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/chat/assets_assigned_to_chat.py
RENAMED
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/chat/chat_status_modifications.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/chat/continuous_conversation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/CRM/business_area.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/ai_agents_v2/faq.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/automation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/company_assets.py
RENAMED
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/contact_point.py
RENAMED
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/filter_criteria.py
RENAMED
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/launch/__init__.py
RENAMED
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/launch/launch.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/media/__init__.py
RENAMED
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/media/file.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/users/user.py
RENAMED
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/assets/workflow_execution.py
RENAMED
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/company_chats_snapshot.py
RENAMED
|
File without changes
|
|
File without changes
|
{letschatty-0.4.340 → letschatty-0.4.341}/src/letschatty/models/company/conversation_topic.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|