From f1a3fdfeab9e0a1107c4982fd37e00181cbd786f Mon Sep 17 00:00:00 2001 From: lucaslinhares Date: Thu, 18 Jan 2024 17:41:28 -0300 Subject: [PATCH] update tasks call to receive user_token --- marketplace/clients/facebook/client.py | 97 ++++++++++++------- .../core/types/channels/whatsapp/apis.py | 16 +-- .../core/types/channels/whatsapp/tasks.py | 16 ++- .../types/channels/whatsapp_cloud/facades.py | 10 +- .../types/channels/whatsapp_cloud/requests.py | 16 ++- .../channels/whatsapp_cloud/serializers.py | 1 - .../whatsapp_cloud/services/facebook.py | 8 +- .../types/channels/whatsapp_cloud/views.py | 43 +++++--- marketplace/settings.py | 4 +- marketplace/wpp_products/tasks.py | 4 +- marketplace/wpp_templates/serializers.py | 8 +- marketplace/wpp_templates/tasks.py | 6 +- marketplace/wpp_templates/views.py | 14 ++- 13 files changed, 161 insertions(+), 82 deletions(-) diff --git a/marketplace/clients/facebook/client.py b/marketplace/clients/facebook/client.py index 7558ef70..e77018a7 100644 --- a/marketplace/clients/facebook/client.py +++ b/marketplace/clients/facebook/client.py @@ -15,8 +15,16 @@ class FacebookAuthorization: def __init__(self): self.access_token = ACCESS_TOKEN - def _get_headers(self): - headers = {"Authorization": f"Bearer {self.access_token}"} + def _get_user_token(self, app): + if app.config.get("wa_user_token"): + return app.config.get("wa_user_token") + return None + + def _get_headers(self, user_token): + if user_token: + headers = {"Authorization": f"Bearer {user_token}"} + else: + headers = {"Authorization": f"Bearer {self.access_token}"} return headers @property @@ -26,38 +34,42 @@ def get_url(self): class FacebookClient(FacebookAuthorization, RequestClient): # Product Catalog - def create_catalog(self, business_id, name, category=None): + def create_catalog(self, app, business_id, name, category=None): url = self.get_url + f"{business_id}/owned_product_catalogs" data = {"name": name} if category: data["vertical"] = category - headers = self._get_headers() + user_token = self._get_user_token(app) + headers = self._get_headers(user_token) response = self.make_request(url, method="POST", headers=headers, data=data) return response.json() - def destroy_catalog(self, catalog_id): + def destroy_catalog(self, app, catalog_id): url = self.get_url + f"{catalog_id}" - headers = self._get_headers() + user_token = self._get_user_token(app) + headers = self._get_headers(user_token) response = self.make_request(url, method="DELETE", headers=headers) return response.json().get("success") - def create_product_feed(self, product_catalog_id, name): + def create_product_feed(self, app, product_catalog_id, name): url = self.get_url + f"{product_catalog_id}/product_feeds" data = {"name": name} - headers = self._get_headers() + user_token = self._get_user_token(app) + headers = self._get_headers(user_token) response = self.make_request(url, method="POST", headers=headers, data=data) return response.json() - def upload_product_feed(self, feed_id, file): + def upload_product_feed(self, app, feed_id, file): url = self.get_url + f"{feed_id}/uploads" - headers = self._get_headers() + user_token = self._get_user_token(app) + headers = self._get_headers(user_token) files = { "file": ( file.name, @@ -69,7 +81,7 @@ def upload_product_feed(self, feed_id, file): return response.json() def create_product_feed_via_url( - self, product_catalog_id, name, feed_url, file_type, interval, hour + self, app, product_catalog_id, name, feed_url, file_type, interval, hour ): # TODO: adjust this method url = self.get_url + f"{product_catalog_id}/product_feeds" @@ -77,11 +89,12 @@ def create_product_feed_via_url( data = {"name": name, "schedule": json.dumps(schedule), "file_type": file_type} - headers = self._get_headers() + user_token = self._get_user_token(app) + headers = self._get_headers(user_token) response = self.make_request(url, method="POST", headers=headers, data=data) return response.json() - def get_upload_status(self, feed_id, max_attempts=10, wait_time=30): + def get_upload_status(self, app, feed_id, max_attempts=10, wait_time=30): """ Checks the upload status using long polling. @@ -94,7 +107,8 @@ def get_upload_status(self, feed_id, max_attempts=10, wait_time=30): bool or str: True if 'end_time' is found, otherwise a formatted error message. """ url = self.get_url + f"{feed_id}/uploads" - headers = self._get_headers() + user_token = self._get_user_token(app) + headers = self._get_headers(user_token) attempts = 0 while attempts < max_attempts: @@ -113,17 +127,19 @@ def get_upload_status(self, feed_id, max_attempts=10, wait_time=30): f"Waited for a total of {total_wait_time} seconds." ) - def list_products_by_feed(self, feed_id): + def list_products_by_feed(self, app, feed_id): url = self.get_url + f"{feed_id}/products" - headers = self._get_headers() + user_token = self._get_user_token(app) + headers = self._get_headers(user_token) response = self.make_request(url, method="GET", headers=headers) return response.json() - def list_all_products_by_feed(self, feed_id): + def list_all_products_by_feed(self, app, feed_id): url = self.get_url + f"{feed_id}/products" - headers = self._get_headers() + user_token = self._get_user_token(app) + headers = self._get_headers(user_token) all_products = [] while url: @@ -133,9 +149,10 @@ def list_all_products_by_feed(self, feed_id): return all_products - def list_all_catalogs(self, wa_business_id): + def list_all_catalogs(self, app, wa_business_id): url = self.get_url + f"{wa_business_id}/owned_product_catalogs" - headers = self._get_headers() + user_token = self._get_user_token(app) + headers = self._get_headers(user_token) all_catalog_ids = [] all_catalogs = [] @@ -150,45 +167,51 @@ def list_all_catalogs(self, wa_business_id): return all_catalog_ids, all_catalogs - def destroy_feed(self, feed_id): + def destroy_feed(self, app, feed_id): url = self.get_url + f"{feed_id}" - headers = self._get_headers() + user_token = self._get_user_token(app) + headers = self._get_headers(user_token) response = self.make_request(url, method="DELETE", headers=headers) return response.json().get("success") - def get_connected_catalog(self, waba_id): + def get_connected_catalog(self, app, waba_id): url = self.get_url + f"{waba_id}/product_catalogs" - headers = self._get_headers() + user_token = self._get_user_token(app) + headers = self._get_headers(user_token) response = self.make_request(url, method="GET", headers=headers) return response.json() - def enable_catalog(self, waba_id, catalog_id): + def enable_catalog(self, app, waba_id, catalog_id): url = self.get_url + f"{waba_id}/product_catalogs" data = {"catalog_id": catalog_id} - headers = self._get_headers() + user_token = self._get_user_token(app) + headers = self._get_headers(user_token) response = self.make_request(url, method="POST", headers=headers, data=data) return response.json() - def disable_catalog(self, waba_id, catalog_id): + def disable_catalog(self, app, waba_id, catalog_id): url = self.get_url + f"{waba_id}/product_catalogs" data = {"catalog_id": catalog_id, "method": "delete"} - headers = self._get_headers() + user_token = self._get_user_token(app) + headers = self._get_headers(user_token) response = self.make_request(url, method="POST", headers=headers, data=data) return response.json() - def get_catalog_details(self, catalog_id): + def get_catalog_details(self, app, catalog_id): url = self.get_url + f"{catalog_id}" params = {"fields": "name,vertical"} - headers = self._get_headers() + user_token = self._get_user_token(app) + headers = self._get_headers(user_token) response = self.make_request(url, method="GET", headers=headers, params=params) return response.json() - def _update_commerce_settings(self, wa_phone_number_id, **settings): + def _update_commerce_settings(self, app, wa_phone_number_id, **settings): url = self.BASE_URL + f"{wa_phone_number_id}/whatsapp_commerce_settings" - headers = self._get_headers() + user_token = self._get_user_token(app) + headers = self._get_headers(user_token) response = self.make_request(url, method="POST", headers=headers, data=settings) return response.json() @@ -202,7 +225,7 @@ def toggle_catalog_visibility(self, wa_phone_number_id, make_visible=True): wa_phone_number_id, is_catalog_visible=make_visible ) - def get_wpp_commerce_settings(self, wa_phone_number_id): + def get_wpp_commerce_settings(self, app, wa_phone_number_id): """ Returns: "data": [ @@ -217,13 +240,15 @@ def get_wpp_commerce_settings(self, wa_phone_number_id): """ url = self.BASE_URL + f"{wa_phone_number_id}/whatsapp_commerce_settings" - headers = self._get_headers() + user_token = self._get_user_token(app) + headers = self._get_headers(user_token) response = self.make_request(url, method="GET", headers=headers) return response.json() # Whatsapp Templates - def get_template_analytics(self, waba_id, fields): + def get_template_analytics(self, app, waba_id, fields): url = self.BASE_URL + f"{waba_id}/template_analytics" - headers = self._get_headers() + user_token = self._get_user_token(app) + headers = self._get_headers(user_token) response = self.make_request(url, method="GET", headers=headers, params=fields) return response.json() diff --git a/marketplace/core/types/channels/whatsapp/apis.py b/marketplace/core/types/channels/whatsapp/apis.py index 9d8b4b69..28a1bfc8 100644 --- a/marketplace/core/types/channels/whatsapp/apis.py +++ b/marketplace/core/types/channels/whatsapp/apis.py @@ -4,6 +4,8 @@ from requests.models import Response from django.conf import settings +from marketplace.applications.models import App + from ..whatsapp_base.exceptions import FacebookApiException, UnableProcessProfilePhoto WHATSAPP_VERSION = settings.WHATSAPP_VERSION @@ -157,8 +159,10 @@ class FacebookWABAApi(BaseFacebookBaseApi): def __init__(self, access_token: str) -> None: self._access_token = access_token - @property - def _headers(self) -> dict: + def _headers(self, app) -> dict: + user_token = app.config.get("wa_user_token") + if user_token: + return {"Authorization": f"Bearer {user_token}"} return {"Authorization": f"Bearer {self._access_token}"} def get_waba(self, waba_id: str) -> dict: @@ -174,15 +178,15 @@ class FacebookPhoneNumbersAPI(BaseFacebookBaseApi): def _get_url(self, endpoint: str) -> str: return f"{settings.WHATSAPP_API_URL}/{endpoint}" - def get_phone_numbers(self, waba_id: str) -> list: + def get_phone_numbers(self, app: App, waba_id: str) -> list: url = self._get_url(f"{waba_id}/phone_numbers") - response = self._request(url, headers=self._headers) + response = self._request(url, headers=self._headers(app)) return response.json().get("data", []) - def get_phone_number(self, phone_number_id: str): + def get_phone_number(self, app: App, phone_number_id: str): url = self._get_url(phone_number_id) - response = self._request(url, headers=self._headers) + response = self._request(url, headers=self._headers(app)) return response.json() diff --git a/marketplace/core/types/channels/whatsapp/tasks.py b/marketplace/core/types/channels/whatsapp/tasks.py index 64f66c57..733d7ece 100644 --- a/marketplace/core/types/channels/whatsapp/tasks.py +++ b/marketplace/core/types/channels/whatsapp/tasks.py @@ -179,7 +179,11 @@ def sync_whatsapp_cloud_wabas(): logger.info(f"Syncing app WABA. UUID: {app.uuid}") - api = FacebookWABAApi(settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN) + api = ( + FacebookWABAApi(app.config.get("wa_user_token")) + if app.config.get("wa_user_token") + else FacebookWABAApi(settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN) + ) try: waba = api.get_waba(wa_waba_id) @@ -268,7 +272,7 @@ def config_app_phone_number(app: App, phone_number: dict): ) continue - phone_numbers = api.get_phone_numbers(business_id) + phone_numbers = api.get_phone_numbers(app, business_id) for phone_number in phone_numbers: display_phone_number = phone_number.get("display_phone_number") @@ -312,8 +316,12 @@ def sync_whatsapp_cloud_phone_numbers(): continue try: - api = FacebookPhoneNumbersAPI( - settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN + api = ( + FacebookPhoneNumbersAPI(app.config.get("wa_user_token")) + if app.config.get("wa_user_token") + else FacebookPhoneNumbersAPI( + settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN + ) ) phone_number = api.get_phone_number(phone_number_id) diff --git a/marketplace/core/types/channels/whatsapp_cloud/facades.py b/marketplace/core/types/channels/whatsapp_cloud/facades.py index 98a13020..b0e473d0 100644 --- a/marketplace/core/types/channels/whatsapp_cloud/facades.py +++ b/marketplace/core/types/channels/whatsapp_cloud/facades.py @@ -24,9 +24,9 @@ class CloudProfileFacade(object): # TODO: Interface "Other": "OTHER", } - def __init__(self, phone_number_id: "str") -> None: - self._profile_api = CloudProfileRequest(phone_number_id) - self._photo_api = PhotoAPIRequest(phone_number_id) + def __init__(self, app, phone_number_id: "str") -> None: + self._profile_api = CloudProfileRequest(app, phone_number_id) + self._photo_api = PhotoAPIRequest(app, phone_number_id) def get_profile(self): profile = self._profile_api.get_profile() @@ -61,8 +61,8 @@ def delete_profile_photo(self): class CloudProfileContactFacade(object): # TODO: Interface - def __init__(self, phone_number_id: "str") -> None: - self._profile_api = CloudProfileRequest(phone_number_id) + def __init__(self, app, phone_number_id: "str") -> None: + self._profile_api = CloudProfileRequest(app, phone_number_id) def get_profile(self): return self._profile_api.get_profile() diff --git a/marketplace/core/types/channels/whatsapp_cloud/requests.py b/marketplace/core/types/channels/whatsapp_cloud/requests.py index 8303b7a1..13bacd67 100644 --- a/marketplace/core/types/channels/whatsapp_cloud/requests.py +++ b/marketplace/core/types/channels/whatsapp_cloud/requests.py @@ -4,6 +4,8 @@ from rest_framework import status from django.conf import settings + +from marketplace.applications.models import App from ..whatsapp_base.interfaces import ProfileHandlerInterface from ..whatsapp_base.exceptions import FacebookApiException @@ -22,9 +24,14 @@ def __init__(self, phone_number_id: "str") -> None: def _url(self) -> str: return settings.WHATSAPP_API_URL + f"/{self._phone_number_id}" + self._endpoint - @property - def _headers(self) -> dict: + def _headers(self, app) -> dict: access_token = settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN + user_token = app.config.get("wa_user_token") + if user_token: + return { + "Content-Type": "application/json", + "Authorization": f"Bearer {user_token}", + } return { "Content-Type": "application/json", "Authorization": f"Bearer {access_token}", @@ -94,12 +101,15 @@ def get_phone_number(self, phone_number_id: str): class PhotoAPIRequest(object): - def __init__(self, phone_number_id: str) -> None: + def __init__(self, phone_number_id: str, app: App) -> None: self._access_token = settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN self._phone_number_id = phone_number_id + self.app = app @property def _headers(self) -> dict: + if self.app.config.get("wa_user_token"): + return {"Authorization": f"Bearer {self.app.config.get('wa_user_token')}"} return {"Authorization": f"Bearer {self._access_token}"} def _get_url(self, endpoint: str) -> str: diff --git a/marketplace/core/types/channels/whatsapp_cloud/serializers.py b/marketplace/core/types/channels/whatsapp_cloud/serializers.py index bf74887e..9be66da0 100644 --- a/marketplace/core/types/channels/whatsapp_cloud/serializers.py +++ b/marketplace/core/types/channels/whatsapp_cloud/serializers.py @@ -24,7 +24,6 @@ class Meta: class WhatsAppCloudConfigureSerializer(serializers.Serializer): - input_token = serializers.CharField(required=True) waba_id = serializers.CharField(required=True) phone_number_id = serializers.CharField(required=True) auth_code = serializers.CharField(required=True) diff --git a/marketplace/core/types/channels/whatsapp_cloud/services/facebook.py b/marketplace/core/types/channels/whatsapp_cloud/services/facebook.py index e09f853c..845b8fd4 100644 --- a/marketplace/core/types/channels/whatsapp_cloud/services/facebook.py +++ b/marketplace/core/types/channels/whatsapp_cloud/services/facebook.py @@ -51,7 +51,7 @@ def get_app_facebook_credentials(self, app): def enable_catalog(self, catalog): waba_id = self.get_app_facebook_credentials(app=catalog.app).get("wa_waba_id") response = self.client.enable_catalog( - waba_id=waba_id, catalog_id=catalog.facebook_catalog_id + app=catalog.app, waba_id=waba_id, catalog_id=catalog.facebook_catalog_id ) success = response.get("success") is True return success, response @@ -59,14 +59,14 @@ def enable_catalog(self, catalog): def disable_catalog(self, catalog): waba_id = self.get_app_facebook_credentials(app=catalog.app).get("wa_waba_id") response = self.client.disable_catalog( - waba_id=waba_id, catalog_id=catalog.facebook_catalog_id + app=catalog.app, waba_id=waba_id, catalog_id=catalog.facebook_catalog_id ) success = response.get("success") is True return success, response def get_connected_catalog(self, app): waba_id = self.get_app_facebook_credentials(app=app).get("wa_waba_id") - response = self.client.get_connected_catalog(waba_id=waba_id) + response = self.client.get_connected_catalog(app=app, waba_id=waba_id) if len(response.get("data")) > 0: return response.get("data")[0].get("id") @@ -89,4 +89,4 @@ def wpp_commerce_settings(self, app): business_phone_number_id = self.get_app_facebook_credentials(app=app).get( "wa_phone_number_id" ) - return self.client.get_wpp_commerce_settings(business_phone_number_id) + return self.client.get_wpp_commerce_settings(app, business_phone_number_id) diff --git a/marketplace/core/types/channels/whatsapp_cloud/views.py b/marketplace/core/types/channels/whatsapp_cloud/views.py index 89768457..f989197b 100644 --- a/marketplace/core/types/channels/whatsapp_cloud/views.py +++ b/marketplace/core/types/channels/whatsapp_cloud/views.py @@ -67,8 +67,12 @@ def profile_config_credentials(self) -> dict: @property def get_access_token(self) -> str: - access_token = settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN - + user_acess_token = self.get_object().config.get("wa_user_token") + access_token = ( + user_acess_token + if user_acess_token + else settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN + ) if access_token is None: raise ValidationError("This app does not have fb_access_token in settings") @@ -94,26 +98,29 @@ def create(self, request, *args, **kwargs): waba_currency = "USD" base_url = settings.WHATSAPP_API_URL + weni_token_headers = {"Authorization": f"Bearer {settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN}"} - url = f"{base_url}/{settings.WHATSAPP_VERSION}/oauth/access_token/" + url = f"{base_url}/oauth/access_token" params = dict( client_id=settings.WHATSAPP_APPLICATION_ID, client_secret=settings.WHATSAPP_APPLICATION_SECRET, code=auth_code, ) + print('URL', url, params) response = requests.get(url, params=params) + print('RESPONSE', response.json()) if response.status_code != status.HTTP_200_OK: raise ValidationError(response.json()) - + user_auth = response.json().get("access_token") - - headers = { - "Authorization": f"Bearer {user_auth}" - } + print('USER TOKEN NEW', user_auth) + headers = {"Authorization": f"Bearer {user_auth}"} url = f"{base_url}/{waba_id}" params = dict(fields="on_behalf_of_business_info,message_template_namespace") + print(url, params) response = requests.get(url, params=params, headers=headers) + print(response.json()) message_template_namespace = response.json().get("message_template_namespace") business_id = response.json().get("on_behalf_of_business_info").get("id") @@ -121,17 +128,22 @@ def create(self, request, *args, **kwargs): url = f"{base_url}/{waba_id}/assigned_users" params = dict( user=settings.WHATSAPP_CLOUD_SYSTEM_USER_ID, - access_token=user_auth, + access_token=settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN, tasks="MANAGE", ) + print(url, params) response = requests.post(url, params=params, headers=headers) + print(response.json()) if response.status_code != status.HTTP_200_OK: raise ValidationError(response.json()) url = f"{base_url}/{settings.WHATSAPP_CLOUD_EXTENDED_CREDIT_ID}/whatsapp_credit_sharing_and_attach" params = dict(waba_id=waba_id, waba_currency=waba_currency) - response = requests.post(url, params=params, headers=headers) + print(url, params) + + response = requests.post(url, params=params, headers=weni_token_headers) + print(response.json()) if response.status_code != status.HTTP_200_OK: raise ValidationError(response.json()) @@ -139,21 +151,26 @@ def create(self, request, *args, **kwargs): allocation_config_id = response.json().get("allocation_config_id") url = f"{base_url}/{waba_id}/subscribed_apps" + print(url) response = requests.post(url, headers=headers) + print(response.json()) if response.status_code != status.HTTP_200_OK: raise ValidationError(response.json()) + + phone_number_request = PhoneNumbersRequest(user_auth) + phone_number = phone_number_request.get_phone_number(phone_number_id) + print('PHONE NUMBER', phone_number) url = f"{base_url}/{phone_number_id}/register" pin = get_random_string(6, string.digits) data = dict(messaging_product="whatsapp", pin=pin) + print(url, data) response = requests.post(url, headers=headers, data=data) + print(response.json()) if response.status_code != status.HTTP_200_OK: raise ValidationError(response.json()) - - phone_number_request = PhoneNumbersRequest(user_auth) - phone_number = phone_number_request.get_phone_number(phone_number_id) config = dict( wa_number=phone_number.get("display_phone_number"), diff --git a/marketplace/settings.py b/marketplace/settings.py index 94e959d8..d213747b 100644 --- a/marketplace/settings.py +++ b/marketplace/settings.py @@ -305,8 +305,8 @@ WHATSAPP_API_URL = urllib.parse.urljoin( env.str("WHATSAPP_API_URL", default="https://graph.facebook.com/"), WHATSAPP_VERSION ) -WHATSAPP_APPLICATION_SECRET=env.str("WHATSAPP_APPLICATION_SECRET") -WHATSAPP_APPLICATION_ID=env.str("WHATSAPP_APPLICATION_ID") +WHATSAPP_APPLICATION_SECRET = env.str("WHATSAPP_APPLICATION_SECRET") +WHATSAPP_APPLICATION_ID = env.str("WHATSAPP_APPLICATION_ID") if APPTYPE_WHATSAPP_PATH in APPTYPES_CLASSES: WHATSAPP_TIME_BETWEEN_SYNC_WABA_IN_HOURS = ( diff --git a/marketplace/wpp_products/tasks.py b/marketplace/wpp_products/tasks.py index 2053a2a6..598047af 100644 --- a/marketplace/wpp_products/tasks.py +++ b/marketplace/wpp_products/tasks.py @@ -77,7 +77,7 @@ def get_extra_info(app, *args, **kwargs): def list_all_catalogs_task(app, client): try: all_catalog_ids, all_catalogs = client.list_all_catalogs( - wa_business_id=app.config.get("wa_business_id") + app=app, wa_business_id=app.config.get("wa_business_id") ) return all_catalog_ids, all_catalogs except Exception as e: @@ -99,7 +99,7 @@ def update_catalogs_on_flows_task(app, flows_client, all_catalogs): extra_info_func=get_extra_info, ) def get_catalog_details_task(client, app, catalog_id): - return client.get_catalog_details(catalog_id) + return client.get_catalog_details(app, catalog_id) @handle_exceptions( diff --git a/marketplace/wpp_templates/serializers.py b/marketplace/wpp_templates/serializers.py index 2534b964..fc452292 100644 --- a/marketplace/wpp_templates/serializers.py +++ b/marketplace/wpp_templates/serializers.py @@ -79,7 +79,11 @@ def create(self, validated_data: dict) -> None: f"This app: {template.app.uuid} does not have fb_access_token in config" ) else: - access_token = settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN + access_token = ( + template.app.config.get("wa_user_token") + if template.app.config.get("wa_user_token") + else settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN + ) template_message_request = TemplateMessageRequest(access_token=access_token) components = [validated_data.get("body", {})] @@ -97,7 +101,7 @@ def create(self, validated_data: dict) -> None: or header.get("format") == "VIDEO" ): photo_api_request = PhotoAPIRequest( - template.app.config.get("wa_waba_id") + template.app, template.app.config.get("wa_waba_id") ) photo = header.get("example") file_type = re.search("(?<=data:)(.*)(?=;base64)", photo).group(0) diff --git a/marketplace/wpp_templates/tasks.py b/marketplace/wpp_templates/tasks.py index e9609cff..3f65d6ca 100644 --- a/marketplace/wpp_templates/tasks.py +++ b/marketplace/wpp_templates/tasks.py @@ -35,7 +35,11 @@ def refresh_whatsapp_templates_from_facebook(): if app.code == "wpp" and app.config.get("fb_access_token"): acess_token = app.config.get("fb_access_token") else: - acess_token = settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN + acess_token = ( + app.config.get("wa_user_token") + if app.config.get("wa_user_token") + else settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN + ) template_message_request = TemplateMessageRequest(access_token=acess_token) templates = template_message_request.list_template_messages(waba_id) diff --git a/marketplace/wpp_templates/views.py b/marketplace/wpp_templates/views.py index cde8388f..b7d7454a 100644 --- a/marketplace/wpp_templates/views.py +++ b/marketplace/wpp_templates/views.py @@ -116,7 +116,11 @@ def perform_destroy(self, instance): f"This app: {instance.app.uuid} does not have fb_access_token in config" ) else: - access_token = settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN + access_token = ( + instance.app.config.get("wa_user_token") + if instance.app.config.get("wa_user_token") + else settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN + ) waba_id = instance.app.config.get("wa_waba_id") if waba_id is None: @@ -171,7 +175,11 @@ def partial_update(self, request, app_uuid=None, uuid=None): f"This app: {template.app.uuid} does not have fb_access_token in config" ) else: - access_token = settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN + access_token = ( + template.app.config.get("wa_user_token") + if template.app.config.get("wa_user_token") + else settings.WHATSAPP_SYSTEM_USER_ACCESS_TOKEN + ) message_template_id = request.data.get("message_template_id") @@ -200,7 +208,7 @@ def partial_update(self, request, app_uuid=None, uuid=None): or header.get("format") == "VIDEO" ): photo_api_request = PhotoAPIRequest( - template.app.config.get("wa_waba_id") + template.app, template.app.config.get("wa_waba_id") ) photo = header.get("example") file_type = re.search("(?<=data:)(.*)(?=;base64)", photo).group(0)