autotouch-cli 0.2.58__tar.gz → 0.2.59__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/PKG-INFO +1 -1
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/cli.py +10 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/commands/sequences.py +123 -17
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/commands/tasks.py +98 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/core/http.py +8 -2
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/data/CLI_REFERENCE.md +193 -11
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/data/cli-manifest.json +1124 -15
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/parser.py +5 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/parser_groups.py +56 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/sequence_support.py +36 -2
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/templates.py +39 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli.egg-info/PKG-INFO +1 -1
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_shared/provider_registry.py +20 -1
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/pyproject.toml +1 -1
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/MANIFEST.in +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/README.md +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/__init__.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/cli_contracts.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/commands/__init__.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/commands/auth.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/commands/cells.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/commands/columns.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/commands/jobs.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/commands/leads.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/commands/linkedin.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/commands/prompts.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/commands/rows.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/commands/search.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/commands/tables.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/commands/webhooks.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/commands/workspace_secrets.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/core/__init__.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/core/auth.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/core/config.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/core/csv_import.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/core/io.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/core/output.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/core/polling.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/core/run.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/core/validation.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/exceptions.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli/mongo_status.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli.egg-info/SOURCES.txt +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli.egg-info/dependency_links.txt +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli.egg-info/entry_points.txt +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli.egg-info/requires.txt +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_cli.egg-info/top_level.txt +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_shared/__init__.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_shared/linkedin_contract.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/autotouch_shared/search_contract.py +0 -0
- {autotouch_cli-0.2.58 → autotouch_cli-0.2.59}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: autotouch-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.59
|
|
4
4
|
Summary: Autotouch Smart Table CLI
|
|
5
5
|
Project-URL: Homepage, https://app.autotouch.ai
|
|
6
6
|
Project-URL: Documentation, https://github.com/nicolonic/autotouch_main/tree/main/docs/research-table/reference
|
|
@@ -158,9 +158,14 @@ from autotouch_cli.commands.tasks import (
|
|
|
158
158
|
cmd_tasks_delete as cmd_tasks_delete_impl,
|
|
159
159
|
cmd_tasks_draft as cmd_tasks_draft_impl,
|
|
160
160
|
cmd_tasks_get as cmd_tasks_get_impl,
|
|
161
|
+
cmd_tasks_prioritize_email as cmd_tasks_prioritize_email_impl,
|
|
162
|
+
cmd_tasks_prioritize_linkedin as cmd_tasks_prioritize_linkedin_impl,
|
|
161
163
|
cmd_tasks_query as cmd_tasks_query_impl,
|
|
162
164
|
cmd_tasks_recipe as cmd_tasks_recipe_impl,
|
|
165
|
+
cmd_tasks_reschedule_email as cmd_tasks_reschedule_email_impl,
|
|
166
|
+
cmd_tasks_reschedule_linkedin as cmd_tasks_reschedule_linkedin_impl,
|
|
163
167
|
cmd_tasks_schedule_email as cmd_tasks_schedule_email_impl,
|
|
168
|
+
cmd_tasks_schedule_linkedin as cmd_tasks_schedule_linkedin_impl,
|
|
164
169
|
cmd_tasks_stats as cmd_tasks_stats_impl,
|
|
165
170
|
cmd_tasks_update as cmd_tasks_update_impl,
|
|
166
171
|
)
|
|
@@ -1460,6 +1465,11 @@ _register("tasks_bulk_update", cmd_tasks_bulk_update_impl, _task_command_runtime
|
|
|
1460
1465
|
_register("tasks_bulk_delete", cmd_tasks_bulk_delete_impl, _task_command_runtime)
|
|
1461
1466
|
_register("tasks_draft", cmd_tasks_draft_impl, _task_command_runtime)
|
|
1462
1467
|
_register("tasks_schedule_email", cmd_tasks_schedule_email_impl, _task_command_runtime)
|
|
1468
|
+
_register("tasks_prioritize_email", cmd_tasks_prioritize_email_impl, _task_command_runtime)
|
|
1469
|
+
_register("tasks_reschedule_email", cmd_tasks_reschedule_email_impl, _task_command_runtime)
|
|
1470
|
+
_register("tasks_schedule_linkedin", cmd_tasks_schedule_linkedin_impl, _task_command_runtime)
|
|
1471
|
+
_register("tasks_prioritize_linkedin", cmd_tasks_prioritize_linkedin_impl, _task_command_runtime)
|
|
1472
|
+
_register("tasks_reschedule_linkedin", cmd_tasks_reschedule_linkedin_impl, _task_command_runtime)
|
|
1463
1473
|
_register("tasks_recipe", cmd_tasks_recipe_impl, _task_command_runtime)
|
|
1464
1474
|
|
|
1465
1475
|
# -- Webhook commands --
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import argparse
|
|
4
|
+
import json
|
|
5
|
+
import sys
|
|
4
6
|
from dataclasses import dataclass
|
|
5
7
|
from typing import Any, Callable, Dict, Optional, Sequence
|
|
6
8
|
|
|
@@ -30,6 +32,51 @@ class SequenceCommandRuntime:
|
|
|
30
32
|
sequence_runtime_factory: Callable[[], SequenceRuntime]
|
|
31
33
|
|
|
32
34
|
|
|
35
|
+
def _sequence_enroll_research_context(payload: Dict[str, Any]) -> Optional[Dict[str, Any]]:
|
|
36
|
+
research_context = payload.get("researchContext")
|
|
37
|
+
return research_context if isinstance(research_context, dict) else None
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _sequence_enroll_output_hints(payload: Dict[str, Any]) -> Dict[str, Any]:
|
|
41
|
+
research_context = _sequence_enroll_research_context(payload) or {}
|
|
42
|
+
source_table_id = str(
|
|
43
|
+
research_context.get("sourceTableId")
|
|
44
|
+
or research_context.get("source_table_id")
|
|
45
|
+
or ""
|
|
46
|
+
).strip() or None
|
|
47
|
+
attached = bool(research_context)
|
|
48
|
+
|
|
49
|
+
if attached:
|
|
50
|
+
context_hint = (
|
|
51
|
+
"Attached research context will follow later tasks, sidecar views, and AI drafts"
|
|
52
|
+
+ (f" using table {source_table_id}." if source_table_id else ".")
|
|
53
|
+
)
|
|
54
|
+
else:
|
|
55
|
+
context_hint = (
|
|
56
|
+
"No research context is attached; later tasks and AI drafts will use lead/company context only."
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
return {
|
|
60
|
+
"research_context_attached": attached,
|
|
61
|
+
"research_context_table_id": source_table_id,
|
|
62
|
+
"context_hint": context_hint,
|
|
63
|
+
"workflow_hint": (
|
|
64
|
+
"Direct enroll is best for one-off/manual adds. Use add_to_sequence when rows should "
|
|
65
|
+
"auto-enroll from a research table over time."
|
|
66
|
+
),
|
|
67
|
+
"personalization_hint": (
|
|
68
|
+
"Attached research context does not personalize copy by itself; static copy stays the same "
|
|
69
|
+
"unless the sequence uses variables or AI draft steps."
|
|
70
|
+
),
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def _attach_sequence_enroll_hints(output: Dict[str, Any], payload: Dict[str, Any]) -> Dict[str, Any]:
|
|
75
|
+
enriched = dict(output)
|
|
76
|
+
enriched.update(_sequence_enroll_output_hints(payload))
|
|
77
|
+
return enriched
|
|
78
|
+
|
|
79
|
+
|
|
33
80
|
def _sequence_mutation_params(args: argparse.Namespace) -> Optional[Dict[str, Any]]:
|
|
34
81
|
return sequence_mutation_params_impl(args)
|
|
35
82
|
|
|
@@ -148,17 +195,41 @@ def cmd_sequences_update(args: argparse.Namespace, *, runtime: SequenceCommandRu
|
|
|
148
195
|
if not isinstance(payload, dict):
|
|
149
196
|
raise AutotouchInputError("sequence update requires --data-json/--data-file with a JSON object")
|
|
150
197
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
198
|
+
try:
|
|
199
|
+
data = runtime.request_api(
|
|
200
|
+
"PUT",
|
|
201
|
+
f"/api/sequences/{args.sequence_id}",
|
|
202
|
+
base_url=args.base_url,
|
|
203
|
+
token=token,
|
|
204
|
+
use_x_api_key=args.use_x_api_key,
|
|
205
|
+
params=_sequence_mutation_params(args),
|
|
206
|
+
payload=payload,
|
|
207
|
+
timeout=args.timeout,
|
|
208
|
+
verbose=args.verbose,
|
|
209
|
+
)
|
|
210
|
+
except AutotouchAPIError as exc:
|
|
211
|
+
if exc.status_code == 409 and exc.response_body:
|
|
212
|
+
try:
|
|
213
|
+
body = json.loads(exc.response_body)
|
|
214
|
+
except Exception:
|
|
215
|
+
body = None
|
|
216
|
+
if isinstance(body, dict) and str(body.get("error") or "").strip() == "delivery_edit_locked":
|
|
217
|
+
message = str(body.get("message") or "Cannot change delivery backend because this sequence has in-flight email work.").strip()
|
|
218
|
+
policy = body.get("deliveryEditPolicy") if isinstance(body.get("deliveryEditPolicy"), dict) else {}
|
|
219
|
+
enrollment_count = int(policy.get("inFlightEnrollmentCount") or 0)
|
|
220
|
+
task_count = int(policy.get("activeEmailTaskCount") or 0)
|
|
221
|
+
outbox_count = int(policy.get("activeEmailOutboxCount") or 0)
|
|
222
|
+
print(f"ERROR: {message}", file=sys.stderr)
|
|
223
|
+
print(
|
|
224
|
+
f"Counts: active enrollments={enrollment_count}, email tasks={task_count}, queued email jobs={outbox_count}",
|
|
225
|
+
file=sys.stderr,
|
|
226
|
+
)
|
|
227
|
+
print(
|
|
228
|
+
f"Hint: clone the sequence with `autotouch sequences clone --sequence-id {args.sequence_id}` and apply the delivery change there.",
|
|
229
|
+
file=sys.stderr,
|
|
230
|
+
)
|
|
231
|
+
raise AutotouchAPIError(message, status_code=exc.status_code, response_body=exc.response_body) from exc
|
|
232
|
+
raise
|
|
162
233
|
runtime.print_json(data, args.compact)
|
|
163
234
|
|
|
164
235
|
|
|
@@ -258,6 +329,7 @@ def cmd_sequences_enroll(args: argparse.Namespace, *, runtime: SequenceCommandRu
|
|
|
258
329
|
output.setdefault("job_id", job_id)
|
|
259
330
|
output["job_status_url"] = status_url
|
|
260
331
|
output["watch_command"] = watch_command
|
|
332
|
+
output = _attach_sequence_enroll_hints(output, payload)
|
|
261
333
|
runtime.print_json(output, args.compact)
|
|
262
334
|
return
|
|
263
335
|
|
|
@@ -306,6 +378,7 @@ def cmd_sequences_enroll(args: argparse.Namespace, *, runtime: SequenceCommandRu
|
|
|
306
378
|
"timed_out": timed_out,
|
|
307
379
|
"polls": int(poll_result.get("polls") or 0),
|
|
308
380
|
}
|
|
381
|
+
output = _attach_sequence_enroll_hints(output, payload)
|
|
309
382
|
runtime.print_json(output, args.compact)
|
|
310
383
|
|
|
311
384
|
if timed_out:
|
|
@@ -386,7 +459,10 @@ def register_sequences_subcommands(
|
|
|
386
459
|
add_api_common_arguments(psqc)
|
|
387
460
|
psqc.set_defaults(func=handlers["create"])
|
|
388
461
|
|
|
389
|
-
psqu = sequences_sub.add_parser(
|
|
462
|
+
psqu = sequences_sub.add_parser(
|
|
463
|
+
"update",
|
|
464
|
+
help="Update a sequence from a JSON payload (schedule changes may rewindow unsent scheduled work)",
|
|
465
|
+
)
|
|
390
466
|
psqu.add_argument("--sequence-id", required=True)
|
|
391
467
|
psqu.add_argument("--data-json", help="Sequence update payload JSON")
|
|
392
468
|
psqu.add_argument("--data-file", help="Sequence update payload file path")
|
|
@@ -432,10 +508,17 @@ def register_sequences_subcommands(
|
|
|
432
508
|
add_api_common_arguments(psqar)
|
|
433
509
|
psqar.set_defaults(func=handlers["status"], target_status="ARCHIVED")
|
|
434
510
|
|
|
435
|
-
psqe = sequences_sub.add_parser(
|
|
511
|
+
psqe = sequences_sub.add_parser(
|
|
512
|
+
"enroll",
|
|
513
|
+
help="Enroll leads into a sequence (best for one-off/manual adds)",
|
|
514
|
+
description=(
|
|
515
|
+
"Direct enroll is best for one-off/manual adds. Use add_to_sequence when rows should "
|
|
516
|
+
"auto-enroll from a research table over time."
|
|
517
|
+
),
|
|
518
|
+
)
|
|
436
519
|
psqe.add_argument("--sequence-id", required=True)
|
|
437
|
-
psqe.add_argument("--data-json", help="Full enroll payload JSON")
|
|
438
|
-
psqe.add_argument("--data-file", help="Full enroll payload JSON file")
|
|
520
|
+
psqe.add_argument("--data-json", help="Full enroll payload JSON (advanced; overrides simpler flags)")
|
|
521
|
+
psqe.add_argument("--data-file", help="Full enroll payload JSON file (advanced; overrides simpler flags)")
|
|
439
522
|
psqe.add_argument(
|
|
440
523
|
"--lead-id",
|
|
441
524
|
action="append",
|
|
@@ -445,8 +528,31 @@ def register_sequences_subcommands(
|
|
|
445
528
|
psqe.add_argument("--lead-ids-file", help="Path to JSON/TXT/CSV file with lead ids")
|
|
446
529
|
psqe.add_argument("--lead-ids-column", default="lead_id", help="CSV column for lead ids (default: lead_id)")
|
|
447
530
|
psqe.add_argument("--start-date", help="Optional startDate ISO timestamp")
|
|
448
|
-
psqe.add_argument(
|
|
449
|
-
|
|
531
|
+
psqe.add_argument(
|
|
532
|
+
"--research-context-json",
|
|
533
|
+
"--attach-research-context-json",
|
|
534
|
+
dest="research_context_json",
|
|
535
|
+
help="Advanced raw researchContext JSON for workflow-scoped table context",
|
|
536
|
+
)
|
|
537
|
+
psqe.add_argument(
|
|
538
|
+
"--research-context-file",
|
|
539
|
+
"--attach-research-context-file",
|
|
540
|
+
dest="research_context_file",
|
|
541
|
+
help="Advanced raw researchContext JSON file for workflow-scoped table context",
|
|
542
|
+
)
|
|
543
|
+
psqe.add_argument(
|
|
544
|
+
"--attach-research-table-id",
|
|
545
|
+
help="Attach research context from this table for later tasks, sidecar views, and AI drafts",
|
|
546
|
+
)
|
|
547
|
+
psqe.add_argument(
|
|
548
|
+
"--attach-research-table-name",
|
|
549
|
+
help="Optional source table name to store alongside attached research context",
|
|
550
|
+
)
|
|
551
|
+
psqe.add_argument(
|
|
552
|
+
"--attach-research-field-id",
|
|
553
|
+
action="append",
|
|
554
|
+
help="Optional research field id to keep in attached context (repeatable; comma-separated also supported)",
|
|
555
|
+
)
|
|
450
556
|
psqe.add_argument("--variable-map-json", help="variableMap JSON")
|
|
451
557
|
psqe.add_argument("--variable-map-file", help="variableMap JSON file")
|
|
452
558
|
psqe.add_argument("--variable-overrides-json", help="variableOverrides JSON")
|
|
@@ -231,3 +231,101 @@ def cmd_tasks_schedule_email(args: argparse.Namespace, *, runtime: TaskCommandRu
|
|
|
231
231
|
verbose=args.verbose,
|
|
232
232
|
)
|
|
233
233
|
runtime.print_json(data, args.compact)
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
def cmd_tasks_prioritize_email(args: argparse.Namespace, *, runtime: TaskCommandRuntime) -> None:
|
|
237
|
+
token = runtime.resolve_token(args.token, required=True)
|
|
238
|
+
data = runtime.request_api(
|
|
239
|
+
"POST",
|
|
240
|
+
f"/api/task-queue/{args.task_id}/email/prioritize",
|
|
241
|
+
base_url=args.base_url,
|
|
242
|
+
token=token,
|
|
243
|
+
use_x_api_key=args.use_x_api_key,
|
|
244
|
+
params=_task_mutation_params(args),
|
|
245
|
+
timeout=args.timeout,
|
|
246
|
+
verbose=args.verbose,
|
|
247
|
+
)
|
|
248
|
+
runtime.print_json(data, args.compact)
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
def cmd_tasks_reschedule_email(args: argparse.Namespace, *, runtime: TaskCommandRuntime) -> None:
|
|
252
|
+
token = runtime.resolve_token(args.token, required=True)
|
|
253
|
+
payload = runtime.load_required_object_payload(args, noun="task email reschedule")
|
|
254
|
+
data = runtime.request_api(
|
|
255
|
+
"POST",
|
|
256
|
+
f"/api/task-queue/{args.task_id}/email/reschedule",
|
|
257
|
+
base_url=args.base_url,
|
|
258
|
+
token=token,
|
|
259
|
+
use_x_api_key=args.use_x_api_key,
|
|
260
|
+
params=_task_mutation_params(args),
|
|
261
|
+
payload=payload,
|
|
262
|
+
timeout=args.timeout,
|
|
263
|
+
verbose=args.verbose,
|
|
264
|
+
)
|
|
265
|
+
runtime.print_json(data, args.compact)
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
def _load_optional_task_payload(
|
|
269
|
+
args: argparse.Namespace,
|
|
270
|
+
*,
|
|
271
|
+
runtime: TaskCommandRuntime,
|
|
272
|
+
noun: str,
|
|
273
|
+
) -> Dict[str, Any]:
|
|
274
|
+
payload = runtime.load_json_input(
|
|
275
|
+
inline_json=getattr(args, "data_json", None),
|
|
276
|
+
file_path=getattr(args, "data_file", None),
|
|
277
|
+
context="data",
|
|
278
|
+
default={},
|
|
279
|
+
)
|
|
280
|
+
if not isinstance(payload, dict):
|
|
281
|
+
raise AutotouchInputError(f"{noun} payload must be a JSON object")
|
|
282
|
+
return payload
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
def cmd_tasks_schedule_linkedin(args: argparse.Namespace, *, runtime: TaskCommandRuntime) -> None:
|
|
286
|
+
token = runtime.resolve_token(args.token, required=True)
|
|
287
|
+
payload = _load_optional_task_payload(args, runtime=runtime, noun="task linkedin schedule")
|
|
288
|
+
data = runtime.request_api(
|
|
289
|
+
"POST",
|
|
290
|
+
f"/api/task-queue/{args.task_id}/linkedin/schedule",
|
|
291
|
+
base_url=args.base_url,
|
|
292
|
+
token=token,
|
|
293
|
+
use_x_api_key=args.use_x_api_key,
|
|
294
|
+
params=_task_mutation_params(args),
|
|
295
|
+
payload=payload,
|
|
296
|
+
timeout=args.timeout,
|
|
297
|
+
verbose=args.verbose,
|
|
298
|
+
)
|
|
299
|
+
runtime.print_json(data, args.compact)
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
def cmd_tasks_prioritize_linkedin(args: argparse.Namespace, *, runtime: TaskCommandRuntime) -> None:
|
|
303
|
+
token = runtime.resolve_token(args.token, required=True)
|
|
304
|
+
data = runtime.request_api(
|
|
305
|
+
"POST",
|
|
306
|
+
f"/api/task-queue/{args.task_id}/linkedin/prioritize",
|
|
307
|
+
base_url=args.base_url,
|
|
308
|
+
token=token,
|
|
309
|
+
use_x_api_key=args.use_x_api_key,
|
|
310
|
+
params=_task_mutation_params(args),
|
|
311
|
+
timeout=args.timeout,
|
|
312
|
+
verbose=args.verbose,
|
|
313
|
+
)
|
|
314
|
+
runtime.print_json(data, args.compact)
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
def cmd_tasks_reschedule_linkedin(args: argparse.Namespace, *, runtime: TaskCommandRuntime) -> None:
|
|
318
|
+
token = runtime.resolve_token(args.token, required=True)
|
|
319
|
+
payload = runtime.load_required_object_payload(args, noun="task linkedin reschedule")
|
|
320
|
+
data = runtime.request_api(
|
|
321
|
+
"POST",
|
|
322
|
+
f"/api/task-queue/{args.task_id}/linkedin/reschedule",
|
|
323
|
+
base_url=args.base_url,
|
|
324
|
+
token=token,
|
|
325
|
+
use_x_api_key=args.use_x_api_key,
|
|
326
|
+
params=_task_mutation_params(args),
|
|
327
|
+
payload=payload,
|
|
328
|
+
timeout=args.timeout,
|
|
329
|
+
verbose=args.verbose,
|
|
330
|
+
)
|
|
331
|
+
runtime.print_json(data, args.compact)
|
|
@@ -54,6 +54,12 @@ def _print_error_body(body: Any) -> None:
|
|
|
54
54
|
print(str(body), file=sys.stderr)
|
|
55
55
|
|
|
56
56
|
|
|
57
|
+
def _serialize_error_body(body: Any) -> str:
|
|
58
|
+
if isinstance(body, (dict, list)):
|
|
59
|
+
return json.dumps(body, default=str)
|
|
60
|
+
return str(body)
|
|
61
|
+
|
|
62
|
+
|
|
57
63
|
def request_api(
|
|
58
64
|
method: str,
|
|
59
65
|
path: str,
|
|
@@ -129,7 +135,7 @@ def request_api(
|
|
|
129
135
|
raise AutotouchAPIError(
|
|
130
136
|
f"API {response.status_code}",
|
|
131
137
|
status_code=response.status_code,
|
|
132
|
-
response_body=
|
|
138
|
+
response_body=_serialize_error_body(body),
|
|
133
139
|
)
|
|
134
140
|
return body
|
|
135
141
|
|
|
@@ -212,6 +218,6 @@ def request_multipart_api(
|
|
|
212
218
|
raise AutotouchAPIError(
|
|
213
219
|
f"API {response.status_code}",
|
|
214
220
|
status_code=response.status_code,
|
|
215
|
-
response_body=
|
|
221
|
+
response_body=_serialize_error_body(body),
|
|
216
222
|
)
|
|
217
223
|
return body
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Autotouch CLI Reference
|
|
2
2
|
|
|
3
|
-
Generated from the installed parser for `autotouch-cli` `0.2.
|
|
3
|
+
Generated from the installed parser for `autotouch-cli` `0.2.59`.
|
|
4
4
|
Manifest schema version: `2`.
|
|
5
5
|
|
|
6
6
|
## Output Modes
|
|
@@ -3590,7 +3590,9 @@ Check sequence email delivery readiness
|
|
|
3590
3590
|
|
|
3591
3591
|
#### `autotouch sequences enroll`
|
|
3592
3592
|
|
|
3593
|
-
Enroll leads into a sequence
|
|
3593
|
+
Enroll leads into a sequence (best for one-off/manual adds)
|
|
3594
|
+
|
|
3595
|
+
Direct enroll is best for one-off/manual adds. Use add_to_sequence when rows should auto-enroll from a research table over time.
|
|
3594
3596
|
|
|
3595
3597
|
- Auth: `developer_key_or_user_session`
|
|
3596
3598
|
- Stability: `stable`
|
|
@@ -3607,6 +3609,9 @@ Enroll leads into a sequence
|
|
|
3607
3609
|
[--start-date START_DATE]
|
|
3608
3610
|
[--research-context-json RESEARCH_CONTEXT_JSON]
|
|
3609
3611
|
[--research-context-file RESEARCH_CONTEXT_FILE]
|
|
3612
|
+
[--attach-research-table-id ATTACH_RESEARCH_TABLE_ID]
|
|
3613
|
+
[--attach-research-table-name ATTACH_RESEARCH_TABLE_NAME]
|
|
3614
|
+
[--attach-research-field-id ATTACH_RESEARCH_FIELD_ID]
|
|
3610
3615
|
[--variable-map-json VARIABLE_MAP_JSON]
|
|
3611
3616
|
[--variable-map-file VARIABLE_MAP_FILE]
|
|
3612
3617
|
[--variable-overrides-json VARIABLE_OVERRIDES_JSON]
|
|
@@ -3625,15 +3630,18 @@ Enroll leads into a sequence
|
|
|
3625
3630
|
--json-pointer JSON_POINTER] [--verbose]`
|
|
3626
3631
|
- Options:
|
|
3627
3632
|
- `--sequence-id` (required; kind=string)
|
|
3628
|
-
- `--data-json` (kind=json; input=json): Full enroll payload JSON
|
|
3629
|
-
- `--data-file` (kind=file; input=file): Full enroll payload JSON file
|
|
3633
|
+
- `--data-json` (kind=json; input=json): Full enroll payload JSON (advanced; overrides simpler flags)
|
|
3634
|
+
- `--data-file` (kind=file; input=file): Full enroll payload JSON file (advanced; overrides simpler flags)
|
|
3630
3635
|
- `--lead-id` (kind=string; repeatable; comma-separated): Lead id to enroll (repeatable; comma-separated also supported)
|
|
3631
3636
|
- `--lead-ids-json` (kind=json; input=json): JSON array or object with leadIds[]
|
|
3632
3637
|
- `--lead-ids-file` (kind=file; input=file): Path to JSON/TXT/CSV file with lead ids
|
|
3633
3638
|
- `--lead-ids-column` (kind=string; default=lead_id): CSV column for lead ids (default: lead_id)
|
|
3634
3639
|
- `--start-date` (kind=string): Optional startDate ISO timestamp
|
|
3635
|
-
- `--research-context-json` (kind=json; input=json): researchContext JSON
|
|
3636
|
-
- `--research-context-file` (kind=file; input=file): researchContext JSON file
|
|
3640
|
+
- `--research-context-json, --attach-research-context-json` (kind=json; input=json): Advanced raw researchContext JSON for workflow-scoped table context
|
|
3641
|
+
- `--research-context-file, --attach-research-context-file` (kind=file; input=file): Advanced raw researchContext JSON file for workflow-scoped table context
|
|
3642
|
+
- `--attach-research-table-id` (kind=string): Attach research context from this table for later tasks, sidecar views, and AI drafts
|
|
3643
|
+
- `--attach-research-table-name` (kind=string): Optional source table name to store alongside attached research context
|
|
3644
|
+
- `--attach-research-field-id` (kind=string; repeatable; comma-separated): Optional research field id to keep in attached context (repeatable; comma-separated also supported)
|
|
3637
3645
|
- `--variable-map-json` (kind=json; input=json): variableMap JSON
|
|
3638
3646
|
- `--variable-map-file` (kind=file; input=file): variableMap JSON file
|
|
3639
3647
|
- `--variable-overrides-json` (kind=json; input=json): variableOverrides JSON
|
|
@@ -3869,7 +3877,7 @@ Set sequence status
|
|
|
3869
3877
|
|
|
3870
3878
|
#### `autotouch sequences update`
|
|
3871
3879
|
|
|
3872
|
-
Update a sequence from a JSON payload
|
|
3880
|
+
Update a sequence from a JSON payload (schedule changes may rewindow unsent scheduled work)
|
|
3873
3881
|
|
|
3874
3882
|
- Auth: `developer_key_or_user_session`
|
|
3875
3883
|
- Stability: `stable`
|
|
@@ -4229,10 +4237,10 @@ Task queue operations
|
|
|
4229
4237
|
- Auth: `varies_by_subcommand`
|
|
4230
4238
|
- Stability: `stable`
|
|
4231
4239
|
- Destructive: `no`
|
|
4232
|
-
- Subcommands: `recipe, query, count, assignee-counts, get, stats, create, update, delete, bulk-update, bulk-delete, draft, schedule-email`
|
|
4240
|
+
- Subcommands: `recipe, query, count, assignee-counts, get, stats, create, update, delete, bulk-update, bulk-delete, draft, schedule-email, prioritize-email, reschedule-email, schedule-linkedin, prioritize-linkedin, reschedule-linkedin`
|
|
4233
4241
|
- Example:
|
|
4234
4242
|
- `autotouch tasks [-h]
|
|
4235
|
-
{recipe,query,count,assignee-counts,get,stats,create,update,delete,bulk-update,bulk-delete,draft,schedule-email,email-schedule} ...`
|
|
4243
|
+
{recipe,query,count,assignee-counts,get,stats,create,update,delete,bulk-update,bulk-delete,draft,schedule-email,email-schedule,prioritize-email,email-prioritize,reschedule-email,email-reschedule,schedule-linkedin,linkedin-schedule,prioritize-linkedin,linkedin-prioritize,reschedule-linkedin,linkedin-reschedule} ...`
|
|
4236
4244
|
|
|
4237
4245
|
#### `autotouch tasks assignee-counts`
|
|
4238
4246
|
|
|
@@ -4477,6 +4485,71 @@ Get one task by id
|
|
|
4477
4485
|
- `--json-pointer` (kind=string): Extract a JSON pointer from the final result (for example: /id)
|
|
4478
4486
|
- `--verbose` (kind=boolean; when omitted=False; when present=True): Print request metadata to stderr
|
|
4479
4487
|
|
|
4488
|
+
#### `autotouch tasks prioritize-email`
|
|
4489
|
+
|
|
4490
|
+
Move an email task to the earliest legal send slot
|
|
4491
|
+
|
|
4492
|
+
- Auth: `developer_key_or_user_session`
|
|
4493
|
+
- Stability: `stable`
|
|
4494
|
+
- Destructive: `no`
|
|
4495
|
+
- Aliases: `email-prioritize`
|
|
4496
|
+
- Required flags: `--task-id`
|
|
4497
|
+
- Output modes: `json, ndjson, human`
|
|
4498
|
+
- Example:
|
|
4499
|
+
- `autotouch tasks prioritize-email [-h] --task-id TASK_ID
|
|
4500
|
+
[--actor-user-id ACTOR_USER_ID]
|
|
4501
|
+
[--base-url BASE_URL] [--token TOKEN]
|
|
4502
|
+
[--use-x-api-key] [--timeout TIMEOUT]
|
|
4503
|
+
[--output {json,ndjson,human}]
|
|
4504
|
+
[--compact] [--select SELECT |
|
|
4505
|
+
--json-pointer JSON_POINTER]
|
|
4506
|
+
[--verbose]`
|
|
4507
|
+
- Options:
|
|
4508
|
+
- `--task-id` (required; kind=string)
|
|
4509
|
+
- `--actor-user-id` (kind=string): Optional actor override; must resolve to an active user in the same organization
|
|
4510
|
+
- `--base-url` (kind=string; default=https://app.autotouch.ai): API base URL (default: https://app.autotouch.ai)
|
|
4511
|
+
- `--token` (kind=string; sensitive): Developer API key / JWT token
|
|
4512
|
+
- `--use-x-api-key` (kind=boolean; when omitted=False; when present=True): Send token via X-API-Key header
|
|
4513
|
+
- `--timeout` (kind=integer; default=30): HTTP timeout in seconds
|
|
4514
|
+
- `--output` (kind=string; choices=json,ndjson,human; default=json): Output mode
|
|
4515
|
+
- `--compact` (kind=boolean; when omitted=False; when present=True): Print compact JSON
|
|
4516
|
+
- `--select` (kind=string): Extract a dotted field path from the final result (for example: id or items.0.id)
|
|
4517
|
+
- `--json-pointer` (kind=string): Extract a JSON pointer from the final result (for example: /id)
|
|
4518
|
+
- `--verbose` (kind=boolean; when omitted=False; when present=True): Print request metadata to stderr
|
|
4519
|
+
|
|
4520
|
+
#### `autotouch tasks prioritize-linkedin`
|
|
4521
|
+
|
|
4522
|
+
Move a connected LinkedIn task to the earliest legal execution slot
|
|
4523
|
+
|
|
4524
|
+
- Auth: `developer_key_or_user_session`
|
|
4525
|
+
- Stability: `stable`
|
|
4526
|
+
- Destructive: `no`
|
|
4527
|
+
- Aliases: `linkedin-prioritize`
|
|
4528
|
+
- Required flags: `--task-id`
|
|
4529
|
+
- Output modes: `json, ndjson, human`
|
|
4530
|
+
- Example:
|
|
4531
|
+
- `autotouch tasks prioritize-linkedin [-h] --task-id TASK_ID
|
|
4532
|
+
[--actor-user-id ACTOR_USER_ID]
|
|
4533
|
+
[--base-url BASE_URL]
|
|
4534
|
+
[--token TOKEN] [--use-x-api-key]
|
|
4535
|
+
[--timeout TIMEOUT]
|
|
4536
|
+
[--output {json,ndjson,human}]
|
|
4537
|
+
[--compact] [--select SELECT |
|
|
4538
|
+
--json-pointer JSON_POINTER]
|
|
4539
|
+
[--verbose]`
|
|
4540
|
+
- Options:
|
|
4541
|
+
- `--task-id` (required; kind=string)
|
|
4542
|
+
- `--actor-user-id` (kind=string): Optional actor override; must resolve to an active user in the same organization
|
|
4543
|
+
- `--base-url` (kind=string; default=https://app.autotouch.ai): API base URL (default: https://app.autotouch.ai)
|
|
4544
|
+
- `--token` (kind=string; sensitive): Developer API key / JWT token
|
|
4545
|
+
- `--use-x-api-key` (kind=boolean; when omitted=False; when present=True): Send token via X-API-Key header
|
|
4546
|
+
- `--timeout` (kind=integer; default=30): HTTP timeout in seconds
|
|
4547
|
+
- `--output` (kind=string; choices=json,ndjson,human; default=json): Output mode
|
|
4548
|
+
- `--compact` (kind=boolean; when omitted=False; when present=True): Print compact JSON
|
|
4549
|
+
- `--select` (kind=string): Extract a dotted field path from the final result (for example: id or items.0.id)
|
|
4550
|
+
- `--json-pointer` (kind=string): Extract a JSON pointer from the final result (for example: /id)
|
|
4551
|
+
- `--verbose` (kind=boolean; when omitted=False; when present=True): Print request metadata to stderr
|
|
4552
|
+
|
|
4480
4553
|
#### `autotouch tasks query`
|
|
4481
4554
|
|
|
4482
4555
|
Query tasks with a TaskQueryRequest payload
|
|
@@ -4516,7 +4589,7 @@ Print task payload recipes
|
|
|
4516
4589
|
- Output modes: `json, ndjson, human`
|
|
4517
4590
|
- Example:
|
|
4518
4591
|
- `autotouch tasks recipe [-h]
|
|
4519
|
-
[--type {all,query,query_linkedin,create,create_linkedin,update,bulk_update,bulk_delete,draft,schedule_email}]
|
|
4592
|
+
[--type {all,query,query_linkedin,create,create_linkedin,update,bulk_update,bulk_delete,draft,schedule_email,prioritize_email,reschedule_email,schedule_linkedin,prioritize_linkedin,reschedule_linkedin}]
|
|
4520
4593
|
[--out-file OUT_FILE] [--base-url BASE_URL]
|
|
4521
4594
|
[--token TOKEN] [--use-x-api-key]
|
|
4522
4595
|
[--timeout TIMEOUT]
|
|
@@ -4524,7 +4597,7 @@ Print task payload recipes
|
|
|
4524
4597
|
[--select SELECT | --json-pointer JSON_POINTER]
|
|
4525
4598
|
[--verbose]`
|
|
4526
4599
|
- Options:
|
|
4527
|
-
- `--type` (kind=string; choices=all,query,query_linkedin,create,create_linkedin,update,bulk_update,bulk_delete,draft,schedule_email; default=all)
|
|
4600
|
+
- `--type` (kind=string; choices=all,query,query_linkedin,create,create_linkedin,update,bulk_update,bulk_delete,draft,schedule_email,prioritize_email,reschedule_email,schedule_linkedin,prioritize_linkedin,reschedule_linkedin; default=all)
|
|
4528
4601
|
- `--out-file` (kind=file; input=file): Optional path to save the selected payload JSON
|
|
4529
4602
|
- `--base-url` (kind=string; default=https://app.autotouch.ai): API base URL (default: https://app.autotouch.ai)
|
|
4530
4603
|
- `--token` (kind=string; sensitive): Developer API key / JWT token
|
|
@@ -4536,6 +4609,79 @@ Print task payload recipes
|
|
|
4536
4609
|
- `--json-pointer` (kind=string): Extract a JSON pointer from the final result (for example: /id)
|
|
4537
4610
|
- `--verbose` (kind=boolean; when omitted=False; when present=True): Print request metadata to stderr
|
|
4538
4611
|
|
|
4612
|
+
#### `autotouch tasks reschedule-email`
|
|
4613
|
+
|
|
4614
|
+
Move a scheduled email task to a requested send time
|
|
4615
|
+
|
|
4616
|
+
- Auth: `developer_key_or_user_session`
|
|
4617
|
+
- Stability: `stable`
|
|
4618
|
+
- Destructive: `no`
|
|
4619
|
+
- Aliases: `email-reschedule`
|
|
4620
|
+
- Required flags: `--task-id`
|
|
4621
|
+
- Output modes: `json, ndjson, human`
|
|
4622
|
+
- Example:
|
|
4623
|
+
- `autotouch tasks reschedule-email [-h] --task-id TASK_ID
|
|
4624
|
+
[--data-json DATA_JSON]
|
|
4625
|
+
[--data-file DATA_FILE]
|
|
4626
|
+
[--actor-user-id ACTOR_USER_ID]
|
|
4627
|
+
[--base-url BASE_URL] [--token TOKEN]
|
|
4628
|
+
[--use-x-api-key] [--timeout TIMEOUT]
|
|
4629
|
+
[--output {json,ndjson,human}]
|
|
4630
|
+
[--compact] [--select SELECT |
|
|
4631
|
+
--json-pointer JSON_POINTER]
|
|
4632
|
+
[--verbose]`
|
|
4633
|
+
- Options:
|
|
4634
|
+
- `--task-id` (required; kind=string)
|
|
4635
|
+
- `--data-json` (kind=json; input=json): TaskEmailRescheduleRequest payload JSON
|
|
4636
|
+
- `--data-file` (kind=file; input=file): Path to TaskEmailRescheduleRequest payload JSON file
|
|
4637
|
+
- `--actor-user-id` (kind=string): Optional actor override; must resolve to an active user in the same organization
|
|
4638
|
+
- `--base-url` (kind=string; default=https://app.autotouch.ai): API base URL (default: https://app.autotouch.ai)
|
|
4639
|
+
- `--token` (kind=string; sensitive): Developer API key / JWT token
|
|
4640
|
+
- `--use-x-api-key` (kind=boolean; when omitted=False; when present=True): Send token via X-API-Key header
|
|
4641
|
+
- `--timeout` (kind=integer; default=30): HTTP timeout in seconds
|
|
4642
|
+
- `--output` (kind=string; choices=json,ndjson,human; default=json): Output mode
|
|
4643
|
+
- `--compact` (kind=boolean; when omitted=False; when present=True): Print compact JSON
|
|
4644
|
+
- `--select` (kind=string): Extract a dotted field path from the final result (for example: id or items.0.id)
|
|
4645
|
+
- `--json-pointer` (kind=string): Extract a JSON pointer from the final result (for example: /id)
|
|
4646
|
+
- `--verbose` (kind=boolean; when omitted=False; when present=True): Print request metadata to stderr
|
|
4647
|
+
|
|
4648
|
+
#### `autotouch tasks reschedule-linkedin`
|
|
4649
|
+
|
|
4650
|
+
Move a scheduled LinkedIn task to a requested execution time
|
|
4651
|
+
|
|
4652
|
+
- Auth: `developer_key_or_user_session`
|
|
4653
|
+
- Stability: `stable`
|
|
4654
|
+
- Destructive: `no`
|
|
4655
|
+
- Aliases: `linkedin-reschedule`
|
|
4656
|
+
- Required flags: `--task-id`
|
|
4657
|
+
- Output modes: `json, ndjson, human`
|
|
4658
|
+
- Example:
|
|
4659
|
+
- `autotouch tasks reschedule-linkedin [-h] --task-id TASK_ID
|
|
4660
|
+
[--data-json DATA_JSON]
|
|
4661
|
+
[--data-file DATA_FILE]
|
|
4662
|
+
[--actor-user-id ACTOR_USER_ID]
|
|
4663
|
+
[--base-url BASE_URL]
|
|
4664
|
+
[--token TOKEN] [--use-x-api-key]
|
|
4665
|
+
[--timeout TIMEOUT]
|
|
4666
|
+
[--output {json,ndjson,human}]
|
|
4667
|
+
[--compact] [--select SELECT |
|
|
4668
|
+
--json-pointer JSON_POINTER]
|
|
4669
|
+
[--verbose]`
|
|
4670
|
+
- Options:
|
|
4671
|
+
- `--task-id` (required; kind=string)
|
|
4672
|
+
- `--data-json` (kind=json; input=json): LinkedInTaskRescheduleRequest payload JSON
|
|
4673
|
+
- `--data-file` (kind=file; input=file): Path to LinkedInTaskRescheduleRequest payload JSON file
|
|
4674
|
+
- `--actor-user-id` (kind=string): Optional actor override; must resolve to an active user in the same organization
|
|
4675
|
+
- `--base-url` (kind=string; default=https://app.autotouch.ai): API base URL (default: https://app.autotouch.ai)
|
|
4676
|
+
- `--token` (kind=string; sensitive): Developer API key / JWT token
|
|
4677
|
+
- `--use-x-api-key` (kind=boolean; when omitted=False; when present=True): Send token via X-API-Key header
|
|
4678
|
+
- `--timeout` (kind=integer; default=30): HTTP timeout in seconds
|
|
4679
|
+
- `--output` (kind=string; choices=json,ndjson,human; default=json): Output mode
|
|
4680
|
+
- `--compact` (kind=boolean; when omitted=False; when present=True): Print compact JSON
|
|
4681
|
+
- `--select` (kind=string): Extract a dotted field path from the final result (for example: id or items.0.id)
|
|
4682
|
+
- `--json-pointer` (kind=string): Extract a JSON pointer from the final result (for example: /id)
|
|
4683
|
+
- `--verbose` (kind=boolean; when omitted=False; when present=True): Print request metadata to stderr
|
|
4684
|
+
|
|
4539
4685
|
#### `autotouch tasks schedule-email`
|
|
4540
4686
|
|
|
4541
4687
|
Schedule or send an email task from a JSON payload
|
|
@@ -4571,6 +4717,42 @@ Schedule or send an email task from a JSON payload
|
|
|
4571
4717
|
- `--json-pointer` (kind=string): Extract a JSON pointer from the final result (for example: /id)
|
|
4572
4718
|
- `--verbose` (kind=boolean; when omitted=False; when present=True): Print request metadata to stderr
|
|
4573
4719
|
|
|
4720
|
+
#### `autotouch tasks schedule-linkedin`
|
|
4721
|
+
|
|
4722
|
+
Queue a connected LinkedIn task at a requested execution time
|
|
4723
|
+
|
|
4724
|
+
- Auth: `developer_key_or_user_session`
|
|
4725
|
+
- Stability: `stable`
|
|
4726
|
+
- Destructive: `no`
|
|
4727
|
+
- Aliases: `linkedin-schedule`
|
|
4728
|
+
- Required flags: `--task-id`
|
|
4729
|
+
- Output modes: `json, ndjson, human`
|
|
4730
|
+
- Example:
|
|
4731
|
+
- `autotouch tasks schedule-linkedin [-h] --task-id TASK_ID
|
|
4732
|
+
[--data-json DATA_JSON]
|
|
4733
|
+
[--data-file DATA_FILE]
|
|
4734
|
+
[--actor-user-id ACTOR_USER_ID]
|
|
4735
|
+
[--base-url BASE_URL] [--token TOKEN]
|
|
4736
|
+
[--use-x-api-key] [--timeout TIMEOUT]
|
|
4737
|
+
[--output {json,ndjson,human}]
|
|
4738
|
+
[--compact] [--select SELECT |
|
|
4739
|
+
--json-pointer JSON_POINTER]
|
|
4740
|
+
[--verbose]`
|
|
4741
|
+
- Options:
|
|
4742
|
+
- `--task-id` (required; kind=string)
|
|
4743
|
+
- `--data-json` (kind=json; input=json): Optional LinkedInTaskScheduleRequest payload JSON
|
|
4744
|
+
- `--data-file` (kind=file; input=file): Optional LinkedInTaskScheduleRequest payload JSON file
|
|
4745
|
+
- `--actor-user-id` (kind=string): Optional actor override; must resolve to an active user in the same organization
|
|
4746
|
+
- `--base-url` (kind=string; default=https://app.autotouch.ai): API base URL (default: https://app.autotouch.ai)
|
|
4747
|
+
- `--token` (kind=string; sensitive): Developer API key / JWT token
|
|
4748
|
+
- `--use-x-api-key` (kind=boolean; when omitted=False; when present=True): Send token via X-API-Key header
|
|
4749
|
+
- `--timeout` (kind=integer; default=30): HTTP timeout in seconds
|
|
4750
|
+
- `--output` (kind=string; choices=json,ndjson,human; default=json): Output mode
|
|
4751
|
+
- `--compact` (kind=boolean; when omitted=False; when present=True): Print compact JSON
|
|
4752
|
+
- `--select` (kind=string): Extract a dotted field path from the final result (for example: id or items.0.id)
|
|
4753
|
+
- `--json-pointer` (kind=string): Extract a JSON pointer from the final result (for example: /id)
|
|
4754
|
+
- `--verbose` (kind=boolean; when omitted=False; when present=True): Print request metadata to stderr
|
|
4755
|
+
|
|
4574
4756
|
#### `autotouch tasks stats`
|
|
4575
4757
|
|
|
4576
4758
|
Get task summary stats
|