Umhlahlandlela wonjiniyela · REST ne-MCP

Vumelanisa isisekelo sakho solwazi

Qhubeka ubhala ohlelweni lwakho olukhona bese uthumela izinguquko ku-Sonny. Lo mhlahlandlela udala isigaba esithi Billing, uvumelanisa i-athikili eluhlaka, bese uyishicilelela izethameli zamakhasimende aqinisekisiwe.

1. Khetha isiteshi bese udala ukhiye

  1. Vula u-Iziteshi → isiteshi sakho. Kopisha i-ID engemva kuka-/app/sources/ ku-URL ye-dashboard yaso. I-API ibiza le ID yesiteshi ngokuthi sourceId; yehlukile ku-siteId ye-widget naku-slug yomphakathi yesikhungo sosizo.
  2. Ku-Izilungiselelo → Unjiniyela → Okhiye be-API → Dala ukhiye, nikeza u-kb:read no-kb:write. Khawulela u-Ukufinyelela iziteshi esiteshini ohlose ukusivumelanisa. Londoloza ukhiye oboniswa kanye kuphela kumphathi wezimfihlo weseva yakho.
  3. Setha okuguquguqukayo okungezansi endaweni ye-backend yakho. Lezi zibonelo zisebenzisa i-curl; shintsha ama-ID anonhlamvu ezinkulu ngamanani abuyiswa yi-Sonny. Wasebenzise esiteshini sokuhlola ngaphambi kokuvumelanisa isikhungo sosizo esisebenzayo.
bash
# Load SONNY_API_KEY from your server's secret manager first.
# SOURCE_ID is the ID in the channel dashboard URL: /app/sources/SOURCE_ID
export SOURCE_ID="YOUR_SOURCE_ID"
export BASE="https://www.usesonny.com/api/v1/sources/$SOURCE_ID"

Ukuthola okungaphoqelekile: u-GET /api/v1/sources nethuluzi le-MCP elithi list_sources kubuyisa iziteshi ezifinyelelekayo futhi kudinga u-conversations:read. Awudingi lowo mkhawulo uma usunayo i-ID yesiteshi. Ukuxhuma isizinda kuhlala kungumsebenzi we-dashboard.

Ukusetha okugcwele kokhiye be-API

2. Dala noma ubuyekeze isigaba

Sebenzisa i-ID ezinzile evela ohlelweni lwakho lomthombo ku-URL. Ukuthumela i-ID yangaphandle efanayo futhi kubuyekeza isigaba esikhona esikhundleni sokudala esiphindiwe. Ukudala kokuqala kuqalisa isikhungo sosizo salesi siteshi ngokuzenzakalela.

bash
curl --fail-with-body -X PUT "$BASE/categories/by-external-id/billing" \
  -H "Authorization: Bearer $SONNY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Billing","position":0}'

Lindela u-201 ekudaleni noma u-200 ekubuyekezeni, nesigaba ngaphansi kuka-data. Londoloza u-data.id uma udinga i-ID yesigaba yangaphakathi ye-Sonny. Bhala ama-ID angaphandle ngefomethi ye-URL (URL-encode); wagcine ezinzile ngisho noma izihloko zishintsha.

3. Vumelanisa i-athikili njengohlaka

bash
curl --fail-with-body -X PUT "$BASE/articles/by-external-id/billing-guide" \
  -H "Authorization: Bearer $SONNY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Manage billing","body":"## Find your invoices\n\nOpen **Settings → Billing** in your account.","bodyFormat":"markdown","categoryExternalId":"billing","status":"draft"}'

Impendulo iqukethe u-data.id ne-HTML ehlanziwe ku-data.body. Vula i-athikili ku-Iziteshi → isiteshi sakho → Isikhungo sosizo ukuze uhlole ukuhlelwa kwayo. I-Markdown iguqulelwa ku-HTML; i-HTML eluhlaza nayo iyamukelwa ngo-bodyFormat: "html" (okuzenzakalelayo). Isihloko se-athikili sehlukile ezihlokweni ezingaphakathi kombhalo.

Sebenzisa u-categoryExternalId ukuze ubhekise esigabeni sesinyathelo 2, noma u-categoryId nge-ID yaso ye-Sonny. Nikeza okukodwa kuphela. Setha noma yikuphi ku-null ukuze ukhiphe i-athikili esigabeni. I-upsert ngayinye idinga isihloko nombhalo; u-PATCH uyatholakala ezinguqukweni ezithile. Ama-athikili amasha aba yizinhlaka ngokuzenzakalela uma u-status engekho.

4. Setha ukufinyelela, bese ushicilela

Kulesi sibonelo sesikhungo esiyimfihlo, qala uxhume ukungena kwamakhasimende okuqinisekisiwe. Dala izethameli bese ulondoloza u-data.id ozibuyisayo:

bash
curl --fail-with-body -X POST "$BASE/audiences" \
  -H "Authorization: Bearer $SONNY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Pro customers","rules":{"match":"all","conditions":[{"trait":"plan","op":"in","value":["pro","business"]}]}}'

Shintsha u-AUDIENCE_ID, ARTICLE_ID, ne-URL yokungena engezansi. Isicelo sokuqala senza isikhungo sosizo sibe ngu-Kuyasebenza futhi sisikhawulele kumakhasimende e-Pro. Esesibili sishicilela i-athikili. Indlela yokungena yohlelo lwakho kumele ishintshanise i-JWT yekhasimende esayiniwe nesikhungo sosizo; ukusetha u-signInUrl kuphela akungenisi muntu.

bash
curl --fail-with-body -X PATCH "$BASE/help-center" \
  -H "Authorization: Bearer $SONNY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"enabled":true,"title":"Acme Help Center","audience":"verified","audienceId":"AUDIENCE_ID","signInUrl":"https://app.example.com/login"}'

# Replace ARTICLE_ID and AUDIENCE_ID with the returned data.id values.
curl --fail-with-body -X PATCH "$BASE/articles/ARTICLE_ID" \
  -H "Authorization: Bearer $SONNY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"audienceId":"AUDIENCE_ID","status":"published"}'

Sebenzisa i-URL ebuyiswa ngu-GET /help-center ukuze uhlole ukubuka komfundi ongenile nesiphequluli esingangenile. Okhiye be-API ne-MCP basebenza njengabasebenzi futhi bangafunda okuqukethwe ngaphakathi kwemikhawulo yabo; impendulo yabo ephumelelayo ayifakazeli ukuthi ikhasimende lingayibona i-athikili.

Esikhungweni somphakathi, sebenzisa u-audience: "everyone" no-audienceId: null esikhungweni nase-athikili, futhi uhlole nokufinyelela kwesigaba. Ukuze ususe iqembu elinegama kuphela, thumela u-audienceId: null; ukufinyelela kwamakhasimende aqinisekisiwe kuphela kuhlala kunjalo ngaphandle uma ushintsha u-audience ngokuqondile. U-audienceId ongekho ugcina isabelo sangaphambili. Yonke imikhawulo yesikhungo sosizo, yesigaba, neye-athikili kumele ifane.

Imithetho enegama isebenzisa u-match: "all" noma "any", imibandela efika ku-10, namanani anezinhlobo eziqinile. Ama-operator: eq, neq, in, not_in, exists, not_exists, gt, gte, lt, lte. Ukuqhathanisa kwezinombolo kuthatha izinombolo; u-in/not_in uthatha ama-array amanani angu-1–100 alula; u-exists/not_exists akadingi u-value. Izici ezingekho ziyehluleka ukuqhathanisa. Bona ukuziphatha kwemithetho, ukudluliselwa, nokuxazulula izinkinga zokufinyelela.

5. Gcina ukuvumelanisa kusesikhathini

Phinda ubhale ngaphandle kokuphinda okuqukethwe

Phinda u-PUT nge-ID yangaphandle efanayo noma nini lapho umthombo wakho ushintsha. Ama-ID angaphandle ahlukile ngaphakathi kwesikhungo sosizo. Izinkambu zokubuyekeza ezingekho zigcina amanani azo amanje. Shiya u-status kuma-upsert alandelayo ukuze ugcine ukushicilelwa; ukuthumela u-draft ngokuqondile kuhoxisa i-athikili esebenzayo. U-publishedAt usethwa ekushicilelweni kokuqala futhi uhlala ungashintshi. Ungowokufunda kuphela, ngakho izinsuku zokushicilela zomlando azikwazi ukungeniswa. Okuqukethwe okungashintshile nezinguquko ze-metadata kuphela akubangeli ukwenza kabusha ama-embedding okungadingekile.

Funda izinguquko nezibalo

bash
curl --fail-with-body --get "$BASE/articles" \
  -H "Authorization: Bearer $SONNY_API_KEY" \
  --data-urlencode "page=1" --data-urlencode "limit=100" \
  --data-urlencode "status=published" \
  --data-urlencode "updatedSince=2026-09-01T00:00:00Z"

# Get the full sanitized HTML and read-only analytics for one article.
curl --fail-with-body "$BASE/articles/ARTICLE_ID" \
  -H "Authorization: Bearer $SONNY_API_KEY"

Uhlu lwama-athikili nolwezigaba lubuyisa u-data kanye no-pagination: page, limit, total. Amakhasi aqala ku-1; u-limit uzenzakalela ku-50 futhi wamukela kufika ku-100. Gcina izihlungi ezifanayo bese ucela amakhasi kuze kube yilapho u-page × limit efinyelela ku-total. Zombili izinhlu zamukela u-externalId no-updatedSince; ama-athikili aphinde amukele u-categoryId no-status (draft noma published). Sebenzisa isitembu sesikhathi se-ISO esinezoni yesikhathi ku-updatedSince; sihlanganisa amarekhodi abuyekezwe ngaleso sikhathi.

Funda imininingwane ye-athikili ngayinye ukuze uthole umbhalo wayo ogcwele, u-viewCount, helpfulYes, no-helpfulNo. Lezi zibalo zingezokufunda kuphela. U-updatedSince ubala amarekhodi amanje; akabiki okususiwe. Landelela okususiwe ohlelweni lwakho lomthombo bese ususa ngokuqondile irekhodi elihambisanayo le-Sonny uma uhlose lokho.

Layisha isithombe

bash
curl --fail-with-body -X POST "$BASE/media" \
  -H "Authorization: Bearer $SONNY_API_KEY" \
  -F "file=@billing.png;type=image/png"

Sebenzisa u-data.url obuyisiwe ku-syntax yesithombe ye-Markdown noma kwi-elementi ye-HTML ethi img, bese uvumelanisa umbhalo we-athikili. Ukulayisha kwamukela i-JPEG, PNG, GIF, ne-WebP kufika ku-25 MB futhi kudinga isikhungo sosizo esiqalisiwe. Ama-URL alayishiwe ngawomphakathi; umkhawulo wezethameli we-athikili awuyivikeli i-URL yesithombe. I-MCP isebenzisa u-upload_kb_media no-sourceId, fileName, contentType, no-dataBase64 wefayela esikhundleni sedatha yefomu ye-multipart.

Hlela ama-athikili nezigaba

bash
curl --fail-with-body -X PUT "$BASE/articles/reorder" \
  -H "Authorization: Bearer $SONNY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ids":["ARTICLE_ID_1","ARTICLE_ID_2"]}'

Qala ulande wonke amakhasi ngaphandle kwezihlungi ze-status, zesigaba, noma zosuku, kuhlanganise nezinhlaka. Shintsha ama-ID esibonelo nge-ID ngayinye yama-athikili amanje kanye kuphela, ngokulandelana okufunayo. Sebenzisa u-/categories/reorder ohlwini oluphelele lwezigaba. Ukuhlela kabusha okuphumelelayo kubuyisa u-204 ngaphandle komzimba. Uma uhlu lushintshile noma luqukethe ama-ID angaziwa, aphindiwe, noma angekho, luvuselele ngaphambi kokuzama futhi. Ungaphinde usethe u-position ongeyona inombolo engezansi kuka-zero ekubhaleni ngakunye.

Sebenzisa indlela efanayo nge-MCP

  1. Xhuma iklayenti lakho le-MCP bese ukhetha indawo yokusebenza efanele. Qinisekisa ukuthi inemikhawulo u-kb:read no-kb:write, nokufinyelela esiteshini sakho.
  2. Sebenzisa i-ID yesiteshi evela ku-dashboard, noma ubize u-list_sources uma imininingwane yakho yokungena inayo no-conversations:read. Ungalokothi usebenzise i-siteId ye-widget esikhundleni sayo.
  3. Sebenzisa izibonelo ezinhlanu zokuqala ezingezansi ngokulandelana. Shintsha u-SOURCE_ID nge-ID yesiteshi sakho, no-ARTICLE_ID/AUDIENCE_ID ngo-data.id womphumela ngamunye wangaphambili. Shintsha i-URL yokungena futhi uxhume ukungena ngaphambi kokushicilela.
  4. Sebenzisa u-list_kb_articles ukuze ubuyekeze izinguquko. Hlela kabusha kuphela ngemva kokuqoqa uhlu oluphelele olungahlungiwe, kuhlanganise nezinhlaka. Vuselela izinhlu zakho ngemva kokubhala okuphumelelayo.

Isibonelo ngasinye sibonisa igama lethuluzi nama-argument alo. Izinkambu ze-upsert ziya ngqo ku-arguments; amathuluzi okubuyekeza afaka izinkambu ezishintshiwe ngaphakathi kuka-updates. Lokhu kungokufakwayo kocingo lwethuluzi, hhayi isicelo se-HTTP esiya ku-endpoint ye-MCP.

1. upsert_kb_category
Ucingo lwethuluzi le-MCP
{
  "name": "upsert_kb_category",
  "arguments": {
    "sourceId": "SOURCE_ID",
    "externalId": "billing",
    "name": "Billing",
    "position": 0
  }
}
2. upsert_kb_article
Ucingo lwethuluzi le-MCP
{
  "name": "upsert_kb_article",
  "arguments": {
    "sourceId": "SOURCE_ID",
    "externalId": "billing-guide",
    "title": "Manage billing",
    "body": "## Find your invoices\n\nOpen **Settings → Billing** in your account.",
    "bodyFormat": "markdown",
    "categoryExternalId": "billing",
    "status": "draft"
  }
}
3. create_kb_audience
Ucingo lwethuluzi le-MCP
{
  "name": "create_kb_audience",
  "arguments": {
    "sourceId": "SOURCE_ID",
    "name": "Pro customers",
    "rules": {
      "match": "all",
      "conditions": [
        {
          "trait": "plan",
          "op": "in",
          "value": [
            "pro",
            "business"
          ]
        }
      ]
    }
  }
}
4. update_help_center
Ucingo lwethuluzi le-MCP
{
  "name": "update_help_center",
  "arguments": {
    "sourceId": "SOURCE_ID",
    "updates": {
      "enabled": true,
      "title": "Acme Help Center",
      "audience": "verified",
      "audienceId": "AUDIENCE_ID",
      "signInUrl": "https://app.example.com/login"
    }
  }
}
5. update_kb_article
Ucingo lwethuluzi le-MCP
{
  "name": "update_kb_article",
  "arguments": {
    "sourceId": "SOURCE_ID",
    "articleId": "ARTICLE_ID",
    "updates": {
      "audience": "verified",
      "audienceId": "AUDIENCE_ID",
      "status": "published"
    }
  }
}
6. list_kb_articles
Ucingo lwethuluzi le-MCP
{
  "name": "list_kb_articles",
  "arguments": {
    "sourceId": "SOURCE_ID",
    "page": 1,
    "limit": 100,
    "updatedSince": "2026-09-01T00:00:00Z"
  }
}
7. reorder_kb_articles
Ucingo lwethuluzi le-MCP
{
  "name": "reorder_kb_articles",
  "arguments": {
    "sourceId": "SOURCE_ID",
    "ids": [
      "ARTICLE_ID_1",
      "ARTICLE_ID_2"
    ]
  }
}
8. update_kb_audience
Ucingo lwethuluzi le-MCP
{
  "name": "update_kb_audience",
  "arguments": {
    "sourceId": "SOURCE_ID",
    "audienceId": "AUDIENCE_ID",
    "updates": {
      "name": "Paid customers"
    }
  }
}

Imisebenzi ehlobene

Izindlela ze-REST ezingezansi zihlobene no-BASE. Funda ireferensi ye-API ukuze uthole yonke inkambu nesakhiwo sempendulo.

Imisebenzi ehlobene ye-REST ne-MCP yesisekelo solwazi
UmsebenziRESTMCP
Bala / thola ama-athikiliGET /articles · GET /articles/{articleId}list_kb_articles · get_kb_article
Bala / thola izigabaGET /categories · GET /categories/{categoryId}list_kb_categories · get_kb_category
Dala ngaphandle kwe-ID yangaphandlePOST /articles · POST /categoriescreate_kb_article · create_kb_category
Hlela okuqukethwe okukhonaPATCH /articles/{articleId} · PATCH /categories/{categoryId}update_kb_article · update_kb_category
Hlela izigaba ngokulandelanaPUT /categories/reorderreorder_kb_categories
Funda / hlela izilungiselelo zesikhungo sosizoGET /help-center · PATCH /help-centerget_help_center · update_help_center
Bala / hlela izethameliGET /audiences · PATCH /audiences/{audienceId}list_kb_audiences · update_kb_audience
SusaDELETE /articles/{articleId} · /categories/{categoryId} · /audiences/{audienceId}delete_kb_article · delete_kb_category · delete_kb_audience

Ukususa i-athikili kungokwaphakade. Ukususa isigaba kukhipha ama-athikili aso esigabeni futhi kususe lowo mkhawulo wesigaba odluliselwe. Ukususa izethameli kususa imithetho yazo yezici kodwa okuqukethwe okuxhunyiwe kuhlale kungokwamakhasimende aqinisekisiwe kuphela. Buyekeza ukufinyelela okuthintekayo ngaphambi kokususa; sebenzisa izinhlaka ukuze uhoxise ama-athikili uma ufuna ukuwagcina.

Xazulula izinkinga zokuvumelanisa

400 · Isicelo esingavumelekile
Hlola isihloko/umbhalo noma igama okudingekayo, amagama aqondile ezinkambu, izinhlobo zemithetho ezivumelekile, nama-ID aphelele okuhlela kabusha. Thumela u-categoryId noma u-categoryExternalId, hhayi kokubili.
401 · Akugunyaziwe
Nikeza ukhiye we-Bearer ovumelekile. Hlola ukuthi uphelelwe yisikhathi noma uhoxisiwe yini.
403 · Akuvunyelwe
Hlola imikhawulo yokhiye, izimvume zomnikazi wokhiye, nokukhokha kwendawo yokusebenza. Phinda uxhume iklayenti le-MCP ngokufinyelela okudingekayo uma amathuluzi alo engawokufunda kuphela.
404 · Akutholakali
Qinisekisa ukuthi umthombo ungowendawo yokusebenza ekhethiwe futhi uvunyelwe yimininingwane yokungena. Qalisa isikhungo sosizo esisha ngokudala okuqukethwe kuqala; ukufunda akusidali.
409 · Ukungqubuzana
Landa kabusha okuqukethwe kwamanje bese uxazulula i-ID engqubuzanayo noma ukuhleleka okuphelelwe yisikhathi ngaphambi kokuzama futhi.
413 · Kukhulu kakhulu
Nciphisa isithombe sibe ngaphansi komkhawulo we-25 MB.
429 · Umkhawulo wezicelo udlulile
Linda isikhathi sika-Retry-After ngaphambi kokuzama futhi. Sebenzisa u-RateLimit-Limit, RateLimit-Remaining, no-RateLimit-Reset ukuze uhambise izicelo ngesivinini esifanele.

Imibhalo ehlobene