chatgraph 0.2.6__py3-none-any.whl → 0.3.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 +5 -4
- chatgraph/bot/chatbot_model.py +70 -50
- chatgraph/bot/chatbot_router.py +4 -0
- chatgraph/gRPC/gRPCCall.py +125 -0
- chatgraph/messages/{rabbitMQ_message_consumer.py → message_consumer.py} +14 -8
- chatgraph/pb/userstate.proto +29 -0
- chatgraph/pb/userstate_pb2.py +43 -0
- chatgraph/pb/userstate_pb2_grpc.py +226 -0
- chatgraph/pb/voll.proto +32 -0
- chatgraph/pb/voll_pb2.py +43 -0
- chatgraph/pb/voll_pb2_grpc.py +183 -0
- chatgraph/types/message_types.py +182 -9
- chatgraph/types/output_state.py +40 -1
- chatgraph/types/route.py +7 -0
- {chatgraph-0.2.6.dist-info → chatgraph-0.3.1.dist-info}/METADATA +4 -1
- chatgraph-0.3.1.dist-info/RECORD +21 -0
- chatgraph/messages/base_message_consumer.py +0 -40
- chatgraph/messages/base_message_sender.py +0 -23
- chatgraph/messages/rabbitMQ_message_sender.py +0 -79
- chatgraph/messages/test_message_consumer.py +0 -17
- chatgraph/types/user_state.py +0 -98
- chatgraph-0.2.6.dist-info/RECORD +0 -19
- {chatgraph-0.2.6.dist-info → chatgraph-0.3.1.dist-info}/LICENSE +0 -0
- {chatgraph-0.2.6.dist-info → chatgraph-0.3.1.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
|
|
2
|
+
"""Client and server classes corresponding to protobuf-defined services."""
|
|
3
|
+
import grpc
|
|
4
|
+
import warnings
|
|
5
|
+
|
|
6
|
+
import chatgraph.pb.userstate_pb2 as userstate__pb2
|
|
7
|
+
|
|
8
|
+
GRPC_GENERATED_VERSION = '1.66.2'
|
|
9
|
+
GRPC_VERSION = grpc.__version__
|
|
10
|
+
_version_not_supported = False
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
from grpc._utilities import first_version_is_lower
|
|
14
|
+
_version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
|
|
15
|
+
except ImportError:
|
|
16
|
+
_version_not_supported = True
|
|
17
|
+
|
|
18
|
+
if _version_not_supported:
|
|
19
|
+
raise RuntimeError(
|
|
20
|
+
f'The grpc package installed is at version {GRPC_VERSION},'
|
|
21
|
+
+ f' but the generated code in userstate_pb2_grpc.py depends on'
|
|
22
|
+
+ f' grpcio>={GRPC_GENERATED_VERSION}.'
|
|
23
|
+
+ f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
|
|
24
|
+
+ f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class UserStateServiceStub(object):
|
|
29
|
+
"""Missing associated documentation comment in .proto file."""
|
|
30
|
+
|
|
31
|
+
def __init__(self, channel):
|
|
32
|
+
"""Constructor.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
channel: A grpc.Channel.
|
|
36
|
+
"""
|
|
37
|
+
self.SelectUserState = channel.unary_unary(
|
|
38
|
+
'/userstate.UserStateService/SelectUserState',
|
|
39
|
+
request_serializer=userstate__pb2.UserStateId.SerializeToString,
|
|
40
|
+
response_deserializer=userstate__pb2.UserState.FromString,
|
|
41
|
+
_registered_method=True)
|
|
42
|
+
self.InsertUserState = channel.unary_unary(
|
|
43
|
+
'/userstate.UserStateService/InsertUserState',
|
|
44
|
+
request_serializer=userstate__pb2.UserState.SerializeToString,
|
|
45
|
+
response_deserializer=userstate__pb2.RequestStatus.FromString,
|
|
46
|
+
_registered_method=True)
|
|
47
|
+
self.UpdateUserState = channel.unary_unary(
|
|
48
|
+
'/userstate.UserStateService/UpdateUserState',
|
|
49
|
+
request_serializer=userstate__pb2.UserState.SerializeToString,
|
|
50
|
+
response_deserializer=userstate__pb2.RequestStatus.FromString,
|
|
51
|
+
_registered_method=True)
|
|
52
|
+
self.DeleteUserState = channel.unary_unary(
|
|
53
|
+
'/userstate.UserStateService/DeleteUserState',
|
|
54
|
+
request_serializer=userstate__pb2.UserStateId.SerializeToString,
|
|
55
|
+
response_deserializer=userstate__pb2.RequestStatus.FromString,
|
|
56
|
+
_registered_method=True)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class UserStateServiceServicer(object):
|
|
60
|
+
"""Missing associated documentation comment in .proto file."""
|
|
61
|
+
|
|
62
|
+
def SelectUserState(self, request, context):
|
|
63
|
+
"""Missing associated documentation comment in .proto file."""
|
|
64
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
65
|
+
context.set_details('Method not implemented!')
|
|
66
|
+
raise NotImplementedError('Method not implemented!')
|
|
67
|
+
|
|
68
|
+
def InsertUserState(self, request, context):
|
|
69
|
+
"""Missing associated documentation comment in .proto file."""
|
|
70
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
71
|
+
context.set_details('Method not implemented!')
|
|
72
|
+
raise NotImplementedError('Method not implemented!')
|
|
73
|
+
|
|
74
|
+
def UpdateUserState(self, request, context):
|
|
75
|
+
"""Missing associated documentation comment in .proto file."""
|
|
76
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
77
|
+
context.set_details('Method not implemented!')
|
|
78
|
+
raise NotImplementedError('Method not implemented!')
|
|
79
|
+
|
|
80
|
+
def DeleteUserState(self, request, context):
|
|
81
|
+
"""Missing associated documentation comment in .proto file."""
|
|
82
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
83
|
+
context.set_details('Method not implemented!')
|
|
84
|
+
raise NotImplementedError('Method not implemented!')
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def add_UserStateServiceServicer_to_server(servicer, server):
|
|
88
|
+
rpc_method_handlers = {
|
|
89
|
+
'SelectUserState': grpc.unary_unary_rpc_method_handler(
|
|
90
|
+
servicer.SelectUserState,
|
|
91
|
+
request_deserializer=userstate__pb2.UserStateId.FromString,
|
|
92
|
+
response_serializer=userstate__pb2.UserState.SerializeToString,
|
|
93
|
+
),
|
|
94
|
+
'InsertUserState': grpc.unary_unary_rpc_method_handler(
|
|
95
|
+
servicer.InsertUserState,
|
|
96
|
+
request_deserializer=userstate__pb2.UserState.FromString,
|
|
97
|
+
response_serializer=userstate__pb2.RequestStatus.SerializeToString,
|
|
98
|
+
),
|
|
99
|
+
'UpdateUserState': grpc.unary_unary_rpc_method_handler(
|
|
100
|
+
servicer.UpdateUserState,
|
|
101
|
+
request_deserializer=userstate__pb2.UserState.FromString,
|
|
102
|
+
response_serializer=userstate__pb2.RequestStatus.SerializeToString,
|
|
103
|
+
),
|
|
104
|
+
'DeleteUserState': grpc.unary_unary_rpc_method_handler(
|
|
105
|
+
servicer.DeleteUserState,
|
|
106
|
+
request_deserializer=userstate__pb2.UserStateId.FromString,
|
|
107
|
+
response_serializer=userstate__pb2.RequestStatus.SerializeToString,
|
|
108
|
+
),
|
|
109
|
+
}
|
|
110
|
+
generic_handler = grpc.method_handlers_generic_handler(
|
|
111
|
+
'userstate.UserStateService', rpc_method_handlers)
|
|
112
|
+
server.add_generic_rpc_handlers((generic_handler,))
|
|
113
|
+
server.add_registered_method_handlers('userstate.UserStateService', rpc_method_handlers)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
# This class is part of an EXPERIMENTAL API.
|
|
117
|
+
class UserStateService(object):
|
|
118
|
+
"""Missing associated documentation comment in .proto file."""
|
|
119
|
+
|
|
120
|
+
@staticmethod
|
|
121
|
+
def SelectUserState(request,
|
|
122
|
+
target,
|
|
123
|
+
options=(),
|
|
124
|
+
channel_credentials=None,
|
|
125
|
+
call_credentials=None,
|
|
126
|
+
insecure=False,
|
|
127
|
+
compression=None,
|
|
128
|
+
wait_for_ready=None,
|
|
129
|
+
timeout=None,
|
|
130
|
+
metadata=None):
|
|
131
|
+
return grpc.experimental.unary_unary(
|
|
132
|
+
request,
|
|
133
|
+
target,
|
|
134
|
+
'/userstate.UserStateService/SelectUserState',
|
|
135
|
+
userstate__pb2.UserStateId.SerializeToString,
|
|
136
|
+
userstate__pb2.UserState.FromString,
|
|
137
|
+
options,
|
|
138
|
+
channel_credentials,
|
|
139
|
+
insecure,
|
|
140
|
+
call_credentials,
|
|
141
|
+
compression,
|
|
142
|
+
wait_for_ready,
|
|
143
|
+
timeout,
|
|
144
|
+
metadata,
|
|
145
|
+
_registered_method=True)
|
|
146
|
+
|
|
147
|
+
@staticmethod
|
|
148
|
+
def InsertUserState(request,
|
|
149
|
+
target,
|
|
150
|
+
options=(),
|
|
151
|
+
channel_credentials=None,
|
|
152
|
+
call_credentials=None,
|
|
153
|
+
insecure=False,
|
|
154
|
+
compression=None,
|
|
155
|
+
wait_for_ready=None,
|
|
156
|
+
timeout=None,
|
|
157
|
+
metadata=None):
|
|
158
|
+
return grpc.experimental.unary_unary(
|
|
159
|
+
request,
|
|
160
|
+
target,
|
|
161
|
+
'/userstate.UserStateService/InsertUserState',
|
|
162
|
+
userstate__pb2.UserState.SerializeToString,
|
|
163
|
+
userstate__pb2.RequestStatus.FromString,
|
|
164
|
+
options,
|
|
165
|
+
channel_credentials,
|
|
166
|
+
insecure,
|
|
167
|
+
call_credentials,
|
|
168
|
+
compression,
|
|
169
|
+
wait_for_ready,
|
|
170
|
+
timeout,
|
|
171
|
+
metadata,
|
|
172
|
+
_registered_method=True)
|
|
173
|
+
|
|
174
|
+
@staticmethod
|
|
175
|
+
def UpdateUserState(request,
|
|
176
|
+
target,
|
|
177
|
+
options=(),
|
|
178
|
+
channel_credentials=None,
|
|
179
|
+
call_credentials=None,
|
|
180
|
+
insecure=False,
|
|
181
|
+
compression=None,
|
|
182
|
+
wait_for_ready=None,
|
|
183
|
+
timeout=None,
|
|
184
|
+
metadata=None):
|
|
185
|
+
return grpc.experimental.unary_unary(
|
|
186
|
+
request,
|
|
187
|
+
target,
|
|
188
|
+
'/userstate.UserStateService/UpdateUserState',
|
|
189
|
+
userstate__pb2.UserState.SerializeToString,
|
|
190
|
+
userstate__pb2.RequestStatus.FromString,
|
|
191
|
+
options,
|
|
192
|
+
channel_credentials,
|
|
193
|
+
insecure,
|
|
194
|
+
call_credentials,
|
|
195
|
+
compression,
|
|
196
|
+
wait_for_ready,
|
|
197
|
+
timeout,
|
|
198
|
+
metadata,
|
|
199
|
+
_registered_method=True)
|
|
200
|
+
|
|
201
|
+
@staticmethod
|
|
202
|
+
def DeleteUserState(request,
|
|
203
|
+
target,
|
|
204
|
+
options=(),
|
|
205
|
+
channel_credentials=None,
|
|
206
|
+
call_credentials=None,
|
|
207
|
+
insecure=False,
|
|
208
|
+
compression=None,
|
|
209
|
+
wait_for_ready=None,
|
|
210
|
+
timeout=None,
|
|
211
|
+
metadata=None):
|
|
212
|
+
return grpc.experimental.unary_unary(
|
|
213
|
+
request,
|
|
214
|
+
target,
|
|
215
|
+
'/userstate.UserStateService/DeleteUserState',
|
|
216
|
+
userstate__pb2.UserStateId.SerializeToString,
|
|
217
|
+
userstate__pb2.RequestStatus.FromString,
|
|
218
|
+
options,
|
|
219
|
+
channel_credentials,
|
|
220
|
+
insecure,
|
|
221
|
+
call_credentials,
|
|
222
|
+
compression,
|
|
223
|
+
wait_for_ready,
|
|
224
|
+
timeout,
|
|
225
|
+
metadata,
|
|
226
|
+
_registered_method=True)
|
chatgraph/pb/voll.proto
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
package messagevoll;
|
|
4
|
+
|
|
5
|
+
option go_package = "./pb/messagevoll";
|
|
6
|
+
|
|
7
|
+
service MessageService {
|
|
8
|
+
rpc SendButton(MessageRequest) returns (MessageResponse);
|
|
9
|
+
rpc SendList(MessageRequest) returns (MessageResponse);
|
|
10
|
+
rpc SendText(MessageRequest) returns (MessageResponse);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
message MessageRequest {
|
|
14
|
+
string hook_id = 1;
|
|
15
|
+
string enterprise_id = 2;
|
|
16
|
+
string unique_customer_id = 3;
|
|
17
|
+
string message_title = 4;
|
|
18
|
+
string message_text = 5;
|
|
19
|
+
string message_caption = 6;
|
|
20
|
+
string button_title = 7;
|
|
21
|
+
repeated QuickOption options = 8;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
message MessageResponse {
|
|
25
|
+
bool status = 1;
|
|
26
|
+
string message = 2;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
message QuickOption {
|
|
30
|
+
string title = 1;
|
|
31
|
+
string description = 2;
|
|
32
|
+
}
|
chatgraph/pb/voll_pb2.py
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# NO CHECKED-IN PROTOBUF GENCODE
|
|
4
|
+
# source: voll.proto
|
|
5
|
+
# Protobuf Python Version: 5.27.2
|
|
6
|
+
"""Generated protocol buffer code."""
|
|
7
|
+
from google.protobuf import descriptor as _descriptor
|
|
8
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
9
|
+
from google.protobuf import runtime_version as _runtime_version
|
|
10
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
11
|
+
from google.protobuf.internal import builder as _builder
|
|
12
|
+
_runtime_version.ValidateProtobufRuntimeVersion(
|
|
13
|
+
_runtime_version.Domain.PUBLIC,
|
|
14
|
+
5,
|
|
15
|
+
27,
|
|
16
|
+
2,
|
|
17
|
+
'',
|
|
18
|
+
'voll.proto'
|
|
19
|
+
)
|
|
20
|
+
# @@protoc_insertion_point(imports)
|
|
21
|
+
|
|
22
|
+
_sym_db = _symbol_database.Default()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nvoll.proto\x12\x0bmessagevoll\"\xdb\x01\n\x0eMessageRequest\x12\x0f\n\x07hook_id\x18\x01 \x01(\t\x12\x15\n\renterprise_id\x18\x02 \x01(\t\x12\x1a\n\x12unique_customer_id\x18\x03 \x01(\t\x12\x15\n\rmessage_title\x18\x04 \x01(\t\x12\x14\n\x0cmessage_text\x18\x05 \x01(\t\x12\x17\n\x0fmessage_caption\x18\x06 \x01(\t\x12\x14\n\x0c\x62utton_title\x18\x07 \x01(\t\x12)\n\x07options\x18\x08 \x03(\x0b\x32\x18.messagevoll.QuickOption\"2\n\x0fMessageResponse\x12\x0e\n\x06status\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\"1\n\x0bQuickOption\x12\r\n\x05title\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t2\xe7\x01\n\x0eMessageService\x12G\n\nSendButton\x12\x1b.messagevoll.MessageRequest\x1a\x1c.messagevoll.MessageResponse\x12\x45\n\x08SendList\x12\x1b.messagevoll.MessageRequest\x1a\x1c.messagevoll.MessageResponse\x12\x45\n\x08SendText\x12\x1b.messagevoll.MessageRequest\x1a\x1c.messagevoll.MessageResponseB\x12Z\x10./pb/messagevollb\x06proto3')
|
|
28
|
+
|
|
29
|
+
_globals = globals()
|
|
30
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
31
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'voll_pb2', _globals)
|
|
32
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
|
33
|
+
_globals['DESCRIPTOR']._loaded_options = None
|
|
34
|
+
_globals['DESCRIPTOR']._serialized_options = b'Z\020./pb/messagevoll'
|
|
35
|
+
_globals['_MESSAGEREQUEST']._serialized_start=28
|
|
36
|
+
_globals['_MESSAGEREQUEST']._serialized_end=247
|
|
37
|
+
_globals['_MESSAGERESPONSE']._serialized_start=249
|
|
38
|
+
_globals['_MESSAGERESPONSE']._serialized_end=299
|
|
39
|
+
_globals['_QUICKOPTION']._serialized_start=301
|
|
40
|
+
_globals['_QUICKOPTION']._serialized_end=350
|
|
41
|
+
_globals['_MESSAGESERVICE']._serialized_start=353
|
|
42
|
+
_globals['_MESSAGESERVICE']._serialized_end=584
|
|
43
|
+
# @@protoc_insertion_point(module_scope)
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
|
|
2
|
+
"""Client and server classes corresponding to protobuf-defined services."""
|
|
3
|
+
import grpc
|
|
4
|
+
import warnings
|
|
5
|
+
|
|
6
|
+
import chatgraph.pb.voll_pb2 as voll__pb2
|
|
7
|
+
|
|
8
|
+
GRPC_GENERATED_VERSION = '1.66.2'
|
|
9
|
+
GRPC_VERSION = grpc.__version__
|
|
10
|
+
_version_not_supported = False
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
from grpc._utilities import first_version_is_lower
|
|
14
|
+
_version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
|
|
15
|
+
except ImportError:
|
|
16
|
+
_version_not_supported = True
|
|
17
|
+
|
|
18
|
+
if _version_not_supported:
|
|
19
|
+
raise RuntimeError(
|
|
20
|
+
f'The grpc package installed is at version {GRPC_VERSION},'
|
|
21
|
+
+ f' but the generated code in voll_pb2_grpc.py depends on'
|
|
22
|
+
+ f' grpcio>={GRPC_GENERATED_VERSION}.'
|
|
23
|
+
+ f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
|
|
24
|
+
+ f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class MessageServiceStub(object):
|
|
29
|
+
"""Missing associated documentation comment in .proto file."""
|
|
30
|
+
|
|
31
|
+
def __init__(self, channel):
|
|
32
|
+
"""Constructor.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
channel: A grpc.Channel.
|
|
36
|
+
"""
|
|
37
|
+
self.SendButton = channel.unary_unary(
|
|
38
|
+
'/messagevoll.MessageService/SendButton',
|
|
39
|
+
request_serializer=voll__pb2.MessageRequest.SerializeToString,
|
|
40
|
+
response_deserializer=voll__pb2.MessageResponse.FromString,
|
|
41
|
+
_registered_method=True)
|
|
42
|
+
self.SendList = channel.unary_unary(
|
|
43
|
+
'/messagevoll.MessageService/SendList',
|
|
44
|
+
request_serializer=voll__pb2.MessageRequest.SerializeToString,
|
|
45
|
+
response_deserializer=voll__pb2.MessageResponse.FromString,
|
|
46
|
+
_registered_method=True)
|
|
47
|
+
self.SendText = channel.unary_unary(
|
|
48
|
+
'/messagevoll.MessageService/SendText',
|
|
49
|
+
request_serializer=voll__pb2.MessageRequest.SerializeToString,
|
|
50
|
+
response_deserializer=voll__pb2.MessageResponse.FromString,
|
|
51
|
+
_registered_method=True)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class MessageServiceServicer(object):
|
|
55
|
+
"""Missing associated documentation comment in .proto file."""
|
|
56
|
+
|
|
57
|
+
def SendButton(self, request, context):
|
|
58
|
+
"""Missing associated documentation comment in .proto file."""
|
|
59
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
60
|
+
context.set_details('Method not implemented!')
|
|
61
|
+
raise NotImplementedError('Method not implemented!')
|
|
62
|
+
|
|
63
|
+
def SendList(self, request, context):
|
|
64
|
+
"""Missing associated documentation comment in .proto file."""
|
|
65
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
66
|
+
context.set_details('Method not implemented!')
|
|
67
|
+
raise NotImplementedError('Method not implemented!')
|
|
68
|
+
|
|
69
|
+
def SendText(self, request, context):
|
|
70
|
+
"""Missing associated documentation comment in .proto file."""
|
|
71
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
72
|
+
context.set_details('Method not implemented!')
|
|
73
|
+
raise NotImplementedError('Method not implemented!')
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def add_MessageServiceServicer_to_server(servicer, server):
|
|
77
|
+
rpc_method_handlers = {
|
|
78
|
+
'SendButton': grpc.unary_unary_rpc_method_handler(
|
|
79
|
+
servicer.SendButton,
|
|
80
|
+
request_deserializer=voll__pb2.MessageRequest.FromString,
|
|
81
|
+
response_serializer=voll__pb2.MessageResponse.SerializeToString,
|
|
82
|
+
),
|
|
83
|
+
'SendList': grpc.unary_unary_rpc_method_handler(
|
|
84
|
+
servicer.SendList,
|
|
85
|
+
request_deserializer=voll__pb2.MessageRequest.FromString,
|
|
86
|
+
response_serializer=voll__pb2.MessageResponse.SerializeToString,
|
|
87
|
+
),
|
|
88
|
+
'SendText': grpc.unary_unary_rpc_method_handler(
|
|
89
|
+
servicer.SendText,
|
|
90
|
+
request_deserializer=voll__pb2.MessageRequest.FromString,
|
|
91
|
+
response_serializer=voll__pb2.MessageResponse.SerializeToString,
|
|
92
|
+
),
|
|
93
|
+
}
|
|
94
|
+
generic_handler = grpc.method_handlers_generic_handler(
|
|
95
|
+
'messagevoll.MessageService', rpc_method_handlers)
|
|
96
|
+
server.add_generic_rpc_handlers((generic_handler,))
|
|
97
|
+
server.add_registered_method_handlers('messagevoll.MessageService', rpc_method_handlers)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
# This class is part of an EXPERIMENTAL API.
|
|
101
|
+
class MessageService(object):
|
|
102
|
+
"""Missing associated documentation comment in .proto file."""
|
|
103
|
+
|
|
104
|
+
@staticmethod
|
|
105
|
+
def SendButton(request,
|
|
106
|
+
target,
|
|
107
|
+
options=(),
|
|
108
|
+
channel_credentials=None,
|
|
109
|
+
call_credentials=None,
|
|
110
|
+
insecure=False,
|
|
111
|
+
compression=None,
|
|
112
|
+
wait_for_ready=None,
|
|
113
|
+
timeout=None,
|
|
114
|
+
metadata=None):
|
|
115
|
+
return grpc.experimental.unary_unary(
|
|
116
|
+
request,
|
|
117
|
+
target,
|
|
118
|
+
'/messagevoll.MessageService/SendButton',
|
|
119
|
+
voll__pb2.MessageRequest.SerializeToString,
|
|
120
|
+
voll__pb2.MessageResponse.FromString,
|
|
121
|
+
options,
|
|
122
|
+
channel_credentials,
|
|
123
|
+
insecure,
|
|
124
|
+
call_credentials,
|
|
125
|
+
compression,
|
|
126
|
+
wait_for_ready,
|
|
127
|
+
timeout,
|
|
128
|
+
metadata,
|
|
129
|
+
_registered_method=True)
|
|
130
|
+
|
|
131
|
+
@staticmethod
|
|
132
|
+
def SendList(request,
|
|
133
|
+
target,
|
|
134
|
+
options=(),
|
|
135
|
+
channel_credentials=None,
|
|
136
|
+
call_credentials=None,
|
|
137
|
+
insecure=False,
|
|
138
|
+
compression=None,
|
|
139
|
+
wait_for_ready=None,
|
|
140
|
+
timeout=None,
|
|
141
|
+
metadata=None):
|
|
142
|
+
return grpc.experimental.unary_unary(
|
|
143
|
+
request,
|
|
144
|
+
target,
|
|
145
|
+
'/messagevoll.MessageService/SendList',
|
|
146
|
+
voll__pb2.MessageRequest.SerializeToString,
|
|
147
|
+
voll__pb2.MessageResponse.FromString,
|
|
148
|
+
options,
|
|
149
|
+
channel_credentials,
|
|
150
|
+
insecure,
|
|
151
|
+
call_credentials,
|
|
152
|
+
compression,
|
|
153
|
+
wait_for_ready,
|
|
154
|
+
timeout,
|
|
155
|
+
metadata,
|
|
156
|
+
_registered_method=True)
|
|
157
|
+
|
|
158
|
+
@staticmethod
|
|
159
|
+
def SendText(request,
|
|
160
|
+
target,
|
|
161
|
+
options=(),
|
|
162
|
+
channel_credentials=None,
|
|
163
|
+
call_credentials=None,
|
|
164
|
+
insecure=False,
|
|
165
|
+
compression=None,
|
|
166
|
+
wait_for_ready=None,
|
|
167
|
+
timeout=None,
|
|
168
|
+
metadata=None):
|
|
169
|
+
return grpc.experimental.unary_unary(
|
|
170
|
+
request,
|
|
171
|
+
target,
|
|
172
|
+
'/messagevoll.MessageService/SendText',
|
|
173
|
+
voll__pb2.MessageRequest.SerializeToString,
|
|
174
|
+
voll__pb2.MessageResponse.FromString,
|
|
175
|
+
options,
|
|
176
|
+
channel_credentials,
|
|
177
|
+
insecure,
|
|
178
|
+
call_credentials,
|
|
179
|
+
compression,
|
|
180
|
+
wait_for_ready,
|
|
181
|
+
timeout,
|
|
182
|
+
metadata,
|
|
183
|
+
_registered_method=True)
|
chatgraph/types/message_types.py
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
from ..gRPC.gRPCCall import WhatsappServiceClient, UserStateServiceClient
|
|
2
|
+
|
|
1
3
|
from dataclasses import dataclass
|
|
2
4
|
from typing import Optional
|
|
3
|
-
|
|
5
|
+
import json
|
|
4
6
|
|
|
5
7
|
@dataclass
|
|
6
8
|
class UserState:
|
|
@@ -15,11 +17,24 @@ class UserState:
|
|
|
15
17
|
"""
|
|
16
18
|
customer_id: str
|
|
17
19
|
menu: str
|
|
20
|
+
route: str
|
|
18
21
|
lst_update: str
|
|
19
22
|
obs: Optional[dict] = None
|
|
20
23
|
|
|
24
|
+
|
|
21
25
|
@dataclass
|
|
22
|
-
class
|
|
26
|
+
class Element:
|
|
27
|
+
"""
|
|
28
|
+
Representa um elemento de uma lista de opções.
|
|
29
|
+
|
|
30
|
+
Atributos:
|
|
31
|
+
title (str): O título do elemento.
|
|
32
|
+
description (str): A descrição do elemento.
|
|
33
|
+
"""
|
|
34
|
+
title: str
|
|
35
|
+
description: Optional[str] = None
|
|
36
|
+
|
|
37
|
+
class UserCall:
|
|
23
38
|
"""
|
|
24
39
|
Representa uma mensagem recebida ou enviada pelo chatbot.
|
|
25
40
|
|
|
@@ -32,10 +47,168 @@ class Message:
|
|
|
32
47
|
company_phone (str): O número de telefone da empresa que está enviando ou recebendo a mensagem.
|
|
33
48
|
status (Optional[str]): O status da mensagem (por exemplo, enviada, recebida, lida, etc.). Este campo é opcional.
|
|
34
49
|
"""
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
50
|
+
def __init__(
|
|
51
|
+
self,
|
|
52
|
+
type: str,
|
|
53
|
+
text: str,
|
|
54
|
+
user_state: UserState,
|
|
55
|
+
channel: str,
|
|
56
|
+
customer_phone: str,
|
|
57
|
+
company_phone: str,
|
|
58
|
+
grpc_uri: str,
|
|
59
|
+
status: Optional[str] = None,
|
|
60
|
+
) -> None:
|
|
61
|
+
|
|
62
|
+
self.type = type
|
|
63
|
+
self.text = text
|
|
64
|
+
self.__user_state = user_state
|
|
65
|
+
self.channel = channel
|
|
66
|
+
self.customer_phone = customer_phone
|
|
67
|
+
self.company_phone = company_phone
|
|
68
|
+
self.status = status
|
|
69
|
+
|
|
70
|
+
self.grpc_uri = grpc_uri
|
|
71
|
+
|
|
72
|
+
self.__wpp_server_client = WhatsappServiceClient(self.grpc_uri)
|
|
73
|
+
self.__user_state_client = UserStateServiceClient(self.grpc_uri)
|
|
74
|
+
|
|
75
|
+
def send_text(self, text:str, abs_text:bool=False) -> None:
|
|
76
|
+
if not abs_text:
|
|
77
|
+
text = text.replace('\t', '')
|
|
78
|
+
|
|
79
|
+
response = self.__wpp_server_client.send_text(
|
|
80
|
+
{
|
|
81
|
+
"hook_id": self.company_phone,
|
|
82
|
+
"enterprise_id": self.customer_phone,
|
|
83
|
+
"unique_customer_id": self.__user_state.customer_id,
|
|
84
|
+
"message_text": text
|
|
85
|
+
}
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
if not response.status:
|
|
89
|
+
raise ValueError("Erro ao enviar mensagem de texto.")
|
|
90
|
+
|
|
91
|
+
def send_button(
|
|
92
|
+
self,
|
|
93
|
+
text:str,
|
|
94
|
+
buttons:list,
|
|
95
|
+
title: str|None = None,
|
|
96
|
+
caption: str|None = None,
|
|
97
|
+
) -> None:
|
|
98
|
+
if len(buttons) > 3:
|
|
99
|
+
raise ValueError("O número máximo de botões é 3.")
|
|
100
|
+
|
|
101
|
+
response = self.__wpp_server_client.send_button(
|
|
102
|
+
{
|
|
103
|
+
"hook_id": self.company_phone,
|
|
104
|
+
"enterprise_id": self.customer_phone,
|
|
105
|
+
"unique_customer_id": self.__user_state.customer_id,
|
|
106
|
+
"message_text": text,
|
|
107
|
+
"button_title": title,
|
|
108
|
+
"message_caption": caption,
|
|
109
|
+
"message_title": title,
|
|
110
|
+
"options": [{"title": b} for b in buttons],
|
|
111
|
+
}
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
if not response.status:
|
|
115
|
+
raise ValueError("Erro ao enviar mensagem de botões.")
|
|
116
|
+
|
|
117
|
+
def send_list(
|
|
118
|
+
self,
|
|
119
|
+
text:str,
|
|
120
|
+
title: str|None = None,
|
|
121
|
+
button_title: str|None = None,
|
|
122
|
+
element_list: list[Element] = None,
|
|
123
|
+
caption: str|None = None,
|
|
124
|
+
) -> None:
|
|
125
|
+
|
|
126
|
+
if len(element_list) > 20:
|
|
127
|
+
raise ValueError("O número máximo de elementos é 20.")
|
|
128
|
+
|
|
129
|
+
response = self.__wpp_server_client.send_list(
|
|
130
|
+
{
|
|
131
|
+
"hook_id": self.company_phone,
|
|
132
|
+
"enterprise_id": self.customer_phone,
|
|
133
|
+
"unique_customer_id": self.__user_state.customer_id,
|
|
134
|
+
"message_text": text,
|
|
135
|
+
"button_title": button_title,
|
|
136
|
+
"message_caption": caption,
|
|
137
|
+
"message_title": title,
|
|
138
|
+
"options": [{"title": e.title, "description": e.description} for e in element_list],
|
|
139
|
+
}
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
if not response.status:
|
|
143
|
+
raise ValueError("Erro ao enviar mensagem de lista.")
|
|
144
|
+
|
|
145
|
+
def delete_user_state(self) -> None:
|
|
146
|
+
response = self.__user_state_client.delete_user_state(self.__user_state.customer_id)
|
|
147
|
+
|
|
148
|
+
if not response.status:
|
|
149
|
+
raise ValueError("Erro ao deletar estado do usuário.")
|
|
150
|
+
|
|
151
|
+
def update_user_state(
|
|
152
|
+
self,
|
|
153
|
+
menu: str,
|
|
154
|
+
route: str,
|
|
155
|
+
obs: dict,
|
|
156
|
+
) -> None:
|
|
157
|
+
|
|
158
|
+
response = self.__user_state_client.update_user_state({
|
|
159
|
+
"user_id": self.__user_state.customer_id,
|
|
160
|
+
"menu_id": menu,
|
|
161
|
+
"route": route,
|
|
162
|
+
"obs": json.dumps(obs),
|
|
163
|
+
})
|
|
164
|
+
|
|
165
|
+
if not response.status:
|
|
166
|
+
raise ValueError("Erro ao atualizar estado do usuário.")
|
|
167
|
+
|
|
168
|
+
self.__user_state.menu = menu
|
|
169
|
+
self.__user_state.route = route
|
|
170
|
+
self.__user_state.obs = obs
|
|
171
|
+
|
|
172
|
+
@property
|
|
173
|
+
def menu(self):
|
|
174
|
+
return self.__user_state.menu
|
|
175
|
+
|
|
176
|
+
@property
|
|
177
|
+
def route(self):
|
|
178
|
+
return self.__user_state.route
|
|
179
|
+
|
|
180
|
+
@property
|
|
181
|
+
def obs(self):
|
|
182
|
+
return self.__user_state.obs
|
|
183
|
+
|
|
184
|
+
@property
|
|
185
|
+
def customer_id(self):
|
|
186
|
+
return self.__user_state.customer_id
|
|
187
|
+
|
|
188
|
+
@menu.setter
|
|
189
|
+
def menu(self, menu):
|
|
190
|
+
|
|
191
|
+
self.update_user_state(
|
|
192
|
+
menu,
|
|
193
|
+
self.__user_state.route,
|
|
194
|
+
self.__user_state.obs
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
@route.setter
|
|
198
|
+
def route(self, route):
|
|
199
|
+
|
|
200
|
+
self.update_user_state(
|
|
201
|
+
self.__user_state.menu,
|
|
202
|
+
route,
|
|
203
|
+
self.__user_state.obs
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
@obs.setter
|
|
207
|
+
def obs(self, obs):
|
|
208
|
+
|
|
209
|
+
self.update_user_state(
|
|
210
|
+
self.__user_state.menu,
|
|
211
|
+
self.__user_state.route,
|
|
212
|
+
obs
|
|
213
|
+
)
|
|
214
|
+
|