Ontwikkelaars

Sonny MCP Beta

Koppel MCP-versoenbare KI-assistente — Claude, en enige kliënt wat die Model Context Protocol praat — aan jou werkspasie, met dieselfde bestekke en grense as die openbare API.

Lees die gids tot die Openbare API

Vinnige begin

  1. 01

    Voeg Sonny by Claude

    Voeg in Claude of Cowork 'n pasgemaakte koppelaar by met die URL https://www.usesonny.com/api/mcp. Sonny ondersteun outomatiese kliëntregistrasie, so daar is geen kliënt-ID of -geheim om te kopieer nie.

  2. 02

    Keur werkspasietoegang goed

    Claude maak Sonny in jou blaaier oop. Meld aan, hersien die versoekte toestemmings en kies die werkspasie om te koppel. OAuth 2.1 met PKCE hou die gevolglike toegangs- en verfrissingstokens beperk tot daardie goedkeuring.

  3. 03

    Vra jou assistent om Sonny te gebruik

    Gereedskap beskryf homself, so 'n opdrag soos “Lys my oop gesprekke” is genoeg. Assistente sien watter gereedskap leesalleen en watter vernietigend is, so 'n goeie kliënt vra voordat dit enigiets verander.

Claude Code

claude mcp add --transport http sonny https://www.usesonny.com/api/mcp

JSON-kliëntkonfigurasie

{
  "mcpServers": {
    "sonny": {
      "url": "https://www.usesonny.com/api/mcp"
    }
  }
}

Versoenbaarheid met API-sleutels

As 'n kliënt nie OAuth kan voltooi nie, skep 'n sleutel met bestekke in Instellings → Ontwikkelaar en stuur dit as 'n Authorization Bearer-kopstuk. API-sleutels bly ten volle ondersteun vir bediener-tot-bediener- en ouer kliënte.

"Authorization": "Bearer sonny_your_key"

Hoe Sonny gereedskapoproepe veilig hou

Een werkspasie, gekose bestekke
Elke oproep loop binne die werkspasie wat tydens OAuth-toestemming gekies is, of die werkspasie wat die API-sleutel besit. 'n Hulpmiddel werk net wanneer sy geloofsbrief die vereiste bestek het.
Eerlike gereedskapaantekeninge
Leesalleen-gereedskap word as leesalleen gemerk; gereedskap wat bywerk en skrap, word as vernietigend gemerk sodat jou kliënt kan bevestig voordat dit optree.
Dieselfde besigheidsreëls
Gereedskap voer presies dieselfde werkvloeie uit as die openbare API — ouditgeskiedenis, kennisgewings en webhooks tree almal op asof 'n spanmaat die verandering gemaak het.

Hou 'n assistent binne een inkassie

Gekose kanale op 'n API-sleutel word outomaties oor elke gereedskapoproep afgedwing. API-sleutels en OAuth-verbindings volg ook die gekoppelde spanmaat se huidige kanaaltoegang. Vir OAuth-verbindings of sleutels met toegang tot alle kanale hou werkspasies dikwels verskeie bronne — een per produk of handelsmerk. Laat jou assistent list_sources een keer roep om hulle te ontdek, en gee dan sourceId aan list_conversations sodat vrae oor een produk net daardie produk se gesprekke teruggee. Elke gesprek dra ook sy eie sourceId, so resultate is verifieerbaar.

Laat 'n goedkoop ondersteuningslus loop

  1. Ontdek veranderinge: begin met die duursame sync-voer, stoor nextCursor nadat jy elke bladsy verwerk het, en ontdubbel gebeurtenis-ID's. Om werk te kies, roep list_conversations met sourceId, awaitingReply: true, snoozed: "false" en compact: true. Interne notas versteek nie onbeantwoorde kliëntboodskappe nie.
  2. Lees net nuwe teks: roep vir elke veranderde gesprek list_messages met jou laaste boodskap-ID of ISO-tydstempel in after en stel includeHtml: false, tensy die e-pos-HTML regtig nodig is.
  3. Wag vir beelde en video's: wanneer list_messages readsInProgress teruggee, maak die oproep in sy nextStep. Sy waitSeconds hou die antwoord terug totdat beeldlesings en videotranskripsies gereed is, so geen slaap is nodig nie.
  4. Laai kliëntkonteks: get_conversation gee identityVerified, ondertekende verifiedTraits, en die gesprek se oorsprongbladsy en kliëntkonteks terug. Wanneer dit 'n contact.id het, gee daardie ID aan list_conversations om die kliënt se vroeëre gesprekke te laai.
  5. Word wakker op aanvraag: gebruik 'n bron-gefiltreerde webhook vir message.created om die agent onmiddellik wakker te maak, en haal dan met sync in. Die duursame voer werk onafhanklik van webhook-aflewering. Gebruik 'n geloofsbrief vir alle kanale om die webhook op te stel en sy bron-ID's te beperk; die agent behou sy bronbeperkte geloofsbrief vir looptyd.

Gereedskapkatalogus

Elke openbare API-bewerking is as 'n hulpmiddel beskikbaar. Die vereiste bestek word langs elkeen gelys.

get_connection_info
Read connection access
conversations:read
get_conversation_context
Read support context
conversations:read
list_conversation_checks
Read conversation checks
conversations:read
record_conversation_check
Record a conversation check
conversations:write
get_status
Check Sonny status
conversations:read
create_conversation
Create a conversation from a form
conversations:write
upload_attachment
Upload a message attachment
attachments:write
list_properties
List custom properties
contacts:read
get_contact_properties
Read contact properties
contacts:read
set_contact_property
Set a contact property
contacts:write
list_contact_memories
Read customer memories
contact-memory:read
create_contact_memory
Save a customer memory
contact-memory:write
delete_contact_memory
Remove a customer memory
contact-memory:write
get_report
Read a support report
reporting:read
sync
Read workspace changes
conversations:read
batch_update_conversations
Update conversations in a batch
conversations:write
list_members
List members
members:read
list_teams
List teams
members:read
list_tags
List tags
tags:read
create_tag
Create a tag
tags:write
get_tag
Get a tag
tags:read
update_tag
Update a tag
tags:write
delete_tag
Delete a tag
tags:write
add_conversation_tag
Add a conversation tag
conversations:write
remove_conversation_tag
Remove a conversation tag
conversations:write
list_contacts
List contacts
contacts:read
create_contact
Create a contact
contacts:write
get_contact
Get a contact
contacts:read
update_contact
Update a contact
contacts:write
archive_contact
Archive a contact
contacts:write
erase_contact
Permanently erase a contact
contacts:write
list_channels
List conversation channels
conversations:read
list_sources
List sources
conversations:read
list_conversations
List conversations
conversations:read
get_conversation
Get a conversation
conversations:read
update_conversation
Update a conversation
conversations:write
list_messages
List messages
messages:read
create_internal_note
Create an internal note
messages:write
edit_message
Edit a sent reply
messages:send
send_message
Send a reply to the customer
messages:send
list_webhooks
List webhook endpoints
webhooks:read
create_webhook
Create a webhook endpoint
webhooks:write
list_webhook_events
List webhook event types
webhooks:read
update_webhook
Update a webhook endpoint
webhooks:write
delete_webhook
Delete a webhook endpoint
webhooks:write
test_webhook
Queue a test event
webhooks:write
list_webhook_deliveries
List webhook deliveries
webhooks:read
retry_webhook_delivery
Retry a failed delivery
webhooks:write
list_kb_articles
List knowledge base articles
kb:read
create_kb_article
Create a knowledge base article
kb:write
get_kb_article
Get a knowledge base article
kb:read
update_kb_article
Update a knowledge base article
kb:write
delete_kb_article
Delete a knowledge base article
kb:write
list_kb_categories
List knowledge base categories
kb:read
create_kb_category
Create a knowledge base category
kb:write
update_kb_category
Update a knowledge base category
kb:write
delete_kb_category
Delete a knowledge base category
kb:write
get_csat_summary
Get CSAT scores
csat:read
list_csat_ratings
List CSAT ratings
csat:read
get_conversation_csat
Get a conversation's CSAT rating
csat:read
reorder_kb_articles
Reorder knowledge base articles
kb:write
upsert_kb_article
Sync a knowledge base article
kb:write
reorder_kb_categories
Reorder knowledge base categories
kb:write
upsert_kb_category
Sync a knowledge base category
kb:write
get_kb_category
Get a knowledge base category
kb:read
get_help_center
Get help center settings
kb:read
update_help_center
Update help center settings
kb:write
upload_kb_media
Upload a help center image
kb:write
list_kb_audiences
List audiences
kb:read
create_kb_audience
Create audience
kb:write
update_kb_audience
Update audience
kb:write
delete_kb_audience
Delete audience
kb:write

Agentwerkvloeie

Sorteer, tree op en bly gesinkroniseer

REST en MCP deel dieselfde toestemmings en werkvloeie. Geloofsbriewe kan net jou huidige kanaaltoegang vernou; om 'n kanaal uit jou lidmaatskap te verwyder, verwyder dit ook uit jou integrasies.

Vind gesprekke wat aandag nodig het

Filtreer volgens awaitingReply, unread, unassigned, assigneeId, agentGroupId, snoozed, priority of tagIds. Awaiting reply ignoreer interne notas; unread is spesifiek vir die geverifieerde spanmaat. Unassigned beteken geen individuele toegewysde nie, selfs as 'n span toegewys is. Etikette pas by enige verskafte ID.

list_conversations({ status: "open", awaitingReply: true, compact: true, sort: "waitingSince", direction: "asc" })

Sorteer volgens waitingSince, lastMessageAt, createdAt of besigheidsprioriteit met direction asc of desc. ID's breek gelykopuitslae. Weggelate filters behou compact=false en snoozed=any. REST se tagIds aanvaar ID's geskei deur kommas; MCP aanvaar ook 'n skikking. waitingSince begin by die eerste inkomende boodskap ná die laaste antwoord; opvolgboodskappe en interne notas stel dit nie terug nie. Laat hierdie skandering van die wagtou volgens 'n skedule loop, selfs wanneer geen webhook aankom nie, sodat ou drade weer opduik.

Haal in sonder om die inkassie weer te lees

Gebruik sync met conversations:read. Die duursame voer sluit gespreksveranderinge, etikette, boodskappe, kontakeienskappe, herinneringe en skrappingsrekords in. Elke vrag vereis ook sy eie leesbestek: boodskapliggame het messages:read nodig en herinneringe het contact-memory:read nodig. Beperkte geloofsbriewe ontvang net toegelate kanale.

  1. Begin sonder 'n wyser, volg nextCursor totdat hasMore false is, en stoor daardie wyser.
  2. Lees die huidige gespreks-/kontaklyste en enige geskiedenis wat jy vir jou aanvanklike toestand nodig het.
  3. Herspeel vanaf die gestoorde wyser om veranderinge tydens daardie lees vas te vang. Verwerk elke bladsy en stoor dan nextCursor.

Ontdubbel volgens gebeurtenis-id: herspeel is minstens een keer, so stroomaf-aksies het hul eie beskerming teen duplikate nodig. 'n Versoek sonder 'n wyser dek die laaste uur, nie 'n volledige momentopname nie. Gebeurtenisse word 30 dae lank behou; HTTP 410 resync_required beteken laai weer van voor af. Laai ook van voor af nadat bestekke of kanaaltoegang verbreed is. Gebruik limit tot 100 en maxBodyChars tot 10 000 (verstek 500). Stel compact=true vir boodskap-textPreview/textTruncated-velde beperk tot 200 karakters in plaas van body/bodyTruncated. Webhooks kan 'n agent wakker maak; die voer bly beskikbaar sonder webhook-intekeninge of wanneer webhook-aflewering agter is.

Teken kontroles een keer aan en deel die resultaat

Voordat jy 'n ondersoek herhaal, lees list_conversation_checks (GET /api/v1/conversations/{conversationId}/checks). Stoor 'n resultaat met record_conversation_check (PUT na dieselfde pad), en verskaf key, result, checkedBy en 'n opsionele reference vir die kaart-ID of URL. Byvoorbeeld: key=product-version, result=Shopstar Go verified, checkedBy=Engineer, reference=card-X. Sonny teken die geverifieerde actorId en checkedAt-tydstempel aan. Om 'n key te hergebruik, vervang net daardie kontrole; dit is huidige toestand, nie 'n geskiedenislog nie. Lees vereis conversations:read en skryf vereis conversations:write, albei beperk tot die gesprek se kanaal. Hierdie oproepe stuur nie 'n antwoord nie en merk nie die verkoper as beantwoord nie.

Wys toe en werk werk in groepe by

Ontdek aktiewe, toewysbare spanmaats en spanne met list_members / list_teams (members:read). Antwoorde sluit beskikbaarheid en effektiewe kanaaltoegang in, sonder e-posadresse. Gebruik conversations:write om status, priority, assigneeId, agentGroupId, snoozedUntil, snoozedUntilReply, addTagIds of removeTagIds te verander.

batch_update_conversations({
  conversationIds: ["conversation_1", "conversation_2"],
  updates: { agentGroupId: "team_1", assignment: "round_robin" }
})

Om die beurt kies 'n beskikbare spanlid wat toegang tot die gesprek se kanaal het. Sonder 'n geskikte lid gee 'n enkele bywerking 409 terug en misluk 'n groepitem. Elke groep aanvaar tot 100 unieke ID's en pas een patch atomies per gesprek toe. Ondersoek elke { id, ok, error? }-resultaat; sommige items kan misluk. Groepe gebruik die huidige versoekgebaseerde tempolimiet, sonder geweegde heffing volgens aantal items.

Deel kliëntkonteks met Sonny AI

Lys, stoor en verwyder kontakherinneringe met contact-memory:read/write. Verskaf albei contactId en 'n toeganklike sourceId; die kontak moet 'n gesprek op daardie bron hê. Gestoorde feite gebruik dieselfde validering, duplikaathantering en limiete as die app en word as handmatige herinneringe aangeteken.

Lees eienskapdefinisies by /api/v1/properties en lees of stel waardes by /api/v1/contacts/{contactId}/properties. MCP stel list_properties, get_contact_properties en set_contact_property beskikbaar. Hierdie vereis contacts:read/write en toegang tot alle kanale. Stel presies een propertyId of propertyName, met 'n stringwaarde of null om dit skoon te maak. Teks-, getal-, URL-, datum- en keusewaardes word teen die velddefinisie gevalideer.

set_contact_property({ contactId: "contact_1", propertyName: "Plan", value: "Pro" })
list_contacts({ property: { Plan: "Pro" } })

Eienskapfilters pas by presiese gestoorde strings; verskeie eienskappe moet almal pas. Waardes wat deur die API geskryf is, word in Co-Pilot en die outo-antwoorder as API-data gemerk. Bestaande reëls vir geverifieerde kliënte en bronne geld steeds. Gewone handmatige interne veldwaardes bly uit hierdie KI-konteks uitgesluit.

Lees dieselfde verslae as jou span

Roep get_report({ kind, filters }) met reporting:read. Soorte is overview, volume, response-times, agents, sources, tags, csat, ai, knowledge, leads en online-hours. Overview kombineer tellings, reaksietye en CSAT. Filters is period (1–365 dae, verstek 30), gepaarde from/to-datums (to is eksklusief), granularity (day/month), source, assigneeId en tagId. Source aanvaar all, all-chat, all-email, website:{id} of email:{id}.

Verslae gebruik die paneelbord se navrae en huidige toegangskontroles. Knowledge gebruik datums en toegelate kanale, onafhanklik van die gekose bron, toegewysde of etiket. Online hours meet toeganklike spanmaats se teenwoordigheid in die werkspasie; sy gesprekstellings bly tot kanale beperk. Bestaande /csat-eindpunte behou hul aparte csat:read-bestek en kan 'n ander populasie beskryf.

Stuur lêers met antwoorde of interne notas

Gee attachments:write en laai 'n lêer van tot 25 MB vir 'n gesprek op. upload_attachment neem conversationId, fileName, contentType en dataBase64. Die antwoord bevat 'n id en expiresAt. Gee binne een uur tot 10 attachmentIds aan 'n antwoord of nota deur. Elke oplaai is aan jou gebruiker en gesprek gebind en kan net een keer gebruik word. Ongebruikte oplaaie word ná verstryking opgeruim.

send_message({ conversationId: "conversation_1", attachmentIds: ["upload_1"] })

Antwoorde vereis messages:send; interne notas vereis messages:write en bereik nooit kliënte nie. Boodskappe met net aanhegsels word ondersteun. E-posantwoorde sluit lêers in binne die e-pos se groottebegroting en aflaaiskakels vir die res; e-posse vir vanlyn-kletse sluit lêerskakels in. Skakels in e-posse bly bruikbaar terwyl die aanhegsel bestaan, sodat ontvangers hulle later kan oopmaak. Om die e-pos aan te stuur, deel toegang tot daardie lêers. Gaan emailDeliveryStatus na vir afleweringsmislukkings.

Gemagtigde boodskaplesings sluit downloadUrl, downloadExpiresAt, aiStatus, aiDescription en aiExtractedText in, plus videoTranscripts vir gekoppelde video's (Loom, Vimeo en ander). Aflaaiskakels hou 15 minute; lees die boodskap weer vir vars skakels. Nuwe API-/MCP-oplaaie het privaat berging. Ouer aanhegsels bly openbaar en word as access=legacy_public gemerk: hul oorspronklike URL verval nie. Om 'n boodskap te lees, begin die lees van sy beelde wanneer die werkspasie Sonny AI het. Beeldlesings en videotranskripsies is kort nadat 'n boodskap aankom klaar: terwyl enige nog loop, begin die antwoord met readsInProgress, waarvan nextStep die presiese oproep gee om te maak. Gee waitSeconds (tot 30) deur om in een versoek daarvoor te wag. Widget- en intydse boodskappe vir kliënte bevat nooit uittreksels of transkripsies nie.

Verken die volledige versoek- en antwoordkontrakte

Kennisbasis

Sinkroniseer vanuit 'n eksterne bron

Sinkroniseer artikels en kategorieë met stabiele eksterne ID's, voer Markdown of HTML in, laai beelde op, stel volgorde en bestuur lesergehore. Om 'n upsert te herhaal, werk die bestaande inhoud by.

  1. Kies jou kanaal se sourceId en gee kb:read en kb:write. Vir opsionele ontdekking het list_sources ook conversations:read nodig.
  2. Skep die kategorie en sinkroniseer dan 'n artikel as 'n konsep. Hersien sy formatering en toegang voordat jy publiseer.
  3. Stel hulpsentrumtoegang op, publiseer en toets die lesersaansig. Gebruik paginering en stabiele eksterne ID's vir latere opdaterings.
Volg die volledige MCP-sinkroniseringsgids

Bestuur kliëntgehore

Skep groepe uit geverifieerde kliënteienskappe en pas hulle toe op 'n hulpsentrum, kategorie of artikel. Alle oorgeërfde beperkings moet pas. API- en MCP-geloofsbriewe tree as personeel binne hul bestekke op; kyk na 'n voorskou en toets 'n werklike kliëntsessie om lesertoegang na te gaan.

Stel hulpsentrum-gehore op en toets hulle

Verwante dokumentasie