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 APIVinnige begin
- 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. - 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.
- 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/mcpJSON-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
- 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, roeplist_conversationsmet sourceId, awaitingReply: true, snoozed: "false" en compact: true. Interne notas versteek nie onbeantwoorde kliëntboodskappe nie. - Lees net nuwe teks: roep vir elke veranderde gesprek
list_messagesmet jou laaste boodskap-ID of ISO-tydstempel inafteren stelincludeHtml: false, tensy die e-pos-HTML regtig nodig is. - Wag vir beelde en video's: wanneer
list_messagesreadsInProgressteruggee, maak die oproep in synextStep. SywaitSecondshou die antwoord terug totdat beeldlesings en videotranskripsies gereed is, so geen slaap is nodig nie. - Laai kliëntkonteks:
get_conversationgeeidentityVerified, ondertekendeverifiedTraits, en die gesprek se oorsprongbladsy en kliëntkonteks terug. Wanneer dit 'ncontact.idhet, gee daardie ID aanlist_conversationsom die kliënt se vroeëre gesprekke te laai. - Word wakker op aanvraag: gebruik 'n bron-gefiltreerde webhook vir
message.createdom 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.
- Begin sonder 'n wyser, volg nextCursor totdat hasMore false is, en stoor daardie wyser.
- Lees die huidige gespreks-/kontaklyste en enige geskiedenis wat jy vir jou aanvanklike toestand nodig het.
- 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.
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.
- Kies jou kanaal se sourceId en gee kb:read en kb:write. Vir opsionele ontdekking het
list_sourcesook conversations:read nodig. - Skep die kategorie en sinkroniseer dan 'n artikel as 'n konsep. Hersien sy formatering en toegang voordat jy publiseer.
- Stel hulpsentrumtoegang op, publiseer en toets die lesersaansig. Gebruik paginering en stabiele eksterne ID's vir latere opdaterings.
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 hulleVerwante dokumentasie
- Openbare APIBeta
Sorteer en sinkroniseer gesprekke, deel kliëntkonteks, lees verslae en stuur lêers met API-sleutels met bestekke.
- WebhooksBeta
Teken in op ondertekende werkspasiegebeurtenisse en ondersoek afleweringspogings.
- Span en rolle
Nooi gebruikers, skep spanne en verstaan eienaar-, admin-, agent- en kykertoegang.