[{"data":1,"prerenderedAt":1028},["ShallowReactive",2],{"navigation_docs":3,"-ai-assistants-capabilities":83,"-ai-assistants-capabilities-surround":1025},[4,41,57,67],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":40},"Getting Started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,20,25,30,35],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Campaign Configuration","\u002Fgetting-started\u002Fcampaign-configuration","1.getting-started\u002F2.campaign-configuration","i-lucide-megaphone",{"title":21,"path":22,"stem":23,"icon":24},"Quality Review","\u002Fgetting-started\u002Fquality-review","1.getting-started\u002F3.quality-review","i-lucide-shield-check",{"title":26,"path":27,"stem":28,"icon":29},"Petitions","\u002Fgetting-started\u002Fpetitions","1.getting-started\u002F4.petitions","i-lucide-signature",{"title":31,"path":32,"stem":33,"icon":34},"Donations","\u002Fgetting-started\u002Fdonations","1.getting-started\u002F5.donations","i-lucide-heart-handshake",{"title":36,"path":37,"stem":38,"icon":39},"Custom Texts","\u002Fgetting-started\u002Fcustom-texts","1.getting-started\u002F6.custom-texts","i-lucide-type",false,{"title":42,"icon":43,"path":44,"stem":45,"children":46,"page":40},"Embed","i-lucide-code","\u002Fembed","2.embed",[47,52],{"title":48,"path":49,"stem":50,"icon":51},"Integration Guide","\u002Fembed\u002Fguide","2.embed\u002F1.guide","i-lucide-book-open",{"title":53,"path":54,"stem":55,"icon":56},"API Reference","\u002Fembed\u002Fapi-reference","2.embed\u002F2.api-reference","i-lucide-file-code",{"title":58,"icon":59,"path":60,"stem":61,"children":62,"page":40},"External API","i-lucide-globe","\u002Fexternal-api","3.external-api",[63],{"title":64,"path":65,"stem":66,"icon":56},"Campaign Reference","\u002Fexternal-api\u002Freference","3.external-api\u002F1.reference",{"title":68,"icon":69,"path":70,"stem":71,"children":72,"page":40},"AI Assistants","i-lucide-bot","\u002Fai-assistants","4.ai-assistants",[73,78],{"title":74,"path":75,"stem":76,"icon":77},"Connect an Assistant","\u002Fai-assistants\u002Fconnect","4.ai-assistants\u002F1.connect","i-lucide-plug",{"title":79,"path":80,"stem":81,"icon":82},"What the Assistant Can Do","\u002Fai-assistants\u002Fcapabilities","4.ai-assistants\u002F2.capabilities","i-lucide-list-checks",{"id":84,"title":79,"body":85,"description":1018,"extension":1019,"links":1020,"meta":1021,"navigation":1022,"path":80,"seo":1023,"stem":81,"__hash__":1024},"docs\u002F4.ai-assistants\u002F2.capabilities.md",{"type":86,"value":87,"toc":1006},"minimark",[88,92,97,155,160,163,191,195,541,544,548,553,557,560,592,595,606,611,640,665,837,858,861,948,951,955,966,969,973,976,981,985,1002],[89,90,91],"p",{},"Your assistant manages contacts and recipient lists, and helps you create campaigns and petitions. Contact and list management works independently of campaigns. For a campaign, it follows the same steps as the editor in your Activoice admin. It reads this documentation on its own before working on a campaign, and after each step it reads the campaign's readiness report and tells you what is missing before the campaign can be published.",[93,94,96],"h2",{"id":95},"editor-steps","Editor steps",[98,99,100,108,114,120,126,132,138,144],"ol",{},[101,102,103,107],"li",{},[104,105,106],"strong",{},"Campaign"," — name, public description, language, channels, cover images through temporary signed uploads.",[101,109,110,113],{},[104,111,112],{},"Recipients"," — prepare contacts and recipient lists, then select them in recipient groups and configure each group's channels.",[101,115,116,119],{},[104,117,118],{},"Prompt"," — the factual briefing the AI uses to write supporters' messages, plus facts and extra writing instructions.",[101,121,122,125],{},[104,123,124],{},"Custom questions"," — optional questions asked to supporters so their messages can be personalized.",[101,127,128,131],{},[104,129,130],{},"Content samples"," — example messages per group and channel, which set the tone of the generated messages.",[101,133,134,137],{},[104,135,136],{},"Settings"," — public URL, number of recipients per supporter, collective progress, related campaigns, success page action call, greetings.",[101,139,140,143],{},[104,141,142],{},"Review and publish"," — the automated quality review, then publication, which the assistant does on its own once the campaign is complete.",[101,145,146,149,150,154],{},[104,147,148],{},"Share"," — the campaign's public link, and the snippet to embed it on your website, following the ",[151,152,153],"a",{"href":49},"embed guide",".",[89,156,157,158,154],{},"Each step is described in ",[151,159,16],{"href":17},[93,161,26],{"id":162},"petitions",[89,164,165,166,169,170,173,174,177,178,180,181,183,184,186,187,154],{},"Your assistant also creates and edits petitions, following the five steps of the petition editor: ",[104,167,168],{},"Content"," (title, description, cover images through temporary signed uploads, and the full text as a link to another page or written in Activoice), ",[104,171,172],{},"Form"," (the header and optional fields of the signature form), ",[104,175,176],{},"Follow-up"," (the campaign offered right after signing), ",[104,179,136],{}," (URL, publication) and ",[104,182,148],{}," (public link and website embed). When it sets a follow-up campaign, it asks you whether that campaign should also invite its supporters to share the petition. Each step is described in ",[151,185,26],{"href":27},", and embedding a petition in ",[151,188,190],{"href":189},"\u002Fembed\u002Fguide#embedding-a-petition","the embed guide",[93,192,194],{"id":193},"tools","Tools",[196,197,198,211],"table",{},[199,200,201],"thead",{},[202,203,204,208],"tr",{},[205,206,207],"th",{},"Tool",[205,209,210],{},"What it does",[212,213,214,226,236,252,262,272,282,292,306,319,332,348,361,377,387,400,416,429,439,458,468,478,488,498,511,521,531],"tbody",{},[202,215,216,223],{},[217,218,219],"td",{},[220,221,222],"code",{},"list_organizations",[217,224,225],{},"Lists the organizations your account can access and identifies the one the assistant is working on.",[202,227,228,233],{},[217,229,230],{},[220,231,232],{},"switch_organization",[217,234,235],{},"Switches the assistant to an accessible organization at your request. Your admin keeps its own selection.",[202,237,238,243],{},[217,239,240],{},[220,241,242],{},"get_guide",[217,244,245,246,248,249,251],{},"Reads the documentation index and the pages relevant to your request: contact and list management here, or ",[151,247,16],{"href":17}," and ",[151,250,21],{"href":22}," for campaigns.",[202,253,254,259],{},[217,255,256],{},[220,257,258],{},"list_campaigns",[217,260,261],{},"Lists the organization's campaigns, with filters on name and state.",[202,263,264,269],{},[217,265,266],{},[220,267,268],{},"get_campaign",[217,270,271],{},"Reads a campaign with its recipient groups and readiness report.",[202,273,274,279],{},[217,275,276],{},[220,277,278],{},"create_campaign",[217,280,281],{},"Creates a campaign, always as a draft.",[202,283,284,289],{},[217,285,286],{},[220,287,288],{},"update_campaign",[217,290,291],{},"Changes campaign fields; publishes the campaign on its own once it is complete, ends it or puts it back to draft at your request.",[202,293,294,303],{},[217,295,296,299,300],{},[220,297,298],{},"prepare_campaign_cover_upload",", ",[220,301,302],{},"upload_campaign_cover_image",[217,304,305],{},"Prepares private temporary uploads and applies the validated campaign covers after the files are sent.",[202,307,308,316],{},[217,309,310,299,313],{},[220,311,312],{},"run_campaign_review",[220,314,315],{},"get_campaign_review",[217,317,318],{},"Runs the automated quality review and reads its results.",[202,320,321,329],{},[217,322,323,299,326],{},[220,324,325],{},"search_recipients",[220,327,328],{},"create_recipient",[217,330,331],{},"Finds decision makers and recipient lists in your contact book, or adds a missing one.",[202,333,334,345],{},[217,335,336,299,339,299,342],{},[220,337,338],{},"list_recipients",[220,340,341],{},"get_recipient",[220,343,344],{},"update_recipient",[217,346,347],{},"Browses contacts, reads a full contact and updates the fields you provide.",[202,349,350,358],{},[217,351,352,299,355],{},[220,353,354],{},"list_recipient_lists",[220,356,357],{},"get_recipient_list",[217,359,360],{},"Browses recipient lists and reads their metadata and member counts.",[202,362,363,374],{},[217,364,365,299,368,299,371],{},[220,366,367],{},"create_recipient_list",[220,369,370],{},"update_recipient_list",[220,372,373],{},"duplicate_recipient_list",[217,375,376],{},"Creates, edits or duplicates a recipient list. A duplicate reuses the existing contacts.",[202,378,379,384],{},[217,380,381],{},[220,382,383],{},"import_recipients_to_list",[217,385,386],{},"Creates or updates contacts and adds them to a list in batches of up to 100, using CSV import rules. Returns per-row results, errors and membership warnings.",[202,388,389,397],{},[217,390,391,299,394],{},[220,392,393],{},"add_recipient_to_lists",[220,395,396],{},"remove_recipient_from_lists",[217,398,399],{},"Adds a contact to selected lists or removes its memberships, preserving the contact and its other lists.",[202,401,402,413],{},[217,403,404,299,407,299,410],{},[220,405,406],{},"create_interpellation",[220,408,409],{},"update_interpellation",[220,411,412],{},"delete_interpellation",[217,414,415],{},"Manages recipient groups and their channel settings.",[202,417,418,426],{},[217,419,420,299,423],{},[220,421,422],{},"list_custom_questions",[220,424,425],{},"create_custom_question",[217,427,428],{},"Reuses or creates custom questions.",[202,430,431,436],{},[217,432,433],{},[220,434,435],{},"list_greetings",[217,437,438],{},"Lists the greeting formulas to attach to a campaign.",[202,440,441,455],{},[217,442,443,299,446,299,449,299,452],{},[220,444,445],{},"list_content_samples",[220,447,448],{},"create_content_sample",[220,450,451],{},"update_content_sample",[220,453,454],{},"delete_content_sample",[217,456,457],{},"Manages the example messages of a recipient group.",[202,459,460,465],{},[217,461,462],{},[220,463,464],{},"list_petitions",[217,466,467],{},"Lists the organization's petitions with their signature counts.",[202,469,470,475],{},[217,471,472],{},[220,473,474],{},"get_petition",[217,476,477],{},"Reads a petition with its readiness report.",[202,479,480,485],{},[217,481,482],{},[220,483,484],{},"create_petition",[217,486,487],{},"Creates a petition, always as a draft.",[202,489,490,495],{},[217,491,492],{},[220,493,494],{},"update_petition",[217,496,497],{},"Changes petition fields, including its follow-up campaign; publishes it once it is complete.",[202,499,500,508],{},[217,501,502,299,505],{},[220,503,504],{},"prepare_petition_cover_upload",[220,506,507],{},"upload_petition_cover_image",[217,509,510],{},"Prepares private temporary uploads and applies the validated petition covers after the files are sent.",[202,512,513,518],{},[217,514,515],{},[220,516,517],{},"get_texts",[217,519,520],{},"Reads the texts of your public pages in one language, with your versions.",[202,522,523,528],{},[217,524,525],{},[220,526,527],{},"set_texts",[217,529,530],{},"Rewords texts of your public pages, per language.",[202,532,533,538],{},[217,534,535],{},[220,536,537],{},"clean_texts",[217,539,540],{},"Removes your versions of texts the pages no longer have.",[89,542,543],{},"Tool names show up in your assistant's activity log; you never have to type them.",[93,545,547],{"id":546},"custom-texts","Custom texts",[89,549,550,551,154],{},"Your assistant can reword the texts of your public pages, such as buttons and step titles, for instance to address your supporters informally. See ",[151,552,36],{"href":37},[93,554,556],{"id":555},"contacts-and-lists","Contacts and lists",[89,558,559],{},"You can ask your assistant to search your contact book, create or update contacts, and collect them in a recipient list without creating a campaign. When you need it for a campaign, the assistant can attach the list to a recipient group. A list is reusable across campaigns; a recipient group belongs to one campaign and also holds its channel settings. Editing a contact or a list affects every campaign that uses it.",[89,561,562,563,565,566,569,570,299,573,299,576,299,579,248,582,585,586,588,589,591],{},"To read a list's members, your assistant uses ",[220,564,338],{}," with ",[220,567,568],{},"rlist"," set to the list ID. Both browsing tools return ",[220,571,572],{},"results",[220,574,575],{},"total",[220,577,578],{},"page",[220,580,581],{},"limit",[220,583,584],{},"next_page",". Pages start at 1, with 25 results by default and at most 100 per page. Your assistant follows ",[220,587,584],{}," until it is null. The quick ",[220,590,325],{}," tool keeps its limited, combined search results.",[89,593,594],{},"List metadata updates preserve the members; the assistant adds or removes memberships explicitly. Removing a member keeps the contact's record. All contact and list references must belong to the assistant's current organization: an invalid reference rejects the whole request before any membership changes.",[89,596,597,598,601,602,605],{},"Geolocated lists only keep contacts with geography data. When creating a list or adding a contact, ",[220,599,600],{},"membership_warnings"," identifies any excluded memberships with the ",[220,603,604],{},"missing_geolocation"," code. Clearing a contact's geography removes it from geolocated lists; enabling a list's geolocation removes members without geography. Your assistant reads the saved state after each change.",[607,608,610],"h3",{"id":609},"import-contacts-in-batches","Import contacts in batches",[89,612,613,614,616,617,619,620,299,623,299,626,299,629,248,632,635,636,639],{},"Use ",[220,615,354],{}," to find a destination, or ",[220,618,367],{}," to create one. Read your CSV, spreadsheet or other source and map its columns to contact fields such as ",[220,621,622],{},"email",[220,624,625],{},"first_name",[220,627,628],{},"last_name",[220,630,631],{},"phone_number",[220,633,634],{},"twitter_handle",". Existing custom-field slugs also work; unknown columns are ignored and reported. Send text or ",[220,637,638],{},"null"," values, keeping leading zeros and international phone prefixes.",[89,641,642,643,645,646,248,649,652,653,656,657,660,661,664],{},"Call ",[220,644,383],{}," with the destination's ",[220,647,648],{},"recipient_list_id",[104,650,651],{},"1 to 100"," entries in ",[220,654,655],{},"recipients",". Give each entry a unique, nonblank ",[220,658,659],{},"source_ref"," and a flat ",[220,662,663],{},"data"," object. Keep references tied to source rows so you can locate errors:",[666,667,672],"pre",{"className":668,"code":669,"language":670,"meta":671,"style":671},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"recipient_list_id\": \"00000000-0000-0000-0000-000000000001\",\n  \"recipients\": [\n    {\n      \"source_ref\": \"contacts.csv:2\",\n      \"data\": {\"email\": \"alex@example.org\", \"first_name\": \"Alex\", \"phone_number\": \"+33612345678\"}\n    }\n  ]\n}\n","json","",[220,673,674,683,710,724,730,752,820,826,832],{"__ignoreMap":671},[675,676,679],"span",{"class":677,"line":678},"line",1,[675,680,682],{"class":681},"sMK4o","{\n",[675,684,686,689,692,695,698,701,705,707],{"class":677,"line":685},2,[675,687,688],{"class":681},"  \"",[675,690,648],{"class":691},"spNyl",[675,693,694],{"class":681},"\"",[675,696,697],{"class":681},":",[675,699,700],{"class":681}," \"",[675,702,704],{"class":703},"sfazB","00000000-0000-0000-0000-000000000001",[675,706,694],{"class":681},[675,708,709],{"class":681},",\n",[675,711,713,715,717,719,721],{"class":677,"line":712},3,[675,714,688],{"class":681},[675,716,655],{"class":691},[675,718,694],{"class":681},[675,720,697],{"class":681},[675,722,723],{"class":681}," [\n",[675,725,727],{"class":677,"line":726},4,[675,728,729],{"class":681},"    {\n",[675,731,733,736,739,741,743,745,748,750],{"class":677,"line":732},5,[675,734,735],{"class":681},"      \"",[675,737,659],{"class":738},"sBMFI",[675,740,694],{"class":681},[675,742,697],{"class":681},[675,744,700],{"class":681},[675,746,747],{"class":703},"contacts.csv:2",[675,749,694],{"class":681},[675,751,709],{"class":681},[675,753,755,757,759,761,763,766,768,771,773,775,777,780,782,785,787,789,791,793,795,798,800,802,804,806,808,810,812,815,817],{"class":677,"line":754},6,[675,756,735],{"class":681},[675,758,663],{"class":738},[675,760,694],{"class":681},[675,762,697],{"class":681},[675,764,765],{"class":681}," {",[675,767,694],{"class":681},[675,769,622],{"class":770},"sbssI",[675,772,694],{"class":681},[675,774,697],{"class":681},[675,776,700],{"class":681},[675,778,779],{"class":703},"alex@example.org",[675,781,694],{"class":681},[675,783,784],{"class":681},",",[675,786,700],{"class":681},[675,788,625],{"class":770},[675,790,694],{"class":681},[675,792,697],{"class":681},[675,794,700],{"class":681},[675,796,797],{"class":703},"Alex",[675,799,694],{"class":681},[675,801,784],{"class":681},[675,803,700],{"class":681},[675,805,631],{"class":770},[675,807,694],{"class":681},[675,809,697],{"class":681},[675,811,700],{"class":681},[675,813,814],{"class":703},"+33612345678",[675,816,694],{"class":681},[675,818,819],{"class":681},"}\n",[675,821,823],{"class":677,"line":822},7,[675,824,825],{"class":681},"    }\n",[675,827,829],{"class":677,"line":828},8,[675,830,831],{"class":681},"  ]\n",[675,833,835],{"class":677,"line":834},9,[675,836,819],{"class":681},[89,838,839,840,248,843,846,847,299,850,853,854,857],{},"This uses the CSV import engine: matching email, social or link identifiers update existing contacts across their lists; empty or absent cells preserve existing values. The 100-row limit applies only to this MCP tool. CSV uploads in the Activoice admin have no row-count cap. To resolve geography, pass ",[220,841,842],{},"geo_type",[220,844,845],{},"geo_id_column"," together, and put each area's code in that data column (for example ",[220,848,849],{},"geo_type: \"commune_fr\"",[220,851,852],{},"geo_id_column: \"insee\"",", and ",[220,855,856],{},"\"insee\": \"01001\"",").",[89,859,860],{},"After each batch, read the result before continuing:",[862,863,864,889,909,931,941],"ul",{},[101,865,866,869,870,299,873,876,877,880,881,884,885,888],{},[220,867,868],{},"status"," is ",[220,871,872],{},"success",[220,874,875],{},"partial_success"," or ",[220,878,879],{},"failed",", based on rejected ",[104,882,883],{},"contact rows",". ",[220,886,887],{},"summary"," counts received, created, updated, unchanged and rejected rows, including repeated contacts.",[101,890,891,893,894,896,897,299,900,299,903,248,906,154],{},[220,892,572],{}," follows the input order and returns each ",[220,895,659],{},", contact status, saved ",[220,898,899],{},"recipient_id",[220,901,902],{},"membership_status",[220,904,905],{},"errors",[220,907,908],{},"warnings",[101,910,911,912,914,915,918,919,922,923,926,927,930],{},"Problems include a stable ",[220,913,220],{},", a ",[220,916,917],{},"message",", an ",[220,920,921],{},"action"," and relevant fields or conflicting contact IDs. Correct and resend ",[104,924,925],{},"only rejected rows",". For ",[220,928,929],{},"identifier_conflict",", inspect the matching contacts first; do not invent identifiers or merge contacts automatically.",[101,932,933,934,937,938,940],{},"A saved contact can have ",[220,935,936],{},"membership_status: \"rejected\""," when it lacks geography for a geolocated list. Use its ",[220,939,899],{}," to update its geography, then add it to the list. Contact success alone does not guarantee membership.",[101,942,943,944,947],{},"A row without an email, social or link identifier can still create a contact, as in CSV imports. Its ",[220,945,946],{},"missing_identifier"," warning means replaying it may create a duplicate; use the returned ID for later edits. A phone number alone is not a matching identifier.",[89,949,950],{},"An invalid batch envelope (including duplicate source references, more than 100 rows or incomplete geography options) or an inaccessible destination writes nothing. Invalid contact values reject their own rows while valid neighbors are saved.",[93,952,954],{"id":953},"cover-images","Cover images",[89,956,957,958,961,962,965],{},"For covers, your assistant first prepares an upload for each requested orientation, then sends each file as multipart HTTP POST to its returned URL using all returned form fields and the ",[220,959,960],{},"file"," field. It finishes by calling the cover upload tool with the resource ID and ",[220,963,964],{},"upload_token",". Signed uploads expire after 10 minutes; completion must happen within 30 minutes. Each file must be PNG, JPEG or WebP and no larger than 10 MB. Only the requested covers change. Retrying within the token lifetime does not replace the same published covers again. If a requested cover changed after preparation, prepare a new upload.",[89,967,968],{},"Temporary originals stay private and are deleted after completion, with automatic expiry as a fallback. The published covers are converted to JPEG and cropped within desktop 1920×1080 or mobile 1080×1920 bounds, without enlarging small images. Your assistant needs access to the actual file bytes and an HTTP upload tool; if it cannot send files, use the admin upload. Public image links are not accepted by the cover tools.",[93,970,972],{"id":971},"what-stays-in-your-activoice-admin","What stays in your Activoice admin",[89,974,975],{},"Some actions are not available to assistants and are done in the admin: configuring CRM integrations, connecting Stripe and the donation settings (assistants only switch the ask on per campaign or petition), duplicating or reordering recipient groups, deleting a campaign or a petition, reading, deleting and exporting petition signatures, changing the design settings (colors, logo, custom CSS), and reading analytics. Your assistant points you to the right page when one of these is needed.",[89,977,978,979,154],{},"Deleting contacts or recipient lists, using the generic list catalog, managing custom fields, AI contact enrichment, directly uploading or exporting CSV files, and uploading contact avatars also stay in the admin. Your assistant can read a CSV or spreadsheet and import its contacts as structured batches with ",[220,980,383],{},[93,982,984],{"id":983},"getting-good-results","Getting good results",[862,986,987,990,996],{},[101,988,989],{},"Give the assistant the facts: who should be convinced, of what, by when, and who your supporters are. It writes the briefing and the sample messages from what you tell it, and asks rather than inventing.",[101,991,992,993,995],{},"Read the sample messages it drafts before approving them: they set the tone of everything the AI will then write for your supporters. ",[151,994,21],{"href":22}," describes what they should look like.",[101,997,998,999,1001],{},"Once the readiness report is clean and the review has run, the assistant publishes the campaign without asking and gives you its public link. Ask it to put the campaign back to draft if you are not ready. Publishing is refused while the readiness report has an error; ",[151,1000,16],{"href":17}," lists what each step needs.",[1003,1004,1005],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":671,"searchDepth":685,"depth":685,"links":1007},[1008,1009,1010,1011,1012,1015,1016,1017],{"id":95,"depth":685,"text":96},{"id":162,"depth":685,"text":26},{"id":193,"depth":685,"text":194},{"id":546,"depth":685,"text":547},{"id":555,"depth":685,"text":556,"children":1013},[1014],{"id":609,"depth":712,"text":610},{"id":953,"depth":685,"text":954},{"id":971,"depth":685,"text":972},{"id":983,"depth":685,"text":984},"Manage contacts and recipient lists, campaigns and petitions with an AI assistant","md",null,{},{"icon":82},{"title":79,"description":1018},"hxpnDznkyeHN8oJ5DUsBnBmXTZ1J6mFOY0jzon2j4Ac",[1026,1020],{"title":74,"path":75,"stem":76,"description":1027,"icon":77,"children":-1},"Build and maintain campaigns from Claude, Cursor or any MCP-compatible AI assistant",1794579664082]