chatgraph 0.6.0__py3-none-any.whl → 0.6.1__py3-none-any.whl

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.

Potentially problematic release.


This version of chatgraph might be problematic. Click here for more details.

chatgraph/__init__.py CHANGED
@@ -12,7 +12,7 @@ from .types.end_types import (
12
12
  from .types.message_types import Message, Button
13
13
  from .types.route import Route
14
14
  from .types.background_task import BackgroundTask
15
- from .types.image import ImageData, SendImage
15
+ from .types.image import ImageData, ImageMessage
16
16
 
17
17
  __all__ = [
18
18
  "ChatbotApp",
@@ -32,5 +32,5 @@ __all__ = [
32
32
  "Button",
33
33
  "BackgroundTask",
34
34
  "ImageData",
35
- "SendImage",
35
+ "ImageMessage",
36
36
  ]
@@ -74,13 +74,26 @@ class RouterServiceClient:
74
74
 
75
75
  try:
76
76
  response = self.send_message_stub.SendImage(request)
77
- if not response.status:
77
+ if not response.status and response.message != "arquivo não encontrado":
78
78
  print(f"Erro ao chamar SendImage: {response.message}")
79
+ elif response.message == "arquivo não encontrado":
80
+ print("Arquivo não encontrado, Carregando arquivo...")
79
81
  return response
80
82
  except grpc.RpcError as e:
81
83
  print(f"Erro ao chamar SendImage: {e}")
82
84
  return None
83
85
 
86
+ def upload_file(self, file_data):
87
+ request = chatbot_pb2.UploadFileRequest(**file_data)
88
+ try:
89
+ response = self.send_message_stub.UploadFile(request)
90
+ if not response.status:
91
+ print(f"Erro ao chamar UploadFile: {response.message}")
92
+ return response
93
+ except grpc.RpcError as e:
94
+ print(f"Erro ao chamar UploadFile: {e}")
95
+ return None
96
+
84
97
  def transfer_to_human(self, transfer_request_data):
85
98
  request = chatbot_pb2.TransferToHumanRequest(**transfer_request_data)
86
99
  try:
chatgraph/pb/router.proto CHANGED
@@ -7,6 +7,7 @@ option go_package = "./chatbot";
7
7
  ///// Serviços de Estado do Usuário /////
8
8
  service UserStateService {
9
9
  rpc InsertUpdateUserState(UserState) returns (RequestStatus);
10
+ rpc SetRoute(RouteRequest) returns (RequestStatus);
10
11
  rpc DeleteUserState(ChatID) returns (RequestStatus);
11
12
  rpc GetUserState(ChatID) returns (UserState);
12
13
  rpc GetAllUserStates(Void) returns (UserStateList);
@@ -60,6 +61,10 @@ message UserStateList {
60
61
  repeated UserState user_states = 1;
61
62
  }
62
63
 
64
+ message RouteRequest {
65
+ ChatID chat_id = 1;
66
+ string route = 2;
67
+ }
63
68
  ///// Mensagens para Serviços de Mensagens /////
64
69
  message TextMessage {
65
70
  string type = 1;
@@ -89,10 +94,11 @@ message FileMessage {
89
94
  }
90
95
 
91
96
  message UploadFileRequest {
92
- string file_id = 1;
93
- string file_url = 2;
94
- string file_type = 3;
95
- bytes file_content = 4;
97
+ string file_url = 1;
98
+ string file_type = 2;
99
+ string file_extension = 3;
100
+ string expiration = 4;
101
+ bytes file_content = 5;
96
102
  }
97
103
 
98
104
  ///// Mensagens para Serviços de Transfer /////
@@ -105,7 +111,8 @@ message TransferToHumanRequest{
105
111
  message TransferToMenuRequest{
106
112
  ChatID chat_id = 1;
107
113
  string menu = 2;
108
- string user_message = 3;
114
+ string route = 3;
115
+ string user_message = 4;
109
116
  }
110
117
 
111
118
  message TabulationName{
@@ -9,73 +9,71 @@ from google.protobuf import descriptor_pool as _descriptor_pool
9
9
  from google.protobuf import runtime_version as _runtime_version
10
10
  from google.protobuf import symbol_database as _symbol_database
11
11
  from google.protobuf.internal import builder as _builder
12
+
12
13
  _runtime_version.ValidateProtobufRuntimeVersion(
13
- _runtime_version.Domain.PUBLIC,
14
- 6,
15
- 31,
16
- 0,
17
- '',
18
- 'router.proto'
14
+ _runtime_version.Domain.PUBLIC, 6, 31, 0, "", "router.proto"
19
15
  )
20
16
  # @@protoc_insertion_point(imports)
21
17
 
22
18
  _sym_db = _symbol_database.Default()
23
19
 
24
20
 
25
-
26
-
27
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0crouter.proto\x12\x07\x63hatbot\"\x06\n\x04Void\"0\n\rRequestStatus\x12\x0e\n\x06status\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\"-\n\x06\x43hatID\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x12\n\ncompany_id\x18\x02 \x01(\t\"q\n\tUserState\x12 \n\x07\x63hat_id\x18\x01 \x01(\x0b\x32\x0f.chatbot.ChatID\x12\x0c\n\x04menu\x18\x02 \x01(\t\x12\r\n\x05route\x18\x03 \x01(\t\x12\x10\n\x08protocol\x18\x04 \x01(\t\x12\x13\n\x0bobservation\x18\x05 \x01(\t\"8\n\rUserStateList\x12\'\n\x0buser_states\x18\x01 \x03(\x0b\x32\x12.chatbot.UserState\"j\n\x0bTextMessage\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x10\n\x08\x66ilename\x18\x03 \x01(\t\x12\r\n\x05title\x18\x04 \x01(\t\x12\x0e\n\x06\x64\x65tail\x18\x05 \x01(\t\x12\x0f\n\x07\x63\x61ption\x18\x06 \x01(\t\"5\n\x06\x42utton\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\r\n\x05title\x18\x02 \x01(\t\x12\x0e\n\x06\x64\x65tail\x18\x03 \x01(\t\"\x9d\x01\n\x07Message\x12 \n\x07\x63hat_id\x18\x01 \x01(\x0b\x32\x0f.chatbot.ChatID\x12%\n\x07message\x18\x02 \x01(\x0b\x32\x14.chatbot.TextMessage\x12 \n\x07\x62uttons\x18\x03 \x03(\x0b\x32\x0f.chatbot.Button\x12\'\n\x0e\x64isplay_button\x18\x04 \x01(\x0b\x32\x0f.chatbot.Button\"A\n\x0b\x46ileMessage\x12!\n\x07message\x18\x01 \x01(\x0b\x32\x10.chatbot.Message\x12\x0f\n\x07\x66ile_id\x18\x02 \x01(\t\"_\n\x11UploadFileRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\x12\x10\n\x08\x66ile_url\x18\x02 \x01(\t\x12\x11\n\tfile_type\x18\x03 \x01(\t\x12\x14\n\x0c\x66ile_content\x18\x04 \x01(\x0c\"d\n\x16TransferToHumanRequest\x12 \n\x07\x63hat_id\x18\x01 \x01(\x0b\x32\x0f.chatbot.ChatID\x12\x13\n\x0b\x63\x61mpaign_id\x18\x02 \x01(\t\x12\x13\n\x0bobservation\x18\x03 \x01(\t\"]\n\x15TransferToMenuRequest\x12 \n\x07\x63hat_id\x18\x01 \x01(\x0b\x32\x0f.chatbot.ChatID\x12\x0c\n\x04menu\x18\x02 \x01(\t\x12\x14\n\x0cuser_message\x18\x03 \x01(\t\"\x1e\n\x0eTabulationName\x12\x0c\n\x04name\x18\x01 \x01(\t\"B\n\x11TabulationDetails\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0blast_update\x18\x03 \x01(\t\"B\n\x0fTabulationsList\x12/\n\x0btabulations\x18\x01 \x03(\x0b\x32\x1a.chatbot.TabulationDetails\"^\n\x0e\x45ndChatRequest\x12 \n\x07\x63hat_id\x18\x01 \x01(\x0b\x32\x0f.chatbot.ChatID\x12\x15\n\rtabulation_id\x18\x02 \x01(\t\x12\x13\n\x0bobservation\x18\x03 \x01(\t\"\x1c\n\x0c\x43\x61mpaignName\x12\x0c\n\x04name\x18\x01 \x01(\t\"@\n\x0f\x43\x61mpaignDetails\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0blast_update\x18\x03 \x01(\t\"<\n\rCampaignsList\x12+\n\tcampaigns\x18\x01 \x03(\x0b\x32\x18.chatbot.CampaignDetails2\x83\x02\n\x10UserStateService\x12\x43\n\x15InsertUpdateUserState\x12\x12.chatbot.UserState\x1a\x16.chatbot.RequestStatus\x12:\n\x0f\x44\x65leteUserState\x12\x0f.chatbot.ChatID\x1a\x16.chatbot.RequestStatus\x12\x33\n\x0cGetUserState\x12\x0f.chatbot.ChatID\x1a\x12.chatbot.UserState\x12\x39\n\x10GetAllUserStates\x12\r.chatbot.Void\x1a\x16.chatbot.UserStateList2\xfd\x01\n\x0bSendMessage\x12\x37\n\x0bSendMessage\x12\x10.chatbot.Message\x1a\x16.chatbot.RequestStatus\x12\x39\n\tSendImage\x12\x14.chatbot.FileMessage\x1a\x16.chatbot.RequestStatus\x12\x38\n\x08SendFile\x12\x14.chatbot.FileMessage\x1a\x16.chatbot.RequestStatus\x12@\n\nUploadFile\x12\x1a.chatbot.UploadFileRequest\x1a\x16.chatbot.RequestStatus2\x9c\x02\n\x08Transfer\x12\x38\n\x0fGetAllCampaigns\x12\r.chatbot.Void\x1a\x16.chatbot.CampaignsList\x12@\n\rGetCampaignID\x12\x15.chatbot.CampaignName\x1a\x18.chatbot.CampaignDetails\x12J\n\x0fTransferToHuman\x12\x1f.chatbot.TransferToHumanRequest\x1a\x16.chatbot.RequestStatus\x12H\n\x0eTransferToMenu\x12\x1e.chatbot.TransferToMenuRequest\x1a\x16.chatbot.RequestStatus2\xcb\x01\n\x07\x45ndChat\x12<\n\x11GetAllTabulations\x12\r.chatbot.Void\x1a\x18.chatbot.TabulationsList\x12\x46\n\x0fGetTabulationID\x12\x17.chatbot.TabulationName\x1a\x1a.chatbot.TabulationDetails\x12:\n\x07\x45ndChat\x12\x17.chatbot.EndChatRequest\x1a\x16.chatbot.RequestStatusB\x0bZ\t./chatbotb\x06proto3')
21
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
22
+ b'\n\x0crouter.proto\x12\x07\x63hatbot"\x06\n\x04Void"0\n\rRequestStatus\x12\x0e\n\x06status\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t"-\n\x06\x43hatID\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x12\n\ncompany_id\x18\x02 \x01(\t"q\n\tUserState\x12 \n\x07\x63hat_id\x18\x01 \x01(\x0b\x32\x0f.chatbot.ChatID\x12\x0c\n\x04menu\x18\x02 \x01(\t\x12\r\n\x05route\x18\x03 \x01(\t\x12\x10\n\x08protocol\x18\x04 \x01(\t\x12\x13\n\x0bobservation\x18\x05 \x01(\t"8\n\rUserStateList\x12\'\n\x0buser_states\x18\x01 \x03(\x0b\x32\x12.chatbot.UserState"?\n\x0cRouteRequest\x12 \n\x07\x63hat_id\x18\x01 \x01(\x0b\x32\x0f.chatbot.ChatID\x12\r\n\x05route\x18\x02 \x01(\t"j\n\x0bTextMessage\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x10\n\x08\x66ilename\x18\x03 \x01(\t\x12\r\n\x05title\x18\x04 \x01(\t\x12\x0e\n\x06\x64\x65tail\x18\x05 \x01(\t\x12\x0f\n\x07\x63\x61ption\x18\x06 \x01(\t"5\n\x06\x42utton\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\r\n\x05title\x18\x02 \x01(\t\x12\x0e\n\x06\x64\x65tail\x18\x03 \x01(\t"\x9d\x01\n\x07Message\x12 \n\x07\x63hat_id\x18\x01 \x01(\x0b\x32\x0f.chatbot.ChatID\x12%\n\x07message\x18\x02 \x01(\x0b\x32\x14.chatbot.TextMessage\x12 \n\x07\x62uttons\x18\x03 \x03(\x0b\x32\x0f.chatbot.Button\x12\'\n\x0e\x64isplay_button\x18\x04 \x01(\x0b\x32\x0f.chatbot.Button"A\n\x0b\x46ileMessage\x12!\n\x07message\x18\x01 \x01(\x0b\x32\x10.chatbot.Message\x12\x0f\n\x07\x66ile_id\x18\x02 \x01(\t"z\n\x11UploadFileRequest\x12\x10\n\x08\x66ile_url\x18\x01 \x01(\t\x12\x11\n\tfile_type\x18\x02 \x01(\t\x12\x16\n\x0e\x66ile_extension\x18\x03 \x01(\t\x12\x12\n\nexpiration\x18\x04 \x01(\t\x12\x14\n\x0c\x66ile_content\x18\x05 \x01(\x0c"d\n\x16TransferToHumanRequest\x12 \n\x07\x63hat_id\x18\x01 \x01(\x0b\x32\x0f.chatbot.ChatID\x12\x13\n\x0b\x63\x61mpaign_id\x18\x02 \x01(\t\x12\x13\n\x0bobservation\x18\x03 \x01(\t"l\n\x15TransferToMenuRequest\x12 \n\x07\x63hat_id\x18\x01 \x01(\x0b\x32\x0f.chatbot.ChatID\x12\x0c\n\x04menu\x18\x02 \x01(\t\x12\r\n\x05route\x18\x03 \x01(\t\x12\x14\n\x0cuser_message\x18\x04 \x01(\t"\x1e\n\x0eTabulationName\x12\x0c\n\x04name\x18\x01 \x01(\t"B\n\x11TabulationDetails\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0blast_update\x18\x03 \x01(\t"B\n\x0fTabulationsList\x12/\n\x0btabulations\x18\x01 \x03(\x0b\x32\x1a.chatbot.TabulationDetails"^\n\x0e\x45ndChatRequest\x12 \n\x07\x63hat_id\x18\x01 \x01(\x0b\x32\x0f.chatbot.ChatID\x12\x15\n\rtabulation_id\x18\x02 \x01(\t\x12\x13\n\x0bobservation\x18\x03 \x01(\t"\x1c\n\x0c\x43\x61mpaignName\x12\x0c\n\x04name\x18\x01 \x01(\t"@\n\x0f\x43\x61mpaignDetails\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0blast_update\x18\x03 \x01(\t"<\n\rCampaignsList\x12+\n\tcampaigns\x18\x01 \x03(\x0b\x32\x18.chatbot.CampaignDetails2\xbe\x02\n\x10UserStateService\x12\x43\n\x15InsertUpdateUserState\x12\x12.chatbot.UserState\x1a\x16.chatbot.RequestStatus\x12\x39\n\x08SetRoute\x12\x15.chatbot.RouteRequest\x1a\x16.chatbot.RequestStatus\x12:\n\x0f\x44\x65leteUserState\x12\x0f.chatbot.ChatID\x1a\x16.chatbot.RequestStatus\x12\x33\n\x0cGetUserState\x12\x0f.chatbot.ChatID\x1a\x12.chatbot.UserState\x12\x39\n\x10GetAllUserStates\x12\r.chatbot.Void\x1a\x16.chatbot.UserStateList2\xfd\x01\n\x0bSendMessage\x12\x37\n\x0bSendMessage\x12\x10.chatbot.Message\x1a\x16.chatbot.RequestStatus\x12\x39\n\tSendImage\x12\x14.chatbot.FileMessage\x1a\x16.chatbot.RequestStatus\x12\x38\n\x08SendFile\x12\x14.chatbot.FileMessage\x1a\x16.chatbot.RequestStatus\x12@\n\nUploadFile\x12\x1a.chatbot.UploadFileRequest\x1a\x16.chatbot.RequestStatus2\x9c\x02\n\x08Transfer\x12\x38\n\x0fGetAllCampaigns\x12\r.chatbot.Void\x1a\x16.chatbot.CampaignsList\x12@\n\rGetCampaignID\x12\x15.chatbot.CampaignName\x1a\x18.chatbot.CampaignDetails\x12J\n\x0fTransferToHuman\x12\x1f.chatbot.TransferToHumanRequest\x1a\x16.chatbot.RequestStatus\x12H\n\x0eTransferToMenu\x12\x1e.chatbot.TransferToMenuRequest\x1a\x16.chatbot.RequestStatus2\xcb\x01\n\x07\x45ndChat\x12<\n\x11GetAllTabulations\x12\r.chatbot.Void\x1a\x18.chatbot.TabulationsList\x12\x46\n\x0fGetTabulationID\x12\x17.chatbot.TabulationName\x1a\x1a.chatbot.TabulationDetails\x12:\n\x07\x45ndChat\x12\x17.chatbot.EndChatRequest\x1a\x16.chatbot.RequestStatusB\x0bZ\t./chatbotb\x06proto3'
23
+ )
28
24
 
29
25
  _globals = globals()
30
26
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
- _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'router_pb2', _globals)
27
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "router_pb2", _globals)
32
28
  if not _descriptor._USE_C_DESCRIPTORS:
33
- _globals['DESCRIPTOR']._loaded_options = None
34
- _globals['DESCRIPTOR']._serialized_options = b'Z\t./chatbot'
35
- _globals['_VOID']._serialized_start=25
36
- _globals['_VOID']._serialized_end=31
37
- _globals['_REQUESTSTATUS']._serialized_start=33
38
- _globals['_REQUESTSTATUS']._serialized_end=81
39
- _globals['_CHATID']._serialized_start=83
40
- _globals['_CHATID']._serialized_end=128
41
- _globals['_USERSTATE']._serialized_start=130
42
- _globals['_USERSTATE']._serialized_end=243
43
- _globals['_USERSTATELIST']._serialized_start=245
44
- _globals['_USERSTATELIST']._serialized_end=301
45
- _globals['_TEXTMESSAGE']._serialized_start=303
46
- _globals['_TEXTMESSAGE']._serialized_end=409
47
- _globals['_BUTTON']._serialized_start=411
48
- _globals['_BUTTON']._serialized_end=464
49
- _globals['_MESSAGE']._serialized_start=467
50
- _globals['_MESSAGE']._serialized_end=624
51
- _globals['_FILEMESSAGE']._serialized_start=626
52
- _globals['_FILEMESSAGE']._serialized_end=691
53
- _globals['_UPLOADFILEREQUEST']._serialized_start=693
54
- _globals['_UPLOADFILEREQUEST']._serialized_end=788
55
- _globals['_TRANSFERTOHUMANREQUEST']._serialized_start=790
56
- _globals['_TRANSFERTOHUMANREQUEST']._serialized_end=890
57
- _globals['_TRANSFERTOMENUREQUEST']._serialized_start=892
58
- _globals['_TRANSFERTOMENUREQUEST']._serialized_end=985
59
- _globals['_TABULATIONNAME']._serialized_start=987
60
- _globals['_TABULATIONNAME']._serialized_end=1017
61
- _globals['_TABULATIONDETAILS']._serialized_start=1019
62
- _globals['_TABULATIONDETAILS']._serialized_end=1085
63
- _globals['_TABULATIONSLIST']._serialized_start=1087
64
- _globals['_TABULATIONSLIST']._serialized_end=1153
65
- _globals['_ENDCHATREQUEST']._serialized_start=1155
66
- _globals['_ENDCHATREQUEST']._serialized_end=1249
67
- _globals['_CAMPAIGNNAME']._serialized_start=1251
68
- _globals['_CAMPAIGNNAME']._serialized_end=1279
69
- _globals['_CAMPAIGNDETAILS']._serialized_start=1281
70
- _globals['_CAMPAIGNDETAILS']._serialized_end=1345
71
- _globals['_CAMPAIGNSLIST']._serialized_start=1347
72
- _globals['_CAMPAIGNSLIST']._serialized_end=1407
73
- _globals['_USERSTATESERVICE']._serialized_start=1410
74
- _globals['_USERSTATESERVICE']._serialized_end=1669
75
- _globals['_SENDMESSAGE']._serialized_start=1672
76
- _globals['_SENDMESSAGE']._serialized_end=1925
77
- _globals['_TRANSFER']._serialized_start=1928
78
- _globals['_TRANSFER']._serialized_end=2212
79
- _globals['_ENDCHAT']._serialized_start=2215
80
- _globals['_ENDCHAT']._serialized_end=2418
29
+ _globals["DESCRIPTOR"]._loaded_options = None
30
+ _globals["DESCRIPTOR"]._serialized_options = b"Z\t./chatbot"
31
+ _globals["_VOID"]._serialized_start = 25
32
+ _globals["_VOID"]._serialized_end = 31
33
+ _globals["_REQUESTSTATUS"]._serialized_start = 33
34
+ _globals["_REQUESTSTATUS"]._serialized_end = 81
35
+ _globals["_CHATID"]._serialized_start = 83
36
+ _globals["_CHATID"]._serialized_end = 128
37
+ _globals["_USERSTATE"]._serialized_start = 130
38
+ _globals["_USERSTATE"]._serialized_end = 243
39
+ _globals["_USERSTATELIST"]._serialized_start = 245
40
+ _globals["_USERSTATELIST"]._serialized_end = 301
41
+ _globals["_ROUTEREQUEST"]._serialized_start = 303
42
+ _globals["_ROUTEREQUEST"]._serialized_end = 366
43
+ _globals["_TEXTMESSAGE"]._serialized_start = 368
44
+ _globals["_TEXTMESSAGE"]._serialized_end = 474
45
+ _globals["_BUTTON"]._serialized_start = 476
46
+ _globals["_BUTTON"]._serialized_end = 529
47
+ _globals["_MESSAGE"]._serialized_start = 532
48
+ _globals["_MESSAGE"]._serialized_end = 689
49
+ _globals["_FILEMESSAGE"]._serialized_start = 691
50
+ _globals["_FILEMESSAGE"]._serialized_end = 756
51
+ _globals["_UPLOADFILEREQUEST"]._serialized_start = 758
52
+ _globals["_UPLOADFILEREQUEST"]._serialized_end = 880
53
+ _globals["_TRANSFERTOHUMANREQUEST"]._serialized_start = 882
54
+ _globals["_TRANSFERTOHUMANREQUEST"]._serialized_end = 982
55
+ _globals["_TRANSFERTOMENUREQUEST"]._serialized_start = 984
56
+ _globals["_TRANSFERTOMENUREQUEST"]._serialized_end = 1092
57
+ _globals["_TABULATIONNAME"]._serialized_start = 1094
58
+ _globals["_TABULATIONNAME"]._serialized_end = 1124
59
+ _globals["_TABULATIONDETAILS"]._serialized_start = 1126
60
+ _globals["_TABULATIONDETAILS"]._serialized_end = 1192
61
+ _globals["_TABULATIONSLIST"]._serialized_start = 1194
62
+ _globals["_TABULATIONSLIST"]._serialized_end = 1260
63
+ _globals["_ENDCHATREQUEST"]._serialized_start = 1262
64
+ _globals["_ENDCHATREQUEST"]._serialized_end = 1356
65
+ _globals["_CAMPAIGNNAME"]._serialized_start = 1358
66
+ _globals["_CAMPAIGNNAME"]._serialized_end = 1386
67
+ _globals["_CAMPAIGNDETAILS"]._serialized_start = 1388
68
+ _globals["_CAMPAIGNDETAILS"]._serialized_end = 1452
69
+ _globals["_CAMPAIGNSLIST"]._serialized_start = 1454
70
+ _globals["_CAMPAIGNSLIST"]._serialized_end = 1514
71
+ _globals["_USERSTATESERVICE"]._serialized_start = 1517
72
+ _globals["_USERSTATESERVICE"]._serialized_end = 1835
73
+ _globals["_SENDMESSAGE"]._serialized_start = 1838
74
+ _globals["_SENDMESSAGE"]._serialized_end = 2091
75
+ _globals["_TRANSFER"]._serialized_start = 2094
76
+ _globals["_TRANSFER"]._serialized_end = 2378
77
+ _globals["_ENDCHAT"]._serialized_start = 2381
78
+ _globals["_ENDCHAT"]._serialized_end = 2584
81
79
  # @@protoc_insertion_point(module_scope)
@@ -43,6 +43,12 @@ class UserStateServiceStub(object):
43
43
  response_deserializer=router__pb2.RequestStatus.FromString,
44
44
  _registered_method=True,
45
45
  )
46
+ self.SetRoute = channel.unary_unary(
47
+ "/chatbot.UserStateService/SetRoute",
48
+ request_serializer=router__pb2.RouteRequest.SerializeToString,
49
+ response_deserializer=router__pb2.RequestStatus.FromString,
50
+ _registered_method=True,
51
+ )
46
52
  self.DeleteUserState = channel.unary_unary(
47
53
  "/chatbot.UserStateService/DeleteUserState",
48
54
  request_serializer=router__pb2.ChatID.SerializeToString,
@@ -72,6 +78,12 @@ class UserStateServiceServicer(object):
72
78
  context.set_details("Method not implemented!")
73
79
  raise NotImplementedError("Method not implemented!")
74
80
 
81
+ def SetRoute(self, request, context):
82
+ """Missing associated documentation comment in .proto file."""
83
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
84
+ context.set_details("Method not implemented!")
85
+ raise NotImplementedError("Method not implemented!")
86
+
75
87
  def DeleteUserState(self, request, context):
76
88
  """Missing associated documentation comment in .proto file."""
77
89
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -98,6 +110,11 @@ def add_UserStateServiceServicer_to_server(servicer, server):
98
110
  request_deserializer=router__pb2.UserState.FromString,
99
111
  response_serializer=router__pb2.RequestStatus.SerializeToString,
100
112
  ),
113
+ "SetRoute": grpc.unary_unary_rpc_method_handler(
114
+ servicer.SetRoute,
115
+ request_deserializer=router__pb2.RouteRequest.FromString,
116
+ response_serializer=router__pb2.RequestStatus.SerializeToString,
117
+ ),
101
118
  "DeleteUserState": grpc.unary_unary_rpc_method_handler(
102
119
  servicer.DeleteUserState,
103
120
  request_deserializer=router__pb2.ChatID.FromString,
@@ -157,6 +174,36 @@ class UserStateService(object):
157
174
  _registered_method=True,
158
175
  )
159
176
 
177
+ @staticmethod
178
+ def SetRoute(
179
+ request,
180
+ target,
181
+ options=(),
182
+ channel_credentials=None,
183
+ call_credentials=None,
184
+ insecure=False,
185
+ compression=None,
186
+ wait_for_ready=None,
187
+ timeout=None,
188
+ metadata=None,
189
+ ):
190
+ return grpc.experimental.unary_unary(
191
+ request,
192
+ target,
193
+ "/chatbot.UserStateService/SetRoute",
194
+ router__pb2.RouteRequest.SerializeToString,
195
+ router__pb2.RequestStatus.FromString,
196
+ options,
197
+ channel_credentials,
198
+ insecure,
199
+ call_credentials,
200
+ compression,
201
+ wait_for_ready,
202
+ timeout,
203
+ metadata,
204
+ _registered_method=True,
205
+ )
206
+
160
207
  @staticmethod
161
208
  def DeleteUserState(
162
209
  request,
chatgraph/types/image.py CHANGED
@@ -1,27 +1,77 @@
1
+ from datetime import datetime, timedelta
1
2
  import hashlib
2
3
  import base64
3
4
  from chatgraph.types.message_types import Message
4
5
 
5
6
 
6
7
  class ImageData:
7
- def __init__(self, url: str, image_bytes: bytes = None):
8
- if not url and not image_bytes:
9
- raise ValueError("URL or image bytes must be provided.")
8
+ """
9
+ Representa dados de uma imagem, seja por URL ou arquivo local. Caso fornecido um url e um caminho de arquivo, o url será utilizado.
10
+ Atributos:
11
+ type (str): Tipo de imagem, "link" para URL ou "file" para arquivo local.
12
+ url (str): URL da imagem, se aplicável.
13
+ image_path (str): Caminho do arquivo de imagem, se aplicável.
14
+ expiration (int): Tempo de expiração em minutos, 0 para sem expiração.
15
+ """
10
16
 
17
+ def __init__(self, *, url: str = None, image_path: str = None, expiration: int = 0):
18
+
19
+ if not url and not image_path:
20
+ raise ValueError("URL or image path must be provided.")
21
+
22
+ self.type = "link" if url else "file"
11
23
  self.url = url
12
- self.image_bytes = image_bytes
24
+ self.expiration = expiration
25
+
26
+ self.image_bytes = None
27
+ self.file_extension = None
28
+ if self.type == "file":
29
+ if not image_path:
30
+ raise ValueError("Image path must be provided for file type.")
31
+ self.file_extension = image_path.split(".")[-1]
32
+ with open(image_path, "rb") as f:
33
+ self.image_bytes = f.read()
13
34
 
14
35
  # Create hash of image bytes if available, otherwise use URL
15
- hash_input = image_bytes if image_bytes else url.encode("utf-8")
36
+ hash_input = self.image_bytes if self.image_bytes else url.encode("utf-8")
16
37
 
17
38
  # Create SHA-256 hash and encode in base64
18
39
  self.image_id = base64.b64encode(hashlib.sha256(hash_input).digest()).decode(
19
40
  "utf-8"
20
41
  )
21
42
 
43
+ def get_upload_dict(self):
44
+ dict_data = {}
45
+ if self.expiration > 0:
46
+ now = datetime.now()
47
+ expiration_time = now + timedelta(minutes=self.expiration)
48
+ dict_data["expiration"] = expiration_time.strftime("%Y-%m-%d %H:%M:%S")
49
+
50
+ if self.type == "file":
51
+ dict_data["file_type"] = self.type
52
+ dict_data["file_content"] = self.image_bytes
53
+ dict_data["file_extension"] = self.file_extension
54
+ else:
55
+ dict_data["file_type"] = self.type
56
+ dict_data["file_url"] = self.url
57
+
58
+ return dict_data
22
59
 
23
- class SendImage:
24
- def __init__(self, image: ImageData, message: Message):
60
+ def get_dict(self):
61
+ dict_data = {
62
+ "image_id": self.image_id,
63
+ "file_type": self.type,
64
+ }
65
+ if self.type == "file":
66
+ dict_data["file_content"] = self.image_bytes
67
+ dict_data["file_extension"] = self.file_extension
68
+ else:
69
+ dict_data["file_url"] = self.url
70
+ return dict_data
71
+
72
+
73
+ class ImageMessage:
74
+ def __init__(self, image: ImageData, message: Message = None):
25
75
  if not isinstance(image, ImageData):
26
76
  raise TypeError("Expected an instance of ImageData.")
27
77
 
@@ -30,6 +80,12 @@ class SendImage:
30
80
  self.message = message
31
81
 
32
82
  def to_dict(self):
83
+ if not self.message:
84
+ return {
85
+ "file_id": self.image.image_id,
86
+ "message": {},
87
+ }
88
+
33
89
  return {
34
90
  "file_id": self.image.image_id,
35
91
  "message": self.message.to_dict(),
@@ -1,5 +1,5 @@
1
1
  from chatgraph.gRPC.gRPCCall import RouterServiceClient
2
- from chatgraph.types.image import ImageData, SendImage
2
+ from chatgraph.types.image import ImageData, ImageMessage
3
3
  from chatgraph.types.message_types import Message, Button, MessageTypes, messageTypes
4
4
  from typing import Optional
5
5
  from datetime import datetime
@@ -176,25 +176,37 @@ class UserCall:
176
176
  )
177
177
 
178
178
  if isinstance(message, ImageData):
179
- message = SendImage(
179
+ message = ImageMessage(
180
180
  image=message,
181
- message=Message(type="message", detail=""),
182
181
  )
183
182
 
184
183
  if isinstance(message, Message):
185
184
  self.__send(message)
186
- elif isinstance(message, SendImage):
185
+ elif isinstance(message, ImageMessage):
187
186
  self.__send_image(message)
188
187
  else:
189
188
  raise ValueError("Tipo de mensagem inválido.")
190
189
 
191
- def __send_image(self, message: SendImage) -> None:
190
+ def __upload_file(self, image: ImageData) -> None:
191
+ dict_image = image.get_upload_dict()
192
+ response = self.__router_client.upload_file(dict_image)
193
+
194
+ if not response.status:
195
+ raise ValueError("Erro ao fazer upload do arquivo.")
196
+ else:
197
+ print("Arquivo enviado com sucesso.")
198
+
199
+ def __send_image(self, message: ImageMessage) -> None:
192
200
  dict_message = message.to_dict()
193
201
  dict_message["message"]["chat_id"] = self.__user_state.chatID.to_dict()
194
202
  response = self.__router_client.send_image(dict_message)
195
203
 
196
- if not response.status:
204
+ if not response.status and response.message != "arquivo não encontrado":
197
205
  raise ValueError("Erro ao enviar imagem.")
206
+ elif response.message == "arquivo não encontrado":
207
+ self.__upload_file(message.image)
208
+ print("tentando enviar imagem novamente...")
209
+ self.__send_image(message)
198
210
 
199
211
  def __send(self, message: Message) -> None:
200
212
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: chatgraph
3
- Version: 0.6.0
3
+ Version: 0.6.1
4
4
  Summary: A user-friendly chatbot library
5
5
  Home-page: https://github.com/irissonnlima/chatgraph
6
6
  License: MIT
@@ -1,23 +1,23 @@
1
- chatgraph/__init__.py,sha256=ENRmvWkLHfwErug_flNYgbTa4MUMrIzMqGeaFSlSNhM,929
1
+ chatgraph/__init__.py,sha256=cQk87BOUYKvOjgCkS5Vexy9EYeLOeuQn6vR1vXx1Akc,935
2
2
  chatgraph/auth/credentials.py,sha256=xsMEpLQnc66novPjL6upocMcnUnvFJ7yxINzUenkxmc,2388
3
3
  chatgraph/bot/chatbot_model.py,sha256=wLVXehmHEWItRwvl6J8HM96lC69FXmqsNG8KqplBboI,7373
4
4
  chatgraph/bot/chatbot_router.py,sha256=bVbm9dBoC2OesetXlQJpCrkaiLM3GUro0GrOyCSgreI,2586
5
5
  chatgraph/cli/__init__.py,sha256=tfgYhGoKy1nD4STN4xDh6J4VV55RICk7v1GZmzAg-bM,7413
6
6
  chatgraph/error/chatbot_error.py,sha256=4sEcW8vz0eQk2QDmDygucVM4caHliZW5iH7XJvmLBuk,1897
7
7
  chatgraph/error/route_error.py,sha256=CY8m82ap7-Sr-DXPsolltRW50TqD__5RyXBmNNJCWr8,793
8
- chatgraph/gRPC/gRPCCall.py,sha256=8t3Il6C-x6LqvdiUOZ5absfVwAfEWY7MpEfmEVNMgVY,5776
8
+ chatgraph/gRPC/gRPCCall.py,sha256=KXLhxfX7Mrm48BVuWhTA4xw4T4vghXnljvE37FAxmfQ,6402
9
9
  chatgraph/messages/message_consumer.py,sha256=yHhfLYjtmXQYG44o7SNO6XUaeM4-jH8BpIpPHI-mt8Y,6116
10
- chatgraph/pb/router.proto,sha256=DkP_ESSy2BNO7mMqtXAmFafsz4OLtxj-IoKBzeDout4,3308
11
- chatgraph/pb/router_pb2.py,sha256=ohYjPoSwbYfFJp1JQIvi7F-BlrHkifeIEvF5KzfjD8g,7426
12
- chatgraph/pb/router_pb2_grpc.py,sha256=-khhvX4epBDOqGUhQEhuJSAX_Kh7iJBG3csC18Aa73g,28287
10
+ chatgraph/pb/router.proto,sha256=0FDhMe7GrabeQz7QRJN8PN2mcuRjA5YrGt6TC9GWBak,3488
11
+ chatgraph/pb/router_pb2.py,sha256=eSo0ncYDSG3ryIfWNFzqmG3anx-VmQ2nGXBy1gPnXmQ,7962
12
+ chatgraph/pb/router_pb2_grpc.py,sha256=iaQQsYPc8Tihuf4sWEI48DhvhtCYtDqFBHhwRtE57ps,29886
13
13
  chatgraph/types/background_task.py,sha256=j-Bpd1l_LCDiWukhfG8wNr1F0_GUaOL_J2_BCUnTof4,928
14
14
  chatgraph/types/end_types.py,sha256=ulVq3XybRs-EGcOxw6e1FF6U2p3nbtPfOv3uRe6oJfo,1638
15
- chatgraph/types/image.py,sha256=f2PnUo4Jp24Cn1F4NQhgeoGJPacQiMZCogVowjJwrIE,1097
15
+ chatgraph/types/image.py,sha256=-Lf9ns8_M4jmROoFnHlZiYeScYD_GhF1pgIGLVjsRtI,3216
16
16
  chatgraph/types/message_types.py,sha256=__LOk09Xfvojum0xiq9n157_3QSSLNaDMc02iq8dGpk,3434
17
- chatgraph/types/request_types.py,sha256=stiEDOtFxn22z2bpgYlIcfSM0ellqVbPaJC2noY8mwQ,9957
17
+ chatgraph/types/request_types.py,sha256=pGpJhzk6LGSrREGsG2gC14SoS9DTpUO5w9MzmLUg7PU,10500
18
18
  chatgraph/types/route.py,sha256=FO5INy5UXgicuQ8FKEZKcPv6WS5YH10dPx2OaPu_0sE,2978
19
- chatgraph-0.6.0.dist-info/entry_points.txt,sha256=bO9_Q-PqE5vCNNo6ke_-3j2gHfKQMDGnKDTkNuCdBuA,48
20
- chatgraph-0.6.0.dist-info/LICENSE,sha256=rVJozpRzDlplOpvI8A1GvmfVS0ReYdZvMWc1j2jV0v8,1090
21
- chatgraph-0.6.0.dist-info/METADATA,sha256=L5LzW2b54Jj0GzFDBUOu_95HztOVbtCMB0VVa1ozjsA,12908
22
- chatgraph-0.6.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
23
- chatgraph-0.6.0.dist-info/RECORD,,
19
+ chatgraph-0.6.1.dist-info/entry_points.txt,sha256=bO9_Q-PqE5vCNNo6ke_-3j2gHfKQMDGnKDTkNuCdBuA,48
20
+ chatgraph-0.6.1.dist-info/LICENSE,sha256=rVJozpRzDlplOpvI8A1GvmfVS0ReYdZvMWc1j2jV0v8,1090
21
+ chatgraph-0.6.1.dist-info/METADATA,sha256=avh_0Xu-Mfkhzr4b5v9mKZyJcd2CprrvUIMBnlWWr6g,12908
22
+ chatgraph-0.6.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
23
+ chatgraph-0.6.1.dist-info/RECORD,,