Przejdź do treści
Intum

Integracja z Meta - Facebook Messenger, Instagram i komentarze

Aktualizacja: 3 min czytania

Architektura

Integracja działa jako plugin - connector social_media/meta + Noe App.

  • Connector: Connect::Connector kind=social_media/meta
  • UI: app/src/noe/appstore/meta_social_integration.svelte
  • Backend: app/src/connect/connector/social_media/meta.rb
  • Dokumentacja: docs/llm/apps/meta_integration.md

Dane w connectorze

connector.config["pages"][page_id] = {
  page_name, page_access_token, app_secret, verify_token, ig_account_id
}  # system, read-only

connector.fields["pages"][page_id] = {
  desk_id, category_id, active, instagram_active
}  # user-editable

Routing wiadomości

  • Connect::DataObject object_name=fb_mid - dedup Messenger (object_id = mid)
  • Connect::DataObject object_name=fb_comment_id - dedup komentarzy (object_id = comment_id)
  • Connect::DataObject object_name=fb_thread - routing reply komentarza do ticketa (object_id = top_comment_id)
  • Connect::DataObject object_name=fb_sender - routing DM nadawcy do otwartego ticketa (object_id = psid)
  • ticket.config["meta"] - outgoing routing (sender_id, page_id, kind, top_comment_id)

Webhook endpoints

POST /connect/connector/{code}/webhook_facebook   # FB Messenger + komentarze
POST /connect/connector/{code}/webhook_instagram   # Instagram DM
GET  /connect/connector/{code}/webhook_facebook    # verify (hub.verify_token)
GET  /connect/connector/{code}/webhook_instagram   # verify

Verify: connector.config["pages"][page_id]["verify_token"]
HMAC: X-Hub-Signature-256 z app_secret per strona.

OAuth

GET /connect/connector/{code}/oauth_start?desk_id=X
GET /connect/connector/{code}/oauth_callback

State w connector.config["oauth_states"] z TTL 10 min.

Outgoing (agent odpowiada)

Account::Webhook target_kind=connector, source_type=Helpdesk::Comment, kind=create
-> dispatch_webhook_event -> MessengerSender lub CommentReplier

Credentials

Globalne: Rails.application.credentials.dig(:meta, :app_id / :app_secret)
Fallback per-connector: fields["app_id"] + secret_token