Skip to content

Commit 0fdd782

Browse files
committed
refactor: container
1 parent e4a90c6 commit 0fdd782

6 files changed

Lines changed: 237 additions & 235 deletions

File tree

raven/omni_channel_chat/README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
**Remark**
2424

25-
1. Public / Private file has to be handle properly, currently files upload to raven will be private file but chat required it to be private.
25+
1. Public / Private file has to be handle properly, currently files upload to raven will be private file but chat required it to be private
2626

2727
## TODO
2828

@@ -34,3 +34,10 @@
3434

3535
- [ ] Instagram
3636
- [ ] WhatsApp
37+
38+
### Misc
39+
40+
- [ ] Outgoing messages needs message id so we could reply to it properly
41+
- [x] Provider from social login has to change to use provider id, using just "facebook" or "line" will cause error when there are more than 1 provider per each provider (prefix like `OCC_` should be add to provider)
42+
- [x] On BaseMessage `provider` should be change to `provider_id`
43+
- [ ] Create inject interface for connector class

raven/omni_channel_chat/doctype/omni_channel_chat_provider/provider/facebook_provider.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class FacebookConfig:
3232

3333

3434
class FacebookProvider(Provider[FacebookMessagingEvent]):
35-
fb_api_url = "https://graph.facebook.com/v25.0/me/messages"
35+
fb_api_url = "https://graph.facebook.com/v25.0"
3636

3737
def __init__(self, config):
3838
super().__init__(config=config)
@@ -90,7 +90,7 @@ def get_user_info(self, user_id: str) -> UserInfo:
9090
def show_typing(self, user_id: str) -> None:
9191
with httpx.Client() as client:
9292
client.post(
93-
self.fb_api_url,
93+
f"{self.fb_api_url}/me/messages",
9494
params={"access_token": self.config.page_access_token},
9595
json={"recipient": {"id": user_id}, "sender_action": "typing_on"},
9696
)
@@ -101,7 +101,7 @@ def send_reply(self, message: BaseMessage) -> None:
101101
def send_message(self, message: BaseMessage) -> None:
102102
with httpx.Client() as client:
103103
client.post(
104-
self.fb_api_url,
104+
f"{self.fb_api_url}/me/messages",
105105
params={"access_token": self.config.page_access_token},
106106
json={"recipient": {"id": message.user_id}, "message": message.to_provider()},
107107
)
@@ -127,7 +127,11 @@ def event_mapper(self, event: FacebookMessagingEvent) -> BaseMessage | None:
127127

128128
if "text" in message:
129129
return TextMessage(
130-
provider="facebook", user_id=user_id, metadata=metadata, text=message["text"]
130+
provider=self.provider_config.provider,
131+
provider_id=self.provider_config.name,
132+
user_id=user_id,
133+
metadata=metadata,
134+
text=message["text"],
131135
)
132136

133137
for attachment in message.get("attachments") or []:
@@ -137,14 +141,16 @@ def event_mapper(self, event: FacebookMessagingEvent) -> BaseMessage | None:
137141
continue
138142
if att_type == "image":
139143
return ImageMessage(
140-
provider="facebook",
144+
provider=self.provider_config.provider,
145+
provider_id=self.provider_config.name,
141146
user_id=user_id,
142147
metadata=metadata,
143148
file=self.download_attachment(url),
144149
)
145150
if att_type in ("file", "document"):
146151
return FileMessage(
147-
provider="facebook",
152+
provider=self.provider_config.provider,
153+
provider_id=self.provider_config.name,
148154
user_id=user_id,
149155
metadata=metadata,
150156
file=self.download_attachment(url),

raven/omni_channel_chat/doctype/omni_channel_chat_provider/provider/line_provider.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
FileContent,
2323
FileMessage,
2424
ImageMessage,
25+
UserInfo,
2526
)
2627
from raven.omni_channel_chat.models.message import (
2728
TextMessage as StdTextMessage,
@@ -50,14 +51,14 @@ def handle_frappe_api(self, callback: Callable[[BaseMessage], None]) -> Response
5051
headers: dict = dict(request.headers)
5152
return self.handle_webhook(body=body, headers=headers, callback=callback)
5253

53-
def get_user_info(self, user_id: str) -> dict:
54+
def get_user_info(self, user_id: str) -> UserInfo:
5455
with ApiClient(self.config) as api_client:
5556
profile = MessagingApi(api_client).get_profile(user_id)
56-
return {
57-
"user_id": profile.user_id,
58-
"display_name": profile.display_name,
59-
"picture_url": profile.picture_url,
60-
}
57+
return UserInfo(
58+
user_id=profile.user_id,
59+
display_name=profile.display_name,
60+
picture_url=profile.picture_url,
61+
)
6162

6263
def show_typing(self, user_id: str) -> None:
6364
with ApiClient(self.config) as api_client:
@@ -85,7 +86,7 @@ def send_reply(self, message: BaseMessage) -> None:
8586
def send_message(self, message: BaseMessage) -> None:
8687
with ApiClient(self.config) as api_client:
8788
MessagingApi(api_client).push_message(
88-
PushMessageRequest(to=message.user_id, messages=[message.to_provider()])
89+
PushMessageRequest(to=message.user_id, messages=[message.to_line()])
8990
)
9091

9192
def download_attachment(self, message_id: str, file_name: str | None = None) -> FileContent:
@@ -103,20 +104,26 @@ def event_mapper(self, event: LineEvent) -> BaseMessage | None:
103104

104105
if isinstance(msg, TextMessageContent):
105106
return StdTextMessage(
106-
provider="line", user_id=user_id, metadata=metadata, text=msg.text
107+
provider=self.provider_config.provider,
108+
provider_id=self.provider_config.name,
109+
user_id=user_id,
110+
metadata=metadata,
111+
text=msg.text,
107112
)
108113

109114
if isinstance(msg, ImageMessageContent):
110115
return ImageMessage(
111-
provider="line",
116+
provider=self.provider_config.provider,
117+
provider_id=self.provider_config.name,
112118
user_id=user_id,
113119
metadata=metadata,
114120
file=self.download_attachment(msg.id, f"{msg.id}.jpg"),
115121
)
116122

117123
if isinstance(msg, FileMessageContent):
118124
return FileMessage(
119-
provider="line",
125+
provider=self.provider_config.provider,
126+
provider_id=self.provider_config.name,
120127
user_id=user_id,
121128
metadata=metadata,
122129
file=self.download_attachment(msg.id, msg.file_name),

raven/omni_channel_chat/models/message.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ def build_line_sender(self) -> LineSender | None:
5656
@dataclass(kw_only=True)
5757
class BaseMessage(ABC, LineMessageMixin):
5858
provider: "ProviderType"
59+
60+
provider_id: str
5961
user_id: str
6062

6163
sender: SenderInfo | None = None

0 commit comments

Comments
 (0)