Propose a new campaign
propose_campaignCreates a proposal in Taseli for a new campaign on a topic, planned with AI from the business brief and memory. Google Ads: Search, Performance Max, Demand Gen or an App campaign for installs (type; left out, Taseli picks by the business and its stage; a Search campaign for a business paid by phone calls starts with its phone number as a call asset). Meta can also run call ads (route call) or store-visit ads (route store). The owner's explicit choices (type, daily budget, route, match, bidding) are honored even against Taseli's advice: the advice comes back once in the answer; only what the platform itself can't run is refused. Meta: a whole Facebook + Instagram campaign from scratch (WhatsApp, an instant form or the website; 2-3 ads from the business's best pictures; a broad audience in its area), also for an empty account. TikTok: a whole TikTok campaign from scratch (purchases or leads counted by the pixel, an instant form, or visits; 1-3 vertical videos, or the owner's own post as a Spark ad with spark_code), also for an empty account. The owner approves it in Taseli; it is built switched off and spends nothing until turned on. Nothing changes in the ad account here. Not on read-only accounts. Creatives for Meta and TikTok campaigns come from the library, by id. The same request_id (or the same topic while the first proposal is still open) returns the same proposal.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"topic": "<topic>"
},
"name": "propose_campaign"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Google Ads only: the campaign type, when the owner chose one. app: an App campaign for installs of the business's app (needs app_url or a saved store link, and installs counted through Firebase or the app's measurement partner; the answer says what is missing). | |
| match | No | Google Search only: the keyword match type, when the owner chose one. | |
| route | No | Meta and TikTok: where people go, when the owner chose (TikTok: form, site_leads, site_sales or traffic). Meta call: a call button that dials the business (needs its phone number); Meta store: people to the nearest branch (needs the business's locations in Meta). Both need the goal model on. | |
| topic | Yes | What the campaign is about, e.g. 'bathroom remodels'. | |
| ad_set | No | Meta only: a running ad set (exact name or id) to add 1-3 new ads into instead of building a new campaign. | |
| account | No | The Google Ads, Meta or TikTok account's name (or id); needed when the business has more than one. | |
| app_url | No | Google App campaign only: the app's store page (Google Play or App Store link). | |
| bidding | No | Google Search only: the bidding, when the owner chose one. | |
| page_id | No | Meta only: the Facebook Page the ads speak as (id or exact name), when the answer listed several and the owner chose. | |
| language | No | Answer language. The business's language by default. | |
| request_id | No | Optional idempotency key, up to 64 characters: a retry with the same key never makes a second proposal. | |
| spark_code | No | TikTok only: a Spark Ads code the owner made for one of their own TikTok posts. | |
| privacy_url | No | Meta only: the owner's privacy policy link, for an instant form. | |
| creative_ids | No | Meta and TikTok: library creatives to use (creative ids; videos for TikTok). A Google build picks the library's pictures and videos itself (videos need no YouTube channel). | |
| daily_budget | No | The owner's own daily budget, in the account's currency (Google, Meta and TikTok). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| error | No | ||
| advice | No | ||
| detail | No | ||
| account | No | ||
| accounts | No | ||
| proposalId | No | ||
| approvalUrl | No |