Tích hợp
Các dịch vụ ngoài và hạ tầng mà builderx_api phụ thuộc. Mỗi mục chỉ rõ vị trí code, cách bật/tắt và những điểm cần lưu khi phát triển.
Elasticsearch
-
Thư viện:
:erlastic_search+ helper tronglib/search/. -
Mỗi domain có mapping / index riêng (
lib/builderx_api/<domain>/elastic.ex). -
Luồng index:
- Domain ghi DB.
- Outbox phát event.
Rabbit.IndexingConsumerconsume và cập nhật Elastic.
-
Reindex thủ công trong IEx:
Elastic.re_setup_product_indexElastic.confirm_re_setup_product_index # xoá index cũ -
Biến môi trường:
ELASTIC_HOST,ELASTIC_PORT,ELASTIC_USERNAME,ELASTIC_PASSWORD.
RabbitMQ
-
Thư viện:
:amqp+ modulelib/rabbit/. -
Biến môi trường kết nối:
R_HOST,R_PORT,R_USERNAME,R_PASSWORD,R_VIRTUAL_HOST. -
Consumer chính:
Rabbit.IndexingConsumer— event index Elastic.Rabbit.TaskPoolConsumer— task batch (cache, sync,…).
-
Khi dev có thể khởi động consumer thủ công trong IEx:
BuilderxApi.DynamicApp.start_rabbitRabbit.IndexingConsumer.start_linkRabbit.TaskPoolConsumer.start_link -
Tên queue gắn prefix theo môi trường để tránh consume nhầm nhau.
Kafka
- Thư viện:
:brod, cấu hình tronglib/kafka/. - Biến môi trường:
KAFKA1_HOST,KAFKA1_PORT, … - Dùng cho event throughput cao: analytic, conversion, pixel.
- Consumer chạy trong supervisor riêng; tên consumer-group theo service (
storecake.indexing,storecake.analytics).
Redis
- Thư viện:
:redix, modulelib/redis/+lib/redlock.ex. - Biến môi trường:
REDIS_HOST,REDIS_PORT,REDIS_PASSWORD,REDIS_DB. - Trường hợp dùng:
- Cache sản phẩm / danh mục theo site (xem Runbook).
- Cầu nối PubSub vào Phoenix PubSub.
- Distributed lock (chống double-charge / double-publish).
MongoDB
- Thư viện:
:mongodb_driver. - Biến môi trường:
MONGO_URI. - Tránh transaction trải nhiều document khi không thực sự cần.
- Bulk insert dùng
Mongo.insert_manythay vì loop.
Email (SMTP)
- Thư viện:
:bamboo+:bamboo_smtp; ở test dùngbamboo_test_adapter. - Module:
lib/email.ex,lib/builderx_api/mailer.ex. - Template chữ ở
priv/gettext/, HTML ởlib/builderx_api_web/templates/email/. - Biến môi trường:
EMAIL_USERNAME,EMAIL_PASSWORD, SMTP host/port.
Google APIs
google_api_drive,google_api_sheets(dùng chung vớilanding_page_backend).- Biến môi trường:
GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET_KEY,GOOGLE_API_KEY,GG_CALLBACK_URL. - Trường hợp dùng: đồng bộ danh mục từ Sheets, Drive picker, OAuth login.
Pancake ID / Pancake CRM
- OAuth client:
PANCAKEID_CLIENT_ID,PANCAKEID_CLIENT_SECRET. - Endpoint:
AUTH_URL(https://account.pancake.vn). - Controller riêng:
pancake_controller.ex,crm_pancake_controller.ex.
Stripe
- Gọi qua HTTPoison.
- Biến môi trường:
STRIPE_SK,STRIPE_WEBHOOK_SECRET_KEY. - Hỗ trợ gói cước Storecake và thanh toán Stripe của cửa hàng.
Facebook / Botcake
FACEBOOK_APP_ID,FACEBOOK_SECRET_KEY— Login + Catalog.BOTCAKE_*— Tích hợp Botcake (chatbot).FACEBOOK_APP_ID_LG,FACEBOOK_SECRET_KEY_LG— Môi trường LG riêng.
Slack
- Biến môi trường:
SLACK_CLIENT_ID,SLACK_SECRET_ID. - Dùng cho thông báo của các luồng automation.
Dropbox / Instagram / Dribbble / Vimeo / DeviantArt
- Picker tài nguyên (cho Editor / CMS file).
- Mỗi dịch vụ có client id / secret riêng (
DROPBOX_APP_KEY,INSTAGRAM_CLIENT_ID,…).
Google Ads
DEVELOPER_TOKEN,GOOGLE_ADS_MANAGE_ACCOUNT.- Pull / push campaign cho từng cửa hàng.
reCAPTCHA
CAPTCHA_SECRET_KEY.- Verify cho các form công khai (đăng ký, contact).
GHTK (B2C)
B2C_TOKEN_GHTK— tích hợp vận chuyển GHTK.
Cầu nối Webcake
WEBCMS_API,WEBCMS_SECRET_KEY— endpoint củawebcms.- Module cầu nối:
lib/landingpage/,lib/builderx_api/webcake/. - Publish landing page sẽ gọi RPC sang
landing_page_backend.
RapidAPI
RAPID_API_KEY— API tổng hợp của bên thứ ba (ví dụ địa danh quốc tế).
Sentry
- Thư viện:
:sentry ~> 10.2. - Biến môi trường:
SENTRY_DSN,SENTRY_ENV. - Helper:
BuilderxApi.ErrorTracker.capture/2. - Ở dev nên để
SENTRY_DSNrỗng để không bắn event.
QuestDB
- Biến môi trường:
QUESTDB_HOST,QUESTDB_HTTP_PORT,QUESTDB_ILP_PORT. - Sender đẩy point qua ILP (TCP).
Hạ tầng nội bộ khác
- WebCMS (
webcms) — Cần thiết cho luồng indexing; chạymake beamtrongwebcms(xem Runbook). - landing_page_backend — Deploy độc lập nhưng dùng chung một số queue; giữ cụm Rabbit đồng bộ.
Thêm tích hợp mới
- Tạo
lib/builderx_api/<integration>/chứa client và context. - Khai báo biến môi trường mới ở
config/env_config.exsvà cập nhật Biến môi trường. - Tích hợp chạy dài (consumer) thì thêm GenServer và đăng ký vào supervisor.
- Luôn đặt timeout và retry rõ ràng (HTTPoison
recv_timeout, Brod producer retry). - Bổ sung test stub trong
test/.