mirror of
https://github.com/simstudioai/sim.git
synced 2026-01-09 15:07:55 -05:00
fix(tools): remove pylon (#2338)
This commit is contained in:
@@ -3667,31 +3667,6 @@ export function ZoomIcon(props: SVGProps<SVGSVGElement>) {
|
||||
)
|
||||
}
|
||||
|
||||
export function PylonIcon(props: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
{...props}
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
width='98'
|
||||
height='29'
|
||||
viewBox='0 0 26 26'
|
||||
fill='none'
|
||||
>
|
||||
<g clipPath='url(#clip0_6559_17753)'>
|
||||
<path
|
||||
d='M21.3437 4.1562C18.9827 1.79763 15.8424 0.5 12.5015 0.5C9.16056 0.5 6.02027 1.79763 3.66091 4.15455C1.29989 6.51147 0 9.64465 0 12.9798C0 16.3149 1.29989 19.448 3.66091 21.805C6.02193 24.1619 9.16222 25.4612 12.5031 25.4612C15.844 25.4612 18.9843 24.1635 21.3454 21.8066C23.7064 19.4497 25.0063 16.3165 25.0063 12.9814C25.0063 9.6463 23.7064 6.51312 21.3454 4.1562H21.3437ZM22.3949 12.9814C22.3949 17.927 18.7074 22.1227 13.8063 22.7699V3.1896C18.7074 3.83676 22.3949 8.0342 22.3949 12.9798V12.9814ZM4.8265 6.75643C6.43312 4.7835 8.68803 3.52063 11.1983 3.1896V6.75643H4.8265ZM11.1983 9.36162V11.6904H2.69428C2.79874 10.8926 3.00267 10.1097 3.2978 9.36162H11.1983ZM11.1983 14.2939V16.6227H3.30775C3.00931 15.8746 2.80371 15.0917 2.6976 14.2939H11.1983ZM11.1983 19.2279V22.7699C8.70129 22.4405 6.45302 21.1859 4.84805 19.2279H11.1983Z'
|
||||
fill='#5B0EFF'
|
||||
/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id='clip0_6559_17753'>
|
||||
<rect width='97.4717' height='28' fill='white' transform='translate(0 0.5)' />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export function SendgridIcon(props: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
|
||||
@@ -75,7 +75,6 @@ import {
|
||||
PolymarketIcon,
|
||||
PostgresIcon,
|
||||
PosthogIcon,
|
||||
PylonIcon,
|
||||
QdrantIcon,
|
||||
RDSIcon,
|
||||
RedditIcon,
|
||||
@@ -162,7 +161,6 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
|
||||
reddit: RedditIcon,
|
||||
rds: RDSIcon,
|
||||
qdrant: QdrantIcon,
|
||||
pylon: PylonIcon,
|
||||
posthog: PosthogIcon,
|
||||
postgresql: PostgresIcon,
|
||||
polymarket: PolymarketIcon,
|
||||
|
||||
@@ -1,807 +0,0 @@
|
||||
---
|
||||
title: Pylon
|
||||
description: Verwalten Sie Kundensupport-Anfragen, Konten, Kontakte, Benutzer,
|
||||
Teams und Tags in Pylon
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="pylon"
|
||||
color="#E8F4FA"
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Pylon](https://usepylon.com/) ist eine fortschrittliche Kundensupport- und Erfolgsplattform, die entwickelt wurde, um Ihnen bei der Verwaltung aller Aspekte Ihrer Kundenbeziehungen zu helfen – von Support-Anfragen bis hin zu Konten, Kontakten, Benutzern, Teams und darüber hinaus. Pylon ermöglicht Support- und Erfolgsteams, effizient und programmatisch mit einer umfangreichen API und umfassenden Werkzeugen zu arbeiten.
|
||||
|
||||
Mit Pylon in Sim können Sie:
|
||||
|
||||
- **Support-Anfragen verwalten:**
|
||||
- Support-Anfragen auflisten, erstellen, abrufen, aktualisieren und löschen für effizientes Falltracking.
|
||||
- Anfragen durchsuchen und zurückstellen, um Agenten zu helfen, fokussiert und organisiert zu bleiben.
|
||||
- Verwalten von Anfrage-Followern und externen Anfragen für nahtlose Zusammenarbeit mit internen und externen Stakeholdern.
|
||||
|
||||
- **Vollständige Kontoverwaltung:**
|
||||
- Kundenkonten auflisten, erstellen, abrufen, aktualisieren und löschen.
|
||||
- Massenaktualisierung von Konten programmatisch durchführen.
|
||||
- Konten durchsuchen, um schnell kundenrelevante Informationen für Support oder Outreach zu finden.
|
||||
|
||||
- **Kontaktverwaltung:**
|
||||
- Kontakte auflisten, erstellen, abrufen, aktualisieren, löschen und durchsuchen – verwalten Sie alle Personen, die mit Ihren Konten verbunden sind.
|
||||
|
||||
- **Benutzer- und Team-Operationen:**
|
||||
- Benutzer in Ihrem Pylon-Workspace auflisten, abrufen, aktualisieren und durchsuchen.
|
||||
- Teams auflisten, erstellen, abrufen und aktualisieren, um Ihre Support-Organisation und Arbeitsabläufe zu strukturieren.
|
||||
|
||||
- **Tagging und Organisation:**
|
||||
- Tags auflisten, abrufen, erstellen, aktualisieren und löschen zur Kategorisierung von Anfragen, Konten oder Kontakten.
|
||||
|
||||
- **Nachrichtenbearbeitung:**
|
||||
- Sensible Nachrichteninhalte direkt aus Ihren Workflows redigieren für Datenschutz und Compliance.
|
||||
|
||||
Durch die Integration von Pylon-Tools in Sim können Ihre Agenten jeden Aspekt der Support-Operationen automatisieren:
|
||||
- Automatisches Öffnen, Aktualisieren oder Priorisieren neuer Anfragen bei Kundenereignissen.
|
||||
- Synchronisierte Konto- und Kontaktdaten über Ihren gesamten Tech-Stack hinweg pflegen.
|
||||
- Gespräche weiterleiten, Eskalationen bearbeiten und Ihre Support-Daten mithilfe von Tags und Teams organisieren.
|
||||
- Sicherstellen, dass sensible Daten ordnungsgemäß verwaltet werden, indem Nachrichten bei Bedarf redigiert werden.
|
||||
|
||||
Die Endpunkte von Pylon bieten granulare Kontrolle für das vollständige Lifecycle-Management von Kundenanliegen und -beziehungen. Ob beim Skalieren eines Support-Desks, bei der Unterstützung proaktiver Kundenbetreuung oder bei der Integration mit anderen Systemen – Pylon in Sim ermöglicht erstklassige CRM-Automatisierung – sicher, flexibel und skalierbar.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanleitung
|
||||
|
||||
Integrieren Sie Pylon in den Workflow. Verwalten Sie Anliegen (auflisten, erstellen, abrufen, aktualisieren, löschen, suchen, zurückstellen, Follower, externe Anliegen), Konten (auflisten, erstellen, abrufen, aktualisieren, löschen, Massenaktualisierung, suchen), Kontakte (auflisten, erstellen, abrufen, aktualisieren, löschen, suchen), Benutzer (auflisten, abrufen, aktualisieren, suchen), Teams (auflisten, abrufen, erstellen, aktualisieren), Tags (auflisten, abrufen, erstellen, aktualisieren, löschen) und Nachrichten (redigieren).
|
||||
|
||||
## Tools
|
||||
|
||||
### `pylon_list_issues`
|
||||
|
||||
Eine Liste von Anliegen innerhalb eines bestimmten Zeitraums abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `startTime` | string | Ja | Startzeit im RFC3339-Format \(z.B. 2024-01-01T00:00:00Z\) |
|
||||
| `endTime` | string | Ja | Endzeit im RFC3339-Format \(z.B. 2024-01-31T23:59:59Z\) |
|
||||
| `cursor` | string | Nein | Paginierungscursor für die nächste Ergebnisseite |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Liste der Anliegen |
|
||||
|
||||
### `pylon_create_issue`
|
||||
|
||||
Ein neues Anliegen mit bestimmten Eigenschaften erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `title` | string | Ja | Titel des Problems |
|
||||
| `bodyHtml` | string | Ja | Inhalt des Problems im HTML-Format |
|
||||
| `accountId` | string | Nein | Konto-ID, die mit dem Problem verknüpft werden soll |
|
||||
| `assigneeId` | string | Nein | Benutzer-ID, der das Problem zugewiesen werden soll |
|
||||
| `teamId` | string | Nein | Team-ID, dem das Problem zugewiesen werden soll |
|
||||
| `requesterId` | string | Nein | Anforderer-Benutzer-ID \(Alternative zu requester_email\) |
|
||||
| `requesterEmail` | string | Nein | E-Mail-Adresse des Anforderers \(Alternative zu requester_id\) |
|
||||
| `priority` | string | Nein | Priorität des Problems |
|
||||
| `tags` | string | Nein | Durch Komma getrennte Tag-IDs |
|
||||
| `customFields` | string | Nein | Benutzerdefinierte Felder als JSON-Objekt |
|
||||
| `attachmentUrls` | string | Nein | Durch Komma getrennte Anhang-URLs |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Daten des erstellten Issues |
|
||||
|
||||
### `pylon_get_issue`
|
||||
|
||||
Ruft ein bestimmtes Issue anhand der ID ab
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `issueId` | string | Ja | Die ID des abzurufenden Issues |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Issue-Daten |
|
||||
|
||||
### `pylon_update_issue`
|
||||
|
||||
Aktualisiert ein bestehendes Issue
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `issueId` | string | Ja | Die ID des zu aktualisierenden Problems |
|
||||
| `state` | string | Nein | Status des Problems |
|
||||
| `assigneeId` | string | Nein | Benutzer-ID, der das Problem zugewiesen werden soll |
|
||||
| `teamId` | string | Nein | Team-ID, dem das Problem zugewiesen werden soll |
|
||||
| `tags` | string | Nein | Durch Komma getrennte Tag-IDs |
|
||||
| `customFields` | string | Nein | Benutzerdefinierte Felder als JSON-Objekt |
|
||||
| `customerPortalVisible` | boolean | Nein | Ob das Problem im Kundenportal sichtbar ist |
|
||||
| `requesterId` | string | Nein | Anforderer-Benutzer-ID |
|
||||
| `accountId` | string | Nein | Konto-ID, die mit dem Problem verknüpft werden soll |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Daten des aktualisierten Issues |
|
||||
|
||||
### `pylon_delete_issue`
|
||||
|
||||
Problem nach ID entfernen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `issueId` | string | Ja | Die ID des zu löschenden Problems |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Löschergebnis |
|
||||
|
||||
### `pylon_search_issues`
|
||||
|
||||
Probleme mit Filtern abfragen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `filter` | string | Ja | Filterkriterien als JSON-String |
|
||||
| `cursor` | string | Nein | Paginierungscursor für die nächste Ergebnisseite |
|
||||
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Ergebnisse |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Suchergebnisse |
|
||||
|
||||
### `pylon_snooze_issue`
|
||||
|
||||
Problemsichtbarkeit bis zu einem bestimmten Zeitpunkt verschieben
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `issueId` | string | Ja | Die ID des zu schlummernden Problems |
|
||||
| `snoozeUntil` | string | Ja | RFC3339-Zeitstempel, wann das Problem wieder erscheinen soll \(z.B. 2024-01-01T00:00:00Z\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Daten des zurückgestellten Problems |
|
||||
|
||||
### `pylon_list_issue_followers`
|
||||
|
||||
Liste der Follower für ein bestimmtes Problem abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `issueId` | string | Ja | Die ID des Problems |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Liste der Follower |
|
||||
|
||||
### `pylon_manage_issue_followers`
|
||||
|
||||
Follower zu einem Problem hinzufügen oder entfernen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `issueId` | string | Ja | Die ID des Problems |
|
||||
| `userIds` | string | Nein | Durch Komma getrennte Benutzer-IDs zum Hinzufügen/Entfernen |
|
||||
| `contactIds` | string | Nein | Durch Komma getrennte Kontakt-IDs zum Hinzufügen/Entfernen |
|
||||
| `operation` | string | Nein | Auszuführende Operation: "add" oder "remove" \(Standard: "add"\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Aktualisierte Liste der Follower |
|
||||
|
||||
### `pylon_link_external_issue`
|
||||
|
||||
Issue mit einem externen System-Issue verknüpfen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `issueId` | string | Ja | Die ID des Pylon-Issues |
|
||||
| `externalIssueId` | string | Ja | Die ID des externen Issues |
|
||||
| `source` | string | Ja | Das Quellsystem \(z.B. "jira", "linear", "github"\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Daten des verknüpften externen Issues |
|
||||
|
||||
### `pylon_list_accounts`
|
||||
|
||||
Eine paginierte Liste von Konten abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `limit` | string | Nein | Anzahl der zurückzugebenden Konten \(1-1000, Standard 100\) |
|
||||
| `cursor` | string | Nein | Paginierungscursor für die nächste Ergebnisseite |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Liste der Konten |
|
||||
|
||||
### `pylon_create_account`
|
||||
|
||||
Ein neues Konto mit bestimmten Eigenschaften erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `name` | string | Ja | Kontoname |
|
||||
| `domains` | string | Nein | Kommagetrennte Liste von Domains |
|
||||
| `primaryDomain` | string | Nein | Primäre Domain für das Konto |
|
||||
| `customFields` | string | Nein | Benutzerdefinierte Felder als JSON-Objekt |
|
||||
| `tags` | string | Nein | Kommagetrennte Tag-IDs |
|
||||
| `channels` | string | Nein | Kommagetrennte Kanal-IDs |
|
||||
| `externalIds` | string | Nein | Kommagetrennte externe IDs |
|
||||
| `ownerId` | string | Nein | Besitzer-Benutzer-ID |
|
||||
| `logoUrl` | string | Nein | URL zum Konto-Logo |
|
||||
| `subaccountIds` | string | Nein | Kommagetrennte Unterkonto-IDs |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Erstellte Kontodaten |
|
||||
|
||||
### `pylon_get_account`
|
||||
|
||||
Ein einzelnes Konto anhand der ID abrufen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `accountId` | string | Ja | Konto-ID zum Abrufen |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Kontodaten |
|
||||
|
||||
### `pylon_update_account`
|
||||
|
||||
Ein bestehendes Konto mit neuen Eigenschaften aktualisieren
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `accountId` | string | Ja | Konto-ID zum Aktualisieren |
|
||||
| `name` | string | Nein | Kontoname |
|
||||
| `domains` | string | Nein | Kommagetrennte Liste von Domains |
|
||||
| `primaryDomain` | string | Nein | Primäre Domain für das Konto |
|
||||
| `customFields` | string | Nein | Benutzerdefinierte Felder als JSON-Objekt |
|
||||
| `tags` | string | Nein | Kommagetrennte Tag-IDs |
|
||||
| `channels` | string | Nein | Kommagetrennte Kanal-IDs |
|
||||
| `externalIds` | string | Nein | Kommagetrennte externe IDs |
|
||||
| `ownerId` | string | Nein | Besitzer-Benutzer-ID |
|
||||
| `logoUrl` | string | Nein | URL zum Konto-Logo |
|
||||
| `subaccountIds` | string | Nein | Kommagetrennte Unterkonto-IDs |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Aktualisierte Kontodaten |
|
||||
|
||||
### `pylon_delete_account`
|
||||
|
||||
Ein Konto anhand der ID entfernen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `accountId` | string | Ja | Konto-ID, die gelöscht werden soll |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Löschbestätigung |
|
||||
|
||||
### `pylon_bulk_update_accounts`
|
||||
|
||||
Mehrere Konten auf einmal aktualisieren
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `accountIds` | string | Ja | Durch Komma getrennte Konto-IDs, die aktualisiert werden sollen |
|
||||
| `customFields` | string | Nein | Benutzerdefinierte Felder als JSON-Objekt |
|
||||
| `tags` | string | Nein | Durch Komma getrennte Tag-IDs |
|
||||
| `ownerId` | string | Nein | Besitzer-Benutzer-ID |
|
||||
| `tagsApplyMode` | string | Nein | Tag-Anwendungsmodus: append_only, remove_only oder replace |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Massenhaft aktualisierte Kontodaten |
|
||||
|
||||
### `pylon_search_accounts`
|
||||
|
||||
Konten mit benutzerdefinierten Filtern durchsuchen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `filter` | string | Ja | Filter als JSON-String mit Feld/Operator/Wert-Struktur |
|
||||
| `limit` | string | Nein | Anzahl der zurückzugebenden Konten \(1-1000, Standard 100\) |
|
||||
| `cursor` | string | Nein | Paginierungscursor für die nächste Ergebnisseite |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Suchergebnisse |
|
||||
|
||||
### `pylon_list_contacts`
|
||||
|
||||
Eine Liste von Kontakten abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `cursor` | string | Nein | Paginierungscursor für die nächste Ergebnisseite |
|
||||
| `limit` | string | Nein | Maximale Anzahl der zurückzugebenden Kontakte |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Liste der Kontakte |
|
||||
|
||||
### `pylon_create_contact`
|
||||
|
||||
Einen neuen Kontakt mit bestimmten Eigenschaften erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `name` | string | Ja | Kontaktname |
|
||||
| `email` | string | Nein | E-Mail-Adresse des Kontakts |
|
||||
| `accountId` | string | Nein | Konto-ID, die mit dem Kontakt verknüpft werden soll |
|
||||
| `accountExternalId` | string | Nein | Externe Konto-ID, die mit dem Kontakt verknüpft werden soll |
|
||||
| `avatarUrl` | string | Nein | URL für das Kontakt-Avatarbild |
|
||||
| `customFields` | string | Nein | Benutzerdefinierte Felder als JSON-Objekt |
|
||||
| `portalRole` | string | Nein | Portal-Rolle für den Kontakt |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Erstellte Kontaktdaten |
|
||||
|
||||
### `pylon_get_contact`
|
||||
|
||||
Einen bestimmten Kontakt anhand der ID abrufen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `contactId` | string | Ja | Kontakt-ID zum Abrufen |
|
||||
| `cursor` | string | Nein | Paginierungscursor für die nächste Ergebnisseite |
|
||||
| `limit` | string | Nein | Maximale Anzahl der zurückzugebenden Elemente |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Kontaktdaten |
|
||||
|
||||
### `pylon_update_contact`
|
||||
|
||||
Einen vorhandenen Kontakt mit angegebenen Eigenschaften aktualisieren
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `contactId` | string | Ja | Kontakt-ID zum Aktualisieren |
|
||||
| `name` | string | Nein | Kontaktname |
|
||||
| `email` | string | Nein | E-Mail-Adresse des Kontakts |
|
||||
| `accountId` | string | Nein | Konto-ID, die mit dem Kontakt verknüpft werden soll |
|
||||
| `accountExternalId` | string | Nein | Externe Konto-ID, die mit dem Kontakt verknüpft werden soll |
|
||||
| `avatarUrl` | string | Nein | URL für das Kontakt-Avatarbild |
|
||||
| `customFields` | string | Nein | Benutzerdefinierte Felder als JSON-Objekt |
|
||||
| `portalRole` | string | Nein | Portalrolle für den Kontakt |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Aktualisierte Kontaktdaten |
|
||||
|
||||
### `pylon_delete_contact`
|
||||
|
||||
Einen bestimmten Kontakt anhand der ID löschen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `contactId` | string | Ja | Zu löschende Kontakt-ID |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Ergebnis des Löschvorgangs |
|
||||
|
||||
### `pylon_search_contacts`
|
||||
|
||||
Nach Kontakten mit einem Filter suchen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `filter` | string | Ja | Filter als JSON-Objekt |
|
||||
| `limit` | string | Nein | Maximale Anzahl der zurückzugebenden Kontakte |
|
||||
| `cursor` | string | Nein | Paginierungscursor für die nächste Ergebnisseite |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Suchergebnisse |
|
||||
|
||||
### `pylon_list_users`
|
||||
|
||||
Eine Liste von Benutzern abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Liste der Benutzer |
|
||||
|
||||
### `pylon_get_user`
|
||||
|
||||
Einen bestimmten Benutzer anhand der ID abrufen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `userId` | string | Ja | Benutzer-ID zum Abrufen |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Benutzerdaten |
|
||||
|
||||
### `pylon_update_user`
|
||||
|
||||
Einen vorhandenen Benutzer mit angegebenen Eigenschaften aktualisieren
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `userId` | string | Ja | Benutzer-ID zum Aktualisieren |
|
||||
| `roleId` | string | Nein | Rollen-ID, die dem Benutzer zugewiesen werden soll |
|
||||
| `status` | string | Nein | Benutzerstatus |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Aktualisierte Benutzerdaten |
|
||||
|
||||
### `pylon_search_users`
|
||||
|
||||
Nach Benutzern mit einem Filter für das E-Mail-Feld suchen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `filter` | string | Ja | Filter als JSON-Objekt mit E-Mail-Feld |
|
||||
| `cursor` | string | Nein | Paginierungscursor für die nächste Ergebnisseite |
|
||||
| `limit` | string | Nein | Maximale Anzahl der zurückzugebenden Benutzer |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Suchergebnisse |
|
||||
|
||||
### `pylon_list_teams`
|
||||
|
||||
Eine Liste von Teams abrufen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Liste der Teams |
|
||||
|
||||
### `pylon_get_team`
|
||||
|
||||
Ein bestimmtes Team anhand der ID abrufen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `teamId` | string | Ja | Team-ID zum Abrufen |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Team-Daten |
|
||||
|
||||
### `pylon_create_team`
|
||||
|
||||
Ein neues Team mit bestimmten Eigenschaften erstellen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `name` | string | Nein | Team-Name |
|
||||
| `userIds` | string | Nein | Durch Kommas getrennte Benutzer-IDs, die als Teammitglieder hinzugefügt werden sollen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Erstellte Team-Daten |
|
||||
|
||||
### `pylon_update_team`
|
||||
|
||||
Aktualisieren eines vorhandenen Teams mit angegebenen Eigenschaften (userIds ersetzt die gesamte Mitgliedschaft)
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `teamId` | string | Ja | Team-ID zum Aktualisieren |
|
||||
| `name` | string | Nein | Team-Name |
|
||||
| `userIds` | string | Nein | Kommagetrennte Benutzer-IDs \(ersetzt die gesamte Team-Mitgliedschaft\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Aktualisierte Team-Daten |
|
||||
|
||||
### `pylon_list_tags`
|
||||
|
||||
Abrufen einer Liste von Tags
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Status des Operationserfolgs |
|
||||
| `output` | object | Liste der Tags |
|
||||
|
||||
### `pylon_get_tag`
|
||||
|
||||
Abrufen eines bestimmten Tags anhand der ID
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `tagId` | string | Ja | Tag-ID zum Abrufen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Tag-Daten |
|
||||
|
||||
### `pylon_create_tag`
|
||||
|
||||
Erstellt einen neuen Tag mit angegebenen Eigenschaften (objectType: account/issue/contact)
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `objectType` | string | Ja | Objekttyp für Tag \(account, issue oder contact\) |
|
||||
| `value` | string | Ja | Tag-Wert/Name |
|
||||
| `hexColor` | string | Nein | Hex-Farbcode für Tag \(z.B. #FF5733\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Daten des erstellten Tags |
|
||||
|
||||
### `pylon_update_tag`
|
||||
|
||||
Aktualisiert einen vorhandenen Tag mit angegebenen Eigenschaften
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `tagId` | string | Ja | Zu aktualisierende Tag-ID |
|
||||
| `hexColor` | string | Nein | Hex-Farbcode für Tag \(z.B. #FF5733\) |
|
||||
| `value` | string | Nein | Tag-Wert/Name |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Daten des aktualisierten Tags |
|
||||
|
||||
### `pylon_delete_tag`
|
||||
|
||||
Löschen eines bestimmten Tags anhand der ID
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `tagId` | string | Ja | Tag-ID zum Löschen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Ergebnis der Löschoperation |
|
||||
|
||||
### `pylon_redact_message`
|
||||
|
||||
Redigieren einer bestimmten Nachricht innerhalb eines Issues
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Ja | Pylon API-Token |
|
||||
| `issueId` | string | Ja | Issue-ID, die die Nachricht enthält |
|
||||
| `messageId` | string | Ja | Nachrichten-ID zum Redigieren |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Ergebnis der Redigieroperation |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `pylon`
|
||||
@@ -70,7 +70,6 @@
|
||||
"polymarket",
|
||||
"postgresql",
|
||||
"posthog",
|
||||
"pylon",
|
||||
"qdrant",
|
||||
"rds",
|
||||
"reddit",
|
||||
|
||||
@@ -1,811 +0,0 @@
|
||||
---
|
||||
title: Pylon
|
||||
description: Manage customer support issues, accounts, contacts, users, teams, and tags in Pylon
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="pylon"
|
||||
color="#E8F4FA"
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Pylon](https://usepylon.com/) is an advanced customer support and success platform designed to help you manage every aspect of your customer relationships—from support issues to accounts, contacts, users, teams, and beyond. Pylon empowers support and success teams to operate efficiently and programmatically with a rich API and comprehensive toolset.
|
||||
|
||||
With Pylon in Sim, you can:
|
||||
|
||||
- **Manage Support Issues:**
|
||||
- List, create, get, update, and delete support issues for efficient case tracking.
|
||||
- Search and snooze issues to help agents stay focused and organized.
|
||||
- Handle issue followers and external issues for seamless collaboration with internal and external stakeholders.
|
||||
|
||||
- **Full Account Management:**
|
||||
- List, create, get, update, and delete customer accounts.
|
||||
- Bulk update accounts programmatically.
|
||||
- Search accounts to quickly find customer information relevant for support or outreach.
|
||||
|
||||
- **Contact Management:**
|
||||
- List, create, get, update, delete, and search contacts—manage everyone connected to your accounts.
|
||||
|
||||
- **User and Team Operations:**
|
||||
- List, get, update, and search users in your Pylon workspace.
|
||||
- List, create, get, and update teams to structure your support organization and workflows.
|
||||
|
||||
- **Tagging and Organization:**
|
||||
- List, get, create, update, and delete tags for categorizing issues, accounts, or contacts.
|
||||
|
||||
- **Message Handling:**
|
||||
- Redact sensitive message content directly from your workflows for privacy and compliance.
|
||||
|
||||
By integrating Pylon tools into Sim, your agents can automate every aspect of support operations:
|
||||
- Automatically open, update, or triage new issues when customer events occur.
|
||||
- Maintain synchronized account and contact data across your tech stack.
|
||||
- Route conversations, handle escalations, and organize your support data using tags and teams.
|
||||
- Ensure sensitive data is properly managed by redacting messages as needed.
|
||||
|
||||
Pylon's endpoints provide granular control for full-lifecycle management of customer issues and relationships. Whether scaling a support desk, powering proactive customer success, or integrating with other systems, Pylon in Sim enables best-in-class CRM automation—securely, flexibly, and at scale.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
|
||||
## Usage Instructions
|
||||
|
||||
Integrate Pylon into the workflow. Manage issues (list, create, get, update, delete, search, snooze, followers, external issues), accounts (list, create, get, update, delete, bulk update, search), contacts (list, create, get, update, delete, search), users (list, get, update, search), teams (list, get, create, update), tags (list, get, create, update, delete), and messages (redact).
|
||||
|
||||
|
||||
|
||||
## Tools
|
||||
|
||||
### `pylon_list_issues`
|
||||
|
||||
Retrieve a list of issues within a specified time range
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `startTime` | string | Yes | Start time in RFC3339 format \(e.g., 2024-01-01T00:00:00Z\) |
|
||||
| `endTime` | string | Yes | End time in RFC3339 format \(e.g., 2024-01-31T23:59:59Z\) |
|
||||
| `cursor` | string | No | Pagination cursor for next page of results |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | List of issues |
|
||||
|
||||
### `pylon_create_issue`
|
||||
|
||||
Create a new issue with specified properties
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `title` | string | Yes | Issue title |
|
||||
| `bodyHtml` | string | Yes | Issue body in HTML format |
|
||||
| `accountId` | string | No | Account ID to associate with issue |
|
||||
| `assigneeId` | string | No | User ID to assign issue to |
|
||||
| `teamId` | string | No | Team ID to assign issue to |
|
||||
| `requesterId` | string | No | Requester user ID \(alternative to requester_email\) |
|
||||
| `requesterEmail` | string | No | Requester email address \(alternative to requester_id\) |
|
||||
| `priority` | string | No | Issue priority |
|
||||
| `tags` | string | No | Comma-separated tag IDs |
|
||||
| `customFields` | string | No | Custom fields as JSON object |
|
||||
| `attachmentUrls` | string | No | Comma-separated attachment URLs |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Created issue data |
|
||||
|
||||
### `pylon_get_issue`
|
||||
|
||||
Fetch a specific issue by ID
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `issueId` | string | Yes | The ID of the issue to retrieve |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Issue data |
|
||||
|
||||
### `pylon_update_issue`
|
||||
|
||||
Update an existing issue
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `issueId` | string | Yes | The ID of the issue to update |
|
||||
| `state` | string | No | Issue state |
|
||||
| `assigneeId` | string | No | User ID to assign issue to |
|
||||
| `teamId` | string | No | Team ID to assign issue to |
|
||||
| `tags` | string | No | Comma-separated tag IDs |
|
||||
| `customFields` | string | No | Custom fields as JSON object |
|
||||
| `customerPortalVisible` | boolean | No | Whether issue is visible in customer portal |
|
||||
| `requesterId` | string | No | Requester user ID |
|
||||
| `accountId` | string | No | Account ID to associate with issue |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Updated issue data |
|
||||
|
||||
### `pylon_delete_issue`
|
||||
|
||||
Remove an issue by ID
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `issueId` | string | Yes | The ID of the issue to delete |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Deletion result |
|
||||
|
||||
### `pylon_search_issues`
|
||||
|
||||
Query issues using filters
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `filter` | string | Yes | Filter criteria as JSON string |
|
||||
| `cursor` | string | No | Pagination cursor for next page of results |
|
||||
| `limit` | number | No | Maximum number of results to return |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Search results |
|
||||
|
||||
### `pylon_snooze_issue`
|
||||
|
||||
Postpone issue visibility until specified time
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `issueId` | string | Yes | The ID of the issue to snooze |
|
||||
| `snoozeUntil` | string | Yes | RFC3339 timestamp when issue should reappear \(e.g., 2024-01-01T00:00:00Z\) |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Snoozed issue data |
|
||||
|
||||
### `pylon_list_issue_followers`
|
||||
|
||||
Get list of followers for a specific issue
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `issueId` | string | Yes | The ID of the issue |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Followers list |
|
||||
|
||||
### `pylon_manage_issue_followers`
|
||||
|
||||
Add or remove followers from an issue
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `issueId` | string | Yes | The ID of the issue |
|
||||
| `userIds` | string | No | Comma-separated user IDs to add/remove |
|
||||
| `contactIds` | string | No | Comma-separated contact IDs to add/remove |
|
||||
| `operation` | string | No | Operation to perform: "add" or "remove" \(default: "add"\) |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Updated followers list |
|
||||
|
||||
### `pylon_link_external_issue`
|
||||
|
||||
Link an issue to an external system issue
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `issueId` | string | Yes | The ID of the Pylon issue |
|
||||
| `externalIssueId` | string | Yes | The ID of the external issue |
|
||||
| `source` | string | Yes | The source system \(e.g., "jira", "linear", "github"\) |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Linked external issue data |
|
||||
|
||||
### `pylon_list_accounts`
|
||||
|
||||
Retrieve a paginated list of accounts
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `limit` | string | No | Number of accounts to return \(1-1000, default 100\) |
|
||||
| `cursor` | string | No | Pagination cursor for next page of results |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | List of accounts |
|
||||
|
||||
### `pylon_create_account`
|
||||
|
||||
Create a new account with specified properties
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `name` | string | Yes | Account name |
|
||||
| `domains` | string | No | Comma-separated list of domains |
|
||||
| `primaryDomain` | string | No | Primary domain for the account |
|
||||
| `customFields` | string | No | Custom fields as JSON object |
|
||||
| `tags` | string | No | Comma-separated tag IDs |
|
||||
| `channels` | string | No | Comma-separated channel IDs |
|
||||
| `externalIds` | string | No | Comma-separated external IDs |
|
||||
| `ownerId` | string | No | Owner user ID |
|
||||
| `logoUrl` | string | No | URL to account logo |
|
||||
| `subaccountIds` | string | No | Comma-separated subaccount IDs |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Created account data |
|
||||
|
||||
### `pylon_get_account`
|
||||
|
||||
Retrieve a single account by ID
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `accountId` | string | Yes | Account ID to retrieve |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Account data |
|
||||
|
||||
### `pylon_update_account`
|
||||
|
||||
Update an existing account with new properties
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `accountId` | string | Yes | Account ID to update |
|
||||
| `name` | string | No | Account name |
|
||||
| `domains` | string | No | Comma-separated list of domains |
|
||||
| `primaryDomain` | string | No | Primary domain for the account |
|
||||
| `customFields` | string | No | Custom fields as JSON object |
|
||||
| `tags` | string | No | Comma-separated tag IDs |
|
||||
| `channels` | string | No | Comma-separated channel IDs |
|
||||
| `externalIds` | string | No | Comma-separated external IDs |
|
||||
| `ownerId` | string | No | Owner user ID |
|
||||
| `logoUrl` | string | No | URL to account logo |
|
||||
| `subaccountIds` | string | No | Comma-separated subaccount IDs |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Updated account data |
|
||||
|
||||
### `pylon_delete_account`
|
||||
|
||||
Remove an account by ID
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `accountId` | string | Yes | Account ID to delete |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Deletion confirmation |
|
||||
|
||||
### `pylon_bulk_update_accounts`
|
||||
|
||||
Update multiple accounts at once
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `accountIds` | string | Yes | Comma-separated account IDs to update |
|
||||
| `customFields` | string | No | Custom fields as JSON object |
|
||||
| `tags` | string | No | Comma-separated tag IDs |
|
||||
| `ownerId` | string | No | Owner user ID |
|
||||
| `tagsApplyMode` | string | No | Tag application mode: append_only, remove_only, or replace |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Bulk updated accounts data |
|
||||
|
||||
### `pylon_search_accounts`
|
||||
|
||||
Search accounts with custom filters
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `filter` | string | Yes | Filter as JSON string with field/operator/value structure |
|
||||
| `limit` | string | No | Number of accounts to return \(1-1000, default 100\) |
|
||||
| `cursor` | string | No | Pagination cursor for next page of results |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Search results |
|
||||
|
||||
### `pylon_list_contacts`
|
||||
|
||||
Retrieve a list of contacts
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `cursor` | string | No | Pagination cursor for next page of results |
|
||||
| `limit` | string | No | Maximum number of contacts to return |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | List of contacts |
|
||||
|
||||
### `pylon_create_contact`
|
||||
|
||||
Create a new contact with specified properties
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `name` | string | Yes | Contact name |
|
||||
| `email` | string | No | Contact email address |
|
||||
| `accountId` | string | No | Account ID to associate with contact |
|
||||
| `accountExternalId` | string | No | External account ID to associate with contact |
|
||||
| `avatarUrl` | string | No | URL for contact avatar image |
|
||||
| `customFields` | string | No | Custom fields as JSON object |
|
||||
| `portalRole` | string | No | Portal role for the contact |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Created contact data |
|
||||
|
||||
### `pylon_get_contact`
|
||||
|
||||
Retrieve a specific contact by ID
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `contactId` | string | Yes | Contact ID to retrieve |
|
||||
| `cursor` | string | No | Pagination cursor for next page of results |
|
||||
| `limit` | string | No | Maximum number of items to return |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Contact data |
|
||||
|
||||
### `pylon_update_contact`
|
||||
|
||||
Update an existing contact with specified properties
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `contactId` | string | Yes | Contact ID to update |
|
||||
| `name` | string | No | Contact name |
|
||||
| `email` | string | No | Contact email address |
|
||||
| `accountId` | string | No | Account ID to associate with contact |
|
||||
| `accountExternalId` | string | No | External account ID to associate with contact |
|
||||
| `avatarUrl` | string | No | URL for contact avatar image |
|
||||
| `customFields` | string | No | Custom fields as JSON object |
|
||||
| `portalRole` | string | No | Portal role for the contact |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Updated contact data |
|
||||
|
||||
### `pylon_delete_contact`
|
||||
|
||||
Delete a specific contact by ID
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `contactId` | string | Yes | Contact ID to delete |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Delete operation result |
|
||||
|
||||
### `pylon_search_contacts`
|
||||
|
||||
Search for contacts using a filter
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `filter` | string | Yes | Filter as JSON object |
|
||||
| `limit` | string | No | Maximum number of contacts to return |
|
||||
| `cursor` | string | No | Pagination cursor for next page of results |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Search results |
|
||||
|
||||
### `pylon_list_users`
|
||||
|
||||
Retrieve a list of users
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | List of users |
|
||||
|
||||
### `pylon_get_user`
|
||||
|
||||
Retrieve a specific user by ID
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `userId` | string | Yes | User ID to retrieve |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | User data |
|
||||
|
||||
### `pylon_update_user`
|
||||
|
||||
Update an existing user with specified properties
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `userId` | string | Yes | User ID to update |
|
||||
| `roleId` | string | No | Role ID to assign to user |
|
||||
| `status` | string | No | User status |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Updated user data |
|
||||
|
||||
### `pylon_search_users`
|
||||
|
||||
Search for users using a filter with email field
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `filter` | string | Yes | Filter as JSON object with email field |
|
||||
| `cursor` | string | No | Pagination cursor for next page of results |
|
||||
| `limit` | string | No | Maximum number of users to return |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Search results |
|
||||
|
||||
### `pylon_list_teams`
|
||||
|
||||
Retrieve a list of teams
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | List of teams |
|
||||
|
||||
### `pylon_get_team`
|
||||
|
||||
Retrieve a specific team by ID
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `teamId` | string | Yes | Team ID to retrieve |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Team data |
|
||||
|
||||
### `pylon_create_team`
|
||||
|
||||
Create a new team with specified properties
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `name` | string | No | Team name |
|
||||
| `userIds` | string | No | Comma-separated user IDs to add as team members |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Created team data |
|
||||
|
||||
### `pylon_update_team`
|
||||
|
||||
Update an existing team with specified properties (userIds replaces entire membership)
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `teamId` | string | Yes | Team ID to update |
|
||||
| `name` | string | No | Team name |
|
||||
| `userIds` | string | No | Comma-separated user IDs \(replaces entire team membership\) |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Updated team data |
|
||||
|
||||
### `pylon_list_tags`
|
||||
|
||||
Retrieve a list of tags
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | List of tags |
|
||||
|
||||
### `pylon_get_tag`
|
||||
|
||||
Retrieve a specific tag by ID
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `tagId` | string | Yes | Tag ID to retrieve |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Tag data |
|
||||
|
||||
### `pylon_create_tag`
|
||||
|
||||
Create a new tag with specified properties (objectType: account/issue/contact)
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `objectType` | string | Yes | Object type for tag \(account, issue, or contact\) |
|
||||
| `value` | string | Yes | Tag value/name |
|
||||
| `hexColor` | string | No | Hex color code for tag \(e.g., #FF5733\) |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Created tag data |
|
||||
|
||||
### `pylon_update_tag`
|
||||
|
||||
Update an existing tag with specified properties
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `tagId` | string | Yes | Tag ID to update |
|
||||
| `hexColor` | string | No | Hex color code for tag \(e.g., #FF5733\) |
|
||||
| `value` | string | No | Tag value/name |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Updated tag data |
|
||||
|
||||
### `pylon_delete_tag`
|
||||
|
||||
Delete a specific tag by ID
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `tagId` | string | Yes | Tag ID to delete |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Delete operation result |
|
||||
|
||||
### `pylon_redact_message`
|
||||
|
||||
Redact a specific message within an issue
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Yes | Pylon API token |
|
||||
| `issueId` | string | Yes | Issue ID containing the message |
|
||||
| `messageId` | string | Yes | Message ID to redact |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Operation success status |
|
||||
| `output` | object | Redact operation result |
|
||||
|
||||
|
||||
|
||||
## Notes
|
||||
|
||||
- Category: `tools`
|
||||
- Type: `pylon`
|
||||
@@ -48,10 +48,8 @@ List all lists on a Trello board
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Whether the operation was successful |
|
||||
| `lists` | array | Array of list objects with id, name, closed, pos, and idBoard |
|
||||
| `count` | number | Number of lists returned |
|
||||
| `error` | string | Error message if operation failed |
|
||||
|
||||
### `trello_list_cards`
|
||||
|
||||
@@ -68,10 +66,8 @@ List all cards on a Trello board
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Whether the operation was successful |
|
||||
| `cards` | array | Array of card objects with id, name, desc, url, board/list IDs, labels, and due date |
|
||||
| `count` | number | Number of cards returned |
|
||||
| `error` | string | Error message if operation failed |
|
||||
|
||||
### `trello_create_card`
|
||||
|
||||
@@ -93,9 +89,7 @@ Create a new card on a Trello board
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Whether the card was created successfully |
|
||||
| `card` | object | The created card object with id, name, desc, url, and other properties |
|
||||
| `error` | string | Error message if operation failed |
|
||||
|
||||
### `trello_update_card`
|
||||
|
||||
@@ -117,9 +111,7 @@ Update an existing card on Trello
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Whether the card was updated successfully |
|
||||
| `card` | object | The updated card object with id, name, desc, url, and other properties |
|
||||
| `error` | string | Error message if operation failed |
|
||||
|
||||
### `trello_get_actions`
|
||||
|
||||
@@ -138,10 +130,8 @@ Get activity/actions from a board or card
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Whether the operation was successful |
|
||||
| `actions` | array | Array of action objects with type, date, member, and data |
|
||||
| `count` | number | Number of actions returned |
|
||||
| `error` | string | Error message if operation failed |
|
||||
|
||||
### `trello_add_comment`
|
||||
|
||||
@@ -158,9 +148,7 @@ Add a comment to a Trello card
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Whether the comment was added successfully |
|
||||
| `comment` | object | The created comment object with id, text, date, and member creator |
|
||||
| `error` | string | Error message if operation failed |
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,807 +0,0 @@
|
||||
---
|
||||
title: Pylon
|
||||
description: Gestiona problemas de atención al cliente, cuentas, contactos,
|
||||
usuarios, equipos y etiquetas en Pylon
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="pylon"
|
||||
color="#E8F4FA"
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Pylon](https://usepylon.com/) es una plataforma avanzada de soporte y éxito del cliente diseñada para ayudarte a gestionar todos los aspectos de tus relaciones con los clientes—desde problemas de soporte hasta cuentas, contactos, usuarios, equipos y más. Pylon permite a los equipos de soporte y éxito operar de manera eficiente y programática con una API rica y un conjunto completo de herramientas.
|
||||
|
||||
Con Pylon en Sim, puedes:
|
||||
|
||||
- **Gestionar problemas de soporte:**
|
||||
- Listar, crear, obtener, actualizar y eliminar problemas de soporte para un seguimiento eficiente de casos.
|
||||
- Buscar y posponer problemas para ayudar a los agentes a mantenerse enfocados y organizados.
|
||||
- Manejar seguidores de problemas y problemas externos para una colaboración fluida con partes interesadas internas y externas.
|
||||
|
||||
- **Gestión completa de cuentas:**
|
||||
- Listar, crear, obtener, actualizar y eliminar cuentas de clientes.
|
||||
- Actualizar cuentas en masa de forma programática.
|
||||
- Buscar cuentas para encontrar rápidamente información de clientes relevante para soporte o contacto.
|
||||
|
||||
- **Gestión de contactos:**
|
||||
- Listar, crear, obtener, actualizar, eliminar y buscar contactos—gestiona a todas las personas conectadas a tus cuentas.
|
||||
|
||||
- **Operaciones de usuarios y equipos:**
|
||||
- Listar, obtener, actualizar y buscar usuarios en tu espacio de trabajo de Pylon.
|
||||
- Listar, crear, obtener y actualizar equipos para estructurar tu organización de soporte y flujos de trabajo.
|
||||
|
||||
- **Etiquetado y organización:**
|
||||
- Listar, obtener, crear, actualizar y eliminar etiquetas para categorizar problemas, cuentas o contactos.
|
||||
|
||||
- **Gestión de mensajes:**
|
||||
- Redactar contenido sensible de mensajes directamente desde tus flujos de trabajo para privacidad y cumplimiento.
|
||||
|
||||
Al integrar las herramientas de Pylon en Sim, tus agentes pueden automatizar todos los aspectos de las operaciones de soporte:
|
||||
- Abrir, actualizar o clasificar automáticamente nuevos problemas cuando ocurren eventos de clientes.
|
||||
- Mantener datos de cuentas y contactos sincronizados en toda tu infraestructura tecnológica.
|
||||
- Dirigir conversaciones, manejar escalaciones y organizar tus datos de soporte usando etiquetas y equipos.
|
||||
- Asegurar que los datos sensibles se gestionen adecuadamente redactando mensajes según sea necesario.
|
||||
|
||||
Los endpoints de Pylon proporcionan un control granular para la gestión completa del ciclo de vida de los problemas y relaciones con los clientes. Ya sea escalando un servicio de soporte, impulsando el éxito proactivo del cliente o integrándose con otros sistemas, Pylon en Sim permite la mejor automatización de CRM de su clase, de manera segura, flexible y a escala.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Instrucciones de uso
|
||||
|
||||
Integra Pylon en el flujo de trabajo. Gestiona problemas (listar, crear, obtener, actualizar, eliminar, buscar, posponer, seguidores, problemas externos), cuentas (listar, crear, obtener, actualizar, eliminar, actualización masiva, buscar), contactos (listar, crear, obtener, actualizar, eliminar, buscar), usuarios (listar, obtener, actualizar, buscar), equipos (listar, obtener, crear, actualizar), etiquetas (listar, obtener, crear, actualizar, eliminar) y mensajes (redactar).
|
||||
|
||||
## Herramientas
|
||||
|
||||
### `pylon_list_issues`
|
||||
|
||||
Recuperar una lista de problemas dentro de un rango de tiempo específico
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | ----------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `startTime` | string | Sí | Hora de inicio en formato RFC3339 \(p. ej., 2024-01-01T00:00:00Z\) |
|
||||
| `endTime` | string | Sí | Hora de fin en formato RFC3339 \(p. ej., 2024-01-31T23:59:59Z\) |
|
||||
| `cursor` | string | No | Cursor de paginación para la siguiente página de resultados |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Lista de problemas |
|
||||
|
||||
### `pylon_create_issue`
|
||||
|
||||
Crear un nuevo problema con propiedades específicas
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `title` | string | Sí | Título del problema |
|
||||
| `bodyHtml` | string | Sí | Cuerpo del problema en formato HTML |
|
||||
| `accountId` | string | No | ID de la cuenta a asociar con el problema |
|
||||
| `assigneeId` | string | No | ID del usuario al que asignar el problema |
|
||||
| `teamId` | string | No | ID del equipo al que asignar el problema |
|
||||
| `requesterId` | string | No | ID del usuario solicitante \(alternativa a requester_email\) |
|
||||
| `requesterEmail` | string | No | Dirección de correo electrónico del solicitante \(alternativa a requester_id\) |
|
||||
| `priority` | string | No | Prioridad del problema |
|
||||
| `tags` | string | No | IDs de etiquetas separados por comas |
|
||||
| `customFields` | string | No | Campos personalizados como objeto JSON |
|
||||
| `attachmentUrls` | string | No | URLs de archivos adjuntos separados por comas |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos del problema creado |
|
||||
|
||||
### `pylon_get_issue`
|
||||
|
||||
Obtener un problema específico por ID
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `issueId` | string | Sí | El ID del problema a recuperar |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos del problema |
|
||||
|
||||
### `pylon_update_issue`
|
||||
|
||||
Actualizar un problema existente
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `issueId` | string | Sí | El ID del problema a actualizar |
|
||||
| `state` | string | No | Estado del problema |
|
||||
| `assigneeId` | string | No | ID del usuario al que asignar el problema |
|
||||
| `teamId` | string | No | ID del equipo al que asignar el problema |
|
||||
| `tags` | string | No | IDs de etiquetas separados por comas |
|
||||
| `customFields` | string | No | Campos personalizados como objeto JSON |
|
||||
| `customerPortalVisible` | boolean | No | Si el problema es visible en el portal del cliente |
|
||||
| `requesterId` | string | No | ID del usuario solicitante |
|
||||
| `accountId` | string | No | ID de la cuenta a asociar con el problema |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos del problema actualizado |
|
||||
|
||||
### `pylon_delete_issue`
|
||||
|
||||
Eliminar un problema por ID
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `issueId` | string | Sí | El ID del problema a eliminar |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Resultado de la eliminación |
|
||||
|
||||
### `pylon_search_issues`
|
||||
|
||||
Consultar problemas usando filtros
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `filter` | string | Sí | Criterios de filtro como cadena JSON |
|
||||
| `cursor` | string | No | Cursor de paginación para la siguiente página de resultados |
|
||||
| `limit` | number | No | Número máximo de resultados a devolver |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Resultados de la búsqueda |
|
||||
|
||||
### `pylon_snooze_issue`
|
||||
|
||||
Posponer la visibilidad del problema hasta un momento específico
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `issueId` | string | Sí | El ID del problema a posponer |
|
||||
| `snoozeUntil` | string | Sí | Marca de tiempo RFC3339 cuando el problema debe reaparecer \(p. ej., 2024-01-01T00:00:00Z\) |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos del problema pospuesto |
|
||||
|
||||
### `pylon_list_issue_followers`
|
||||
|
||||
Obtener lista de seguidores para un problema específico
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `issueId` | string | Sí | El ID del problema |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Lista de seguidores |
|
||||
|
||||
### `pylon_manage_issue_followers`
|
||||
|
||||
Añadir o eliminar seguidores de un problema
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `issueId` | string | Sí | El ID del problema |
|
||||
| `userIds` | string | No | IDs de usuarios separados por comas para añadir/eliminar |
|
||||
| `contactIds` | string | No | IDs de contactos separados por comas para añadir/eliminar |
|
||||
| `operation` | string | No | Operación a realizar: "add" o "remove" \(predeterminado: "add"\) |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Lista actualizada de seguidores |
|
||||
|
||||
### `pylon_link_external_issue`
|
||||
|
||||
Vincular un problema a un problema de sistema externo
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `issueId` | string | Sí | El ID del problema de Pylon |
|
||||
| `externalIssueId` | string | Sí | El ID del problema externo |
|
||||
| `source` | string | Sí | El sistema de origen \(p. ej., "jira", "linear", "github"\) |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos del problema externo vinculado |
|
||||
|
||||
### `pylon_list_accounts`
|
||||
|
||||
Obtener una lista paginada de cuentas
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `limit` | string | No | Número de cuentas a devolver \(1-1000, predeterminado 100\) |
|
||||
| `cursor` | string | No | Cursor de paginación para la siguiente página de resultados |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Lista de cuentas |
|
||||
|
||||
### `pylon_create_account`
|
||||
|
||||
Crear una nueva cuenta con propiedades específicas
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `name` | string | Sí | Nombre de la cuenta |
|
||||
| `domains` | string | No | Lista de dominios separados por comas |
|
||||
| `primaryDomain` | string | No | Dominio principal para la cuenta |
|
||||
| `customFields` | string | No | Campos personalizados como objeto JSON |
|
||||
| `tags` | string | No | IDs de etiquetas separados por comas |
|
||||
| `channels` | string | No | IDs de canales separados por comas |
|
||||
| `externalIds` | string | No | IDs externos separados por comas |
|
||||
| `ownerId` | string | No | ID de usuario propietario |
|
||||
| `logoUrl` | string | No | URL del logotipo de la cuenta |
|
||||
| `subaccountIds` | string | No | IDs de subcuentas separados por comas |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos de la cuenta creada |
|
||||
|
||||
### `pylon_get_account`
|
||||
|
||||
Recuperar una sola cuenta por ID
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `accountId` | string | Sí | ID de la cuenta a recuperar |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos de la cuenta |
|
||||
|
||||
### `pylon_update_account`
|
||||
|
||||
Actualizar una cuenta existente con nuevas propiedades
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `accountId` | string | Sí | ID de la cuenta a actualizar |
|
||||
| `name` | string | No | Nombre de la cuenta |
|
||||
| `domains` | string | No | Lista de dominios separados por comas |
|
||||
| `primaryDomain` | string | No | Dominio principal para la cuenta |
|
||||
| `customFields` | string | No | Campos personalizados como objeto JSON |
|
||||
| `tags` | string | No | IDs de etiquetas separados por comas |
|
||||
| `channels` | string | No | IDs de canales separados por comas |
|
||||
| `externalIds` | string | No | IDs externos separados por comas |
|
||||
| `ownerId` | string | No | ID de usuario propietario |
|
||||
| `logoUrl` | string | No | URL del logotipo de la cuenta |
|
||||
| `subaccountIds` | string | No | IDs de subcuentas separados por comas |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos de la cuenta actualizados |
|
||||
|
||||
### `pylon_delete_account`
|
||||
|
||||
Eliminar una cuenta por ID
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `accountId` | string | Sí | ID de la cuenta a eliminar |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Confirmación de eliminación |
|
||||
|
||||
### `pylon_bulk_update_accounts`
|
||||
|
||||
Actualizar múltiples cuentas a la vez
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `accountIds` | string | Sí | IDs de cuentas separados por comas para actualizar |
|
||||
| `customFields` | string | No | Campos personalizados como objeto JSON |
|
||||
| `tags` | string | No | IDs de etiquetas separados por comas |
|
||||
| `ownerId` | string | No | ID de usuario propietario |
|
||||
| `tagsApplyMode` | string | No | Modo de aplicación de etiquetas: append_only, remove_only, o replace |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos de las cuentas actualizadas en masa |
|
||||
|
||||
### `pylon_search_accounts`
|
||||
|
||||
Buscar cuentas con filtros personalizados
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `filter` | string | Sí | Filtro como cadena JSON con estructura de campo/operador/valor |
|
||||
| `limit` | string | No | Número de cuentas a devolver \(1-1000, predeterminado 100\) |
|
||||
| `cursor` | string | No | Cursor de paginación para la siguiente página de resultados |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Resultados de la búsqueda |
|
||||
|
||||
### `pylon_list_contacts`
|
||||
|
||||
Obtener una lista de contactos
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `cursor` | string | No | Cursor de paginación para la siguiente página de resultados |
|
||||
| `limit` | string | No | Número máximo de contactos a devolver |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Lista de contactos |
|
||||
|
||||
### `pylon_create_contact`
|
||||
|
||||
Crear un nuevo contacto con propiedades específicas
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `name` | string | Sí | Nombre del contacto |
|
||||
| `email` | string | No | Dirección de correo electrónico del contacto |
|
||||
| `accountId` | string | No | ID de cuenta para asociar con el contacto |
|
||||
| `accountExternalId` | string | No | ID de cuenta externa para asociar con el contacto |
|
||||
| `avatarUrl` | string | No | URL para la imagen de avatar del contacto |
|
||||
| `customFields` | string | No | Campos personalizados como objeto JSON |
|
||||
| `portalRole` | string | No | Rol del portal para el contacto |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos del contacto creado |
|
||||
|
||||
### `pylon_get_contact`
|
||||
|
||||
Recuperar un contacto específico por ID
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `contactId` | string | Sí | ID del contacto a recuperar |
|
||||
| `cursor` | string | No | Cursor de paginación para la siguiente página de resultados |
|
||||
| `limit` | string | No | Número máximo de elementos a devolver |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos del contacto |
|
||||
|
||||
### `pylon_update_contact`
|
||||
|
||||
Actualizar un contacto existente con propiedades específicas
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `contactId` | string | Sí | ID del contacto a actualizar |
|
||||
| `name` | string | No | Nombre del contacto |
|
||||
| `email` | string | No | Dirección de correo electrónico del contacto |
|
||||
| `accountId` | string | No | ID de cuenta para asociar con el contacto |
|
||||
| `accountExternalId` | string | No | ID de cuenta externa para asociar con el contacto |
|
||||
| `avatarUrl` | string | No | URL para la imagen de avatar del contacto |
|
||||
| `customFields` | string | No | Campos personalizados como objeto JSON |
|
||||
| `portalRole` | string | No | Rol del portal para el contacto |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos de contacto actualizados |
|
||||
|
||||
### `pylon_delete_contact`
|
||||
|
||||
Eliminar un contacto específico por ID
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `contactId` | string | Sí | ID del contacto a eliminar |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Resultado de la operación de eliminación |
|
||||
|
||||
### `pylon_search_contacts`
|
||||
|
||||
Buscar contactos utilizando un filtro
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `filter` | string | Sí | Filtro como objeto JSON |
|
||||
| `limit` | string | No | Número máximo de contactos a devolver |
|
||||
| `cursor` | string | No | Cursor de paginación para la siguiente página de resultados |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Resultados de la búsqueda |
|
||||
|
||||
### `pylon_list_users`
|
||||
|
||||
Obtener una lista de usuarios
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Lista de usuarios |
|
||||
|
||||
### `pylon_get_user`
|
||||
|
||||
Recuperar un usuario específico por ID
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `userId` | string | Sí | ID del usuario a recuperar |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos del usuario |
|
||||
|
||||
### `pylon_update_user`
|
||||
|
||||
Actualizar un usuario existente con propiedades específicas
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `userId` | string | Sí | ID del usuario a actualizar |
|
||||
| `roleId` | string | No | ID del rol a asignar al usuario |
|
||||
| `status` | string | No | Estado del usuario |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos actualizados del usuario |
|
||||
|
||||
### `pylon_search_users`
|
||||
|
||||
Buscar usuarios utilizando un filtro con campo de correo electrónico
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `filter` | string | Sí | Filtro como objeto JSON con campo de correo electrónico |
|
||||
| `cursor` | string | No | Cursor de paginación para la siguiente página de resultados |
|
||||
| `limit` | string | No | Número máximo de usuarios a devolver |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Resultados de búsqueda |
|
||||
|
||||
### `pylon_list_teams`
|
||||
|
||||
Obtener una lista de equipos
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Lista de equipos |
|
||||
|
||||
### `pylon_get_team`
|
||||
|
||||
Obtener un equipo específico por ID
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `teamId` | string | Sí | ID del equipo a recuperar |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos del equipo |
|
||||
|
||||
### `pylon_create_team`
|
||||
|
||||
Crear un nuevo equipo con propiedades específicas
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `name` | string | No | Nombre del equipo |
|
||||
| `userIds` | string | No | IDs de usuarios separados por comas para añadir como miembros del equipo |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos del equipo creado |
|
||||
|
||||
### `pylon_update_team`
|
||||
|
||||
Actualizar un equipo existente con propiedades específicas (userIds reemplaza toda la membresía)
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `teamId` | string | Sí | ID del equipo a actualizar |
|
||||
| `name` | string | No | Nombre del equipo |
|
||||
| `userIds` | string | No | IDs de usuario separados por comas \(reemplaza toda la membresía del equipo\) |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos del equipo actualizado |
|
||||
|
||||
### `pylon_list_tags`
|
||||
|
||||
Obtener una lista de etiquetas
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Lista de etiquetas |
|
||||
|
||||
### `pylon_get_tag`
|
||||
|
||||
Obtener una etiqueta específica por ID
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `tagId` | string | Sí | ID de la etiqueta a obtener |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos de la etiqueta |
|
||||
|
||||
### `pylon_create_tag`
|
||||
|
||||
Crear una nueva etiqueta con propiedades específicas (objectType: account/issue/contact)
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `objectType` | string | Sí | Tipo de objeto para la etiqueta \(account, issue, o contact\) |
|
||||
| `value` | string | Sí | Valor/nombre de la etiqueta |
|
||||
| `hexColor` | string | No | Código de color hexadecimal para la etiqueta \(p. ej., #FF5733\) |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos de la etiqueta creada |
|
||||
|
||||
### `pylon_update_tag`
|
||||
|
||||
Actualizar una etiqueta existente con propiedades específicas
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `tagId` | string | Sí | ID de la etiqueta a actualizar |
|
||||
| `hexColor` | string | No | Código de color hexadecimal para la etiqueta \(p. ej., #FF5733\) |
|
||||
| `value` | string | No | Valor/nombre de la etiqueta |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Datos de la etiqueta actualizada |
|
||||
|
||||
### `pylon_delete_tag`
|
||||
|
||||
Eliminar una etiqueta específica por ID
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | ----------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `tagId` | string | Sí | ID de la etiqueta a eliminar |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Resultado de la operación de eliminación |
|
||||
|
||||
### `pylon_redact_message`
|
||||
|
||||
Redactar un mensaje específico dentro de un problema
|
||||
|
||||
#### Entrada
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Descripción |
|
||||
| --------- | ---- | ----------- | ----------- |
|
||||
| `apiToken` | string | Sí | Token de API de Pylon |
|
||||
| `issueId` | string | Sí | ID del problema que contiene el mensaje |
|
||||
| `messageId` | string | Sí | ID del mensaje a redactar |
|
||||
|
||||
#### Salida
|
||||
|
||||
| Parámetro | Tipo | Descripción |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Estado de éxito de la operación |
|
||||
| `output` | object | Resultado de la operación de redacción |
|
||||
|
||||
## Notas
|
||||
|
||||
- Categoría: `tools`
|
||||
- Tipo: `pylon`
|
||||
@@ -1,807 +0,0 @@
|
||||
---
|
||||
title: Pylon
|
||||
description: Gérez les problèmes de support client, les comptes, les contacts,
|
||||
les utilisateurs, les équipes et les tags dans Pylon
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="pylon"
|
||||
color="#E8F4FA"
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Pylon](https://usepylon.com/) est une plateforme avancée de support et de réussite client conçue pour vous aider à gérer tous les aspects de vos relations client—des problèmes de support aux comptes, contacts, utilisateurs, équipes et au-delà. Pylon permet aux équipes de support et de réussite d'opérer efficacement et de manière programmatique avec une API riche et un ensemble d'outils complet.
|
||||
|
||||
Avec Pylon dans Sim, vous pouvez :
|
||||
|
||||
- **Gérer les problèmes de support :**
|
||||
- Lister, créer, obtenir, mettre à jour et supprimer des problèmes de support pour un suivi efficace des cas.
|
||||
- Rechercher et mettre en veille des problèmes pour aider les agents à rester concentrés et organisés.
|
||||
- Gérer les abonnés aux problèmes et les problèmes externes pour une collaboration fluide avec les parties prenantes internes et externes.
|
||||
|
||||
- **Gestion complète des comptes :**
|
||||
- Lister, créer, obtenir, mettre à jour et supprimer des comptes clients.
|
||||
- Mettre à jour en masse des comptes de manière programmatique.
|
||||
- Rechercher des comptes pour trouver rapidement les informations clients pertinentes pour le support ou la prospection.
|
||||
|
||||
- **Gestion des contacts :**
|
||||
- Lister, créer, obtenir, mettre à jour, supprimer et rechercher des contacts—gérez toutes les personnes liées à vos comptes.
|
||||
|
||||
- **Opérations utilisateurs et équipes :**
|
||||
- Lister, obtenir, mettre à jour et rechercher des utilisateurs dans votre espace de travail Pylon.
|
||||
- Lister, créer, obtenir et mettre à jour des équipes pour structurer votre organisation de support et vos flux de travail.
|
||||
|
||||
- **Étiquetage et organisation :**
|
||||
- Lister, obtenir, créer, mettre à jour et supprimer des tags pour catégoriser les problèmes, les comptes ou les contacts.
|
||||
|
||||
- **Gestion des messages :**
|
||||
- Expurger le contenu sensible des messages directement depuis vos flux de travail pour la confidentialité et la conformité.
|
||||
|
||||
En intégrant les outils Pylon dans Sim, vos agents peuvent automatiser tous les aspects des opérations de support :
|
||||
- Ouvrir, mettre à jour ou trier automatiquement de nouveaux problèmes lorsque des événements clients se produisent.
|
||||
- Maintenir des données de compte et de contact synchronisées dans l'ensemble de votre stack technologique.
|
||||
- Acheminer les conversations, gérer les escalades et organiser vos données de support à l'aide de tags et d'équipes.
|
||||
- Garantir que les données sensibles sont correctement gérées en expurgeant les messages selon les besoins.
|
||||
|
||||
Les points de terminaison de Pylon offrent un contrôle granulaire pour la gestion complète du cycle de vie des problèmes et des relations clients. Que ce soit pour développer un service d'assistance, alimenter un service client proactif ou s'intégrer à d'autres systèmes, Pylon dans Sim permet une automatisation CRM de premier ordre — de manière sécurisée, flexible et à grande échelle.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Instructions d'utilisation
|
||||
|
||||
Intégrez Pylon dans le flux de travail. Gérez les problèmes (lister, créer, obtenir, mettre à jour, supprimer, rechercher, mettre en veille, suiveurs, problèmes externes), les comptes (lister, créer, obtenir, mettre à jour, supprimer, mise à jour en masse, rechercher), les contacts (lister, créer, obtenir, mettre à jour, supprimer, rechercher), les utilisateurs (lister, obtenir, mettre à jour, rechercher), les équipes (lister, obtenir, créer, mettre à jour), les tags (lister, obtenir, créer, mettre à jour, supprimer) et les messages (expurger).
|
||||
|
||||
## Outils
|
||||
|
||||
### `pylon_list_issues`
|
||||
|
||||
Récupérer une liste de problèmes dans une plage de temps spécifiée
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | ----------- | ----------- |
|
||||
| `apiToken` | chaîne | Oui | Jeton API Pylon |
|
||||
| `startTime` | chaîne | Oui | Heure de début au format RFC3339 \(ex., 2024-01-01T00:00:00Z\) |
|
||||
| `endTime` | chaîne | Oui | Heure de fin au format RFC3339 \(ex., 2024-01-31T23:59:59Z\) |
|
||||
| `cursor` | chaîne | Non | Curseur de pagination pour la page suivante de résultats |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | booléen | Statut de réussite de l'opération |
|
||||
| `output` | objet | Liste des problèmes |
|
||||
|
||||
### `pylon_create_issue`
|
||||
|
||||
Créer un nouveau problème avec les propriétés spécifiées
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `title` | string | Oui | Titre du problème |
|
||||
| `bodyHtml` | string | Oui | Corps du problème au format HTML |
|
||||
| `accountId` | string | Non | ID du compte à associer au problème |
|
||||
| `assigneeId` | string | Non | ID de l'utilisateur à qui assigner le problème |
|
||||
| `teamId` | string | Non | ID de l'équipe à qui assigner le problème |
|
||||
| `requesterId` | string | Non | ID de l'utilisateur demandeur \(alternative à requester_email\) |
|
||||
| `requesterEmail` | string | Non | Adresse e-mail du demandeur \(alternative à requester_id\) |
|
||||
| `priority` | string | Non | Priorité du problème |
|
||||
| `tags` | string | Non | IDs de tags séparés par des virgules |
|
||||
| `customFields` | string | Non | Champs personnalisés sous forme d'objet JSON |
|
||||
| `attachmentUrls` | string | Non | URLs des pièces jointes séparées par des virgules |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données du problème créé |
|
||||
|
||||
### `pylon_get_issue`
|
||||
|
||||
Récupérer un problème spécifique par ID
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `issueId` | string | Oui | L'ID du problème à récupérer |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données du problème |
|
||||
|
||||
### `pylon_update_issue`
|
||||
|
||||
Mettre à jour un problème existant
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `issueId` | string | Oui | L'ID du problème à mettre à jour |
|
||||
| `state` | string | Non | État du problème |
|
||||
| `assigneeId` | string | Non | ID de l'utilisateur à qui assigner le problème |
|
||||
| `teamId` | string | Non | ID de l'équipe à qui assigner le problème |
|
||||
| `tags` | string | Non | IDs de tags séparés par des virgules |
|
||||
| `customFields` | string | Non | Champs personnalisés sous forme d'objet JSON |
|
||||
| `customerPortalVisible` | boolean | Non | Indique si le problème est visible dans le portail client |
|
||||
| `requesterId` | string | Non | ID de l'utilisateur demandeur |
|
||||
| `accountId` | string | Non | ID du compte à associer au problème |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données du problème mis à jour |
|
||||
|
||||
### `pylon_delete_issue`
|
||||
|
||||
Supprimer un problème par ID
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | chaîne | Oui | Jeton API Pylon |
|
||||
| `issueId` | chaîne | Oui | L'ID du problème à supprimer |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | booléen | Statut de réussite de l'opération |
|
||||
| `output` | objet | Résultat de la suppression |
|
||||
|
||||
### `pylon_search_issues`
|
||||
|
||||
Interroger les problèmes à l'aide de filtres
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | chaîne | Oui | Jeton API Pylon |
|
||||
| `filter` | chaîne | Oui | Critères de filtre sous forme de chaîne JSON |
|
||||
| `cursor` | chaîne | Non | Curseur de pagination pour la page suivante de résultats |
|
||||
| `limit` | nombre | Non | Nombre maximum de résultats à retourner |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | booléen | Statut de réussite de l'opération |
|
||||
| `output` | objet | Résultats de la recherche |
|
||||
|
||||
### `pylon_snooze_issue`
|
||||
|
||||
Reporter la visibilité du problème jusqu'à l'heure spécifiée
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | chaîne | Oui | Jeton API Pylon |
|
||||
| `issueId` | chaîne | Oui | L'ID du problème à mettre en veille |
|
||||
| `snoozeUntil` | chaîne | Oui | Horodatage RFC3339 indiquant quand le problème doit réapparaître \(par exemple, 2024-01-01T00:00:00Z\) |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données du problème mis en veille |
|
||||
|
||||
### `pylon_list_issue_followers`
|
||||
|
||||
Obtenir la liste des abonnés pour un problème spécifique
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `issueId` | string | Oui | L'ID du problème |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Liste des abonnés |
|
||||
|
||||
### `pylon_manage_issue_followers`
|
||||
|
||||
Ajouter ou supprimer des abonnés d'un problème
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `issueId` | string | Oui | L'ID du problème |
|
||||
| `userIds` | string | Non | IDs d'utilisateurs séparés par des virgules à ajouter/supprimer |
|
||||
| `contactIds` | string | Non | IDs de contacts séparés par des virgules à ajouter/supprimer |
|
||||
| `operation` | string | Non | Opération à effectuer : "add" ou "remove" \(par défaut : "add"\) |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Liste mise à jour des abonnés |
|
||||
|
||||
### `pylon_link_external_issue`
|
||||
|
||||
Lier un problème à un problème de système externe
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `issueId` | string | Oui | L'ID du problème Pylon |
|
||||
| `externalIssueId` | string | Oui | L'ID du problème externe |
|
||||
| `source` | string | Oui | Le système source \(par ex., "jira", "linear", "github"\) |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données du problème externe lié |
|
||||
|
||||
### `pylon_list_accounts`
|
||||
|
||||
Récupérer une liste paginée de comptes
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `limit` | string | Non | Nombre de comptes à retourner \(1-1000, par défaut 100\) |
|
||||
| `cursor` | string | Non | Curseur de pagination pour la page suivante de résultats |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Liste des comptes |
|
||||
|
||||
### `pylon_create_account`
|
||||
|
||||
Créer un nouveau compte avec les propriétés spécifiées
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `name` | string | Oui | Nom du compte |
|
||||
| `domains` | string | Non | Liste de domaines séparés par des virgules |
|
||||
| `primaryDomain` | string | Non | Domaine principal pour le compte |
|
||||
| `customFields` | string | Non | Champs personnalisés sous forme d'objet JSON |
|
||||
| `tags` | string | Non | IDs de tags séparés par des virgules |
|
||||
| `channels` | string | Non | IDs de canaux séparés par des virgules |
|
||||
| `externalIds` | string | Non | IDs externes séparés par des virgules |
|
||||
| `ownerId` | string | Non | ID de l'utilisateur propriétaire |
|
||||
| `logoUrl` | string | Non | URL vers le logo du compte |
|
||||
| `subaccountIds` | string | Non | IDs de sous-comptes séparés par des virgules |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données du compte créé |
|
||||
|
||||
### `pylon_get_account`
|
||||
|
||||
Récupérer un seul compte par ID
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | ----------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `accountId` | string | Oui | ID du compte à récupérer |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données du compte |
|
||||
|
||||
### `pylon_update_account`
|
||||
|
||||
Mettre à jour un compte existant avec de nouvelles propriétés
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | ----------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `accountId` | string | Oui | ID du compte à mettre à jour |
|
||||
| `name` | string | Non | Nom du compte |
|
||||
| `domains` | string | Non | Liste de domaines séparés par des virgules |
|
||||
| `primaryDomain` | string | Non | Domaine principal du compte |
|
||||
| `customFields` | string | Non | Champs personnalisés sous forme d'objet JSON |
|
||||
| `tags` | string | Non | IDs de tags séparés par des virgules |
|
||||
| `channels` | string | Non | IDs de canaux séparés par des virgules |
|
||||
| `externalIds` | string | Non | IDs externes séparés par des virgules |
|
||||
| `ownerId` | string | Non | ID de l'utilisateur propriétaire |
|
||||
| `logoUrl` | string | Non | URL du logo du compte |
|
||||
| `subaccountIds` | string | Non | IDs de sous-comptes séparés par des virgules |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données du compte mises à jour |
|
||||
|
||||
### `pylon_delete_account`
|
||||
|
||||
Supprimer un compte par ID
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | ----------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `accountId` | string | Oui | ID du compte à supprimer |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Confirmation de suppression |
|
||||
|
||||
### `pylon_bulk_update_accounts`
|
||||
|
||||
Mettre à jour plusieurs comptes à la fois
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | ----------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `accountIds` | string | Oui | IDs de comptes séparés par des virgules à mettre à jour |
|
||||
| `customFields` | string | Non | Champs personnalisés sous forme d'objet JSON |
|
||||
| `tags` | string | Non | IDs de tags séparés par des virgules |
|
||||
| `ownerId` | string | Non | ID de l'utilisateur propriétaire |
|
||||
| `tagsApplyMode` | string | Non | Mode d'application des tags : append_only, remove_only, ou replace |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données des comptes mis à jour en masse |
|
||||
|
||||
### `pylon_search_accounts`
|
||||
|
||||
Rechercher des comptes avec des filtres personnalisés
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `filter` | string | Oui | Filtre sous forme de chaîne JSON avec structure champ/opérateur/valeur |
|
||||
| `limit` | string | Non | Nombre de comptes à retourner \(1-1000, par défaut 100\) |
|
||||
| `cursor` | string | Non | Curseur de pagination pour la page suivante de résultats |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Résultats de recherche |
|
||||
|
||||
### `pylon_list_contacts`
|
||||
|
||||
Récupérer une liste de contacts
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `cursor` | string | Non | Curseur de pagination pour la page suivante de résultats |
|
||||
| `limit` | string | Non | Nombre maximum de contacts à retourner |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Liste des contacts |
|
||||
|
||||
### `pylon_create_contact`
|
||||
|
||||
Créer un nouveau contact avec des propriétés spécifiées
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `name` | string | Oui | Nom du contact |
|
||||
| `email` | string | Non | Adresse e-mail du contact |
|
||||
| `accountId` | string | Non | ID du compte à associer au contact |
|
||||
| `accountExternalId` | string | Non | ID de compte externe à associer au contact |
|
||||
| `avatarUrl` | string | Non | URL pour l'image d'avatar du contact |
|
||||
| `customFields` | string | Non | Champs personnalisés sous forme d'objet JSON |
|
||||
| `portalRole` | string | Non | Rôle du portail pour le contact |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données du contact créé |
|
||||
|
||||
### `pylon_get_contact`
|
||||
|
||||
Récupérer un contact spécifique par ID
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | ----------- | ----------- |
|
||||
| `apiToken` | string | Oui | Token API Pylon |
|
||||
| `contactId` | string | Oui | ID du contact à récupérer |
|
||||
| `cursor` | string | Non | Curseur de pagination pour la page suivante de résultats |
|
||||
| `limit` | string | Non | Nombre maximum d'éléments à retourner |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données du contact |
|
||||
|
||||
### `pylon_update_contact`
|
||||
|
||||
Mettre à jour un contact existant avec les propriétés spécifiées
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | ----------- | ----------- |
|
||||
| `apiToken` | string | Oui | Token API Pylon |
|
||||
| `contactId` | string | Oui | ID du contact à mettre à jour |
|
||||
| `name` | string | Non | Nom du contact |
|
||||
| `email` | string | Non | Adresse e-mail du contact |
|
||||
| `accountId` | string | Non | ID du compte à associer au contact |
|
||||
| `accountExternalId` | string | Non | ID de compte externe à associer au contact |
|
||||
| `avatarUrl` | string | Non | URL pour l'image d'avatar du contact |
|
||||
| `customFields` | string | Non | Champs personnalisés sous forme d'objet JSON |
|
||||
| `portalRole` | string | Non | Rôle du portail pour le contact |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données du contact mises à jour |
|
||||
|
||||
### `pylon_delete_contact`
|
||||
|
||||
Supprimer un contact spécifique par ID
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `contactId` | string | Oui | ID du contact à supprimer |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Résultat de l'opération de suppression |
|
||||
|
||||
### `pylon_search_contacts`
|
||||
|
||||
Rechercher des contacts à l'aide d'un filtre
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `filter` | string | Oui | Filtre sous forme d'objet JSON |
|
||||
| `limit` | string | Non | Nombre maximum de contacts à renvoyer |
|
||||
| `cursor` | string | Non | Curseur de pagination pour la page suivante de résultats |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Résultats de la recherche |
|
||||
|
||||
### `pylon_list_users`
|
||||
|
||||
Récupérer une liste d'utilisateurs
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Liste des utilisateurs |
|
||||
|
||||
### `pylon_get_user`
|
||||
|
||||
Récupérer un utilisateur spécifique par ID
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `userId` | string | Oui | ID de l'utilisateur à récupérer |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données de l'utilisateur |
|
||||
|
||||
### `pylon_update_user`
|
||||
|
||||
Mettre à jour un utilisateur existant avec les propriétés spécifiées
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `userId` | string | Oui | ID de l'utilisateur à mettre à jour |
|
||||
| `roleId` | string | Non | ID du rôle à attribuer à l'utilisateur |
|
||||
| `status` | string | Non | Statut de l'utilisateur |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données de l'utilisateur mises à jour |
|
||||
|
||||
### `pylon_search_users`
|
||||
|
||||
Rechercher des utilisateurs à l'aide d'un filtre avec le champ email
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `filter` | string | Oui | Filtre sous forme d'objet JSON avec champ email |
|
||||
| `cursor` | string | Non | Curseur de pagination pour la page suivante de résultats |
|
||||
| `limit` | string | Non | Nombre maximum d'utilisateurs à retourner |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Résultats de recherche |
|
||||
|
||||
### `pylon_list_teams`
|
||||
|
||||
Récupérer une liste d'équipes
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Liste des équipes |
|
||||
|
||||
### `pylon_get_team`
|
||||
|
||||
Récupérer une équipe spécifique par ID
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `teamId` | string | Oui | ID de l'équipe à récupérer |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données de l'équipe |
|
||||
|
||||
### `pylon_create_team`
|
||||
|
||||
Créer une nouvelle équipe avec les propriétés spécifiées
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `name` | string | Non | Nom de l'équipe |
|
||||
| `userIds` | string | Non | IDs d'utilisateurs séparés par des virgules à ajouter comme membres de l'équipe |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données de l'équipe créée |
|
||||
|
||||
### `pylon_update_team`
|
||||
|
||||
Mettre à jour une équipe existante avec les propriétés spécifiées (userIds remplace l'ensemble des membres)
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `teamId` | string | Oui | ID de l'équipe à mettre à jour |
|
||||
| `name` | string | Non | Nom de l'équipe |
|
||||
| `userIds` | string | Non | IDs d'utilisateurs séparés par des virgules \(remplace tous les membres de l'équipe\) |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données de l'équipe mise à jour |
|
||||
|
||||
### `pylon_list_tags`
|
||||
|
||||
Récupérer une liste de tags
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Liste des tags |
|
||||
|
||||
### `pylon_get_tag`
|
||||
|
||||
Récupérer un tag spécifique par ID
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Jeton API Pylon |
|
||||
| `tagId` | string | Oui | ID du tag à récupérer |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données du tag |
|
||||
|
||||
### `pylon_create_tag`
|
||||
|
||||
Créer un nouveau tag avec les propriétés spécifiées (objectType : account/issue/contact)
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Token API Pylon |
|
||||
| `objectType` | string | Oui | Type d'objet pour le tag \(account, issue, ou contact\) |
|
||||
| `value` | string | Oui | Valeur/nom du tag |
|
||||
| `hexColor` | string | Non | Code couleur hexadécimal pour le tag \(ex., #FF5733\) |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données du tag créé |
|
||||
|
||||
### `pylon_update_tag`
|
||||
|
||||
Mettre à jour un tag existant avec les propriétés spécifiées
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | Oui | Token API Pylon |
|
||||
| `tagId` | string | Oui | ID du tag à mettre à jour |
|
||||
| `hexColor` | string | Non | Code couleur hexadécimal pour le tag \(ex., #FF5733\) |
|
||||
| `value` | string | Non | Valeur/nom du tag |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Statut de réussite de l'opération |
|
||||
| `output` | object | Données du tag mis à jour |
|
||||
|
||||
### `pylon_delete_tag`
|
||||
|
||||
Supprimer un tag spécifique par ID
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | ----------- | ----------- |
|
||||
| `apiToken` | chaîne | Oui | Token API Pylon |
|
||||
| `tagId` | chaîne | Oui | ID du tag à supprimer |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | booléen | Statut de réussite de l'opération |
|
||||
| `output` | objet | Résultat de l'opération de suppression |
|
||||
|
||||
### `pylon_redact_message`
|
||||
|
||||
Expurger un message spécifique dans un problème
|
||||
|
||||
#### Entrée
|
||||
|
||||
| Paramètre | Type | Obligatoire | Description |
|
||||
| --------- | ---- | ----------- | ----------- |
|
||||
| `apiToken` | chaîne | Oui | Token API Pylon |
|
||||
| `issueId` | chaîne | Oui | ID du problème contenant le message |
|
||||
| `messageId` | chaîne | Oui | ID du message à expurger |
|
||||
|
||||
#### Sortie
|
||||
|
||||
| Paramètre | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | booléen | Statut de réussite de l'opération |
|
||||
| `output` | objet | Résultat de l'opération d'expurgation |
|
||||
|
||||
## Notes
|
||||
|
||||
- Catégorie : `tools`
|
||||
- Type : `pylon`
|
||||
@@ -1,806 +0,0 @@
|
||||
---
|
||||
title: Pylon
|
||||
description: Pylonでカスタマーサポートの問題、アカウント、連絡先、ユーザー、チーム、タグを管理する
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="pylon"
|
||||
color="#E8F4FA"
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Pylon](https://usepylon.com/)は、カスタマーサポートの問題からアカウント、連絡先、ユーザー、チームなど、顧客関係のあらゆる側面を管理するために設計された高度なカスタマーサポートおよび成功プラットフォームです。Pylonは豊富なAPIと包括的なツールセットを備え、サポートおよび成功チームが効率的かつプログラム的に運営できるよう支援します。
|
||||
|
||||
SimでPylonを使用すると、以下のことが可能です:
|
||||
|
||||
- **サポート問題の管理:**
|
||||
- 効率的なケース追跡のために、サポート問題の一覧表示、作成、取得、更新、削除ができます。
|
||||
- エージェントが集中して整理できるよう、問題の検索やスヌーズ機能を利用できます。
|
||||
- 内部および外部の関係者とのシームレスな連携のために、問題のフォロワーや外部問題を処理できます。
|
||||
|
||||
- **完全なアカウント管理:**
|
||||
- 顧客アカウントの一覧表示、作成、取得、更新、削除ができます。
|
||||
- プログラムによるアカウントの一括更新が可能です。
|
||||
- サポートやアウトリーチに関連する顧客情報をすばやく見つけるためのアカウント検索ができます。
|
||||
|
||||
- **連絡先管理:**
|
||||
- アカウントに関連するすべての人を管理するための連絡先の一覧表示、作成、取得、更新、削除、検索ができます。
|
||||
|
||||
- **ユーザーとチームの操作:**
|
||||
- Pylonワークスペース内のユーザーの一覧表示、取得、更新、検索ができます。
|
||||
- サポート組織とワークフローを構築するためのチームの一覧表示、作成、取得、更新ができます。
|
||||
|
||||
- **タグ付けと整理:**
|
||||
- 問題、アカウント、または連絡先を分類するためのタグの一覧表示、取得、作成、更新、削除ができます。
|
||||
|
||||
- **メッセージ処理:**
|
||||
- プライバシーとコンプライアンスのために、ワークフローから直接機密メッセージ内容を編集できます。
|
||||
|
||||
PylonツールをSimに統合することで、エージェントはサポート業務のあらゆる側面を自動化できます:
|
||||
- 顧客イベントが発生した際に、新しい問題を自動的に開いたり、更新したり、トリアージしたりできます。
|
||||
- テクノロジースタック全体でアカウントと連絡先データを同期させて維持できます。
|
||||
- タグとチームを使用して会話のルーティング、エスカレーションの処理、サポートデータの整理ができます。
|
||||
- 必要に応じてメッセージを編集することで、機密データが適切に管理されるようにします。
|
||||
|
||||
Pylonのエンドポイントは、顧客の問題と関係の全ライフサイクル管理のための詳細な制御を提供します。サポートデスクの拡張、積極的な顧客成功の推進、または他のシステムとの統合など、Sim内のPylonは、安全に、柔軟に、そして大規模に、最高クラスのCRM自動化を実現します。
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## 使用方法
|
||||
|
||||
Pylonをワークフローに統合します。問題(一覧表示、作成、取得、更新、削除、検索、スヌーズ、フォロワー、外部問題)、アカウント(一覧表示、作成、取得、更新、削除、一括更新、検索)、連絡先(一覧表示、作成、取得、更新、削除、検索)、ユーザー(一覧表示、取得、更新、検索)、チーム(一覧表示、取得、作成、更新)、タグ(一覧表示、取得、作成、更新、削除)、およびメッセージ(編集)を管理します。
|
||||
|
||||
## ツール
|
||||
|
||||
### `pylon_list_issues`
|
||||
|
||||
指定された時間範囲内の問題のリストを取得する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `startTime` | string | はい | RFC3339形式の開始時間(例:2024-01-01T00:00:00Z) |
|
||||
| `endTime` | string | はい | RFC3339形式の終了時間(例:2024-01-31T23:59:59Z) |
|
||||
| `cursor` | string | いいえ | 結果の次のページのページネーションカーソル |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 問題のリスト |
|
||||
|
||||
### `pylon_create_issue`
|
||||
|
||||
指定されたプロパティで新しい問題を作成する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `title` | string | はい | 課題のタイトル |
|
||||
| `bodyHtml` | string | はい | HTML形式の課題本文 |
|
||||
| `accountId` | string | いいえ | 課題に関連付けるアカウントID |
|
||||
| `assigneeId` | string | いいえ | 課題を割り当てるユーザーID |
|
||||
| `teamId` | string | いいえ | 課題を割り当てるチームID |
|
||||
| `requesterId` | string | いいえ | 要求者ユーザーID(requester_emailの代替) |
|
||||
| `requesterEmail` | string | いいえ | 要求者のメールアドレス(requester_idの代替) |
|
||||
| `priority` | string | いいえ | 課題の優先度 |
|
||||
| `tags` | string | いいえ | カンマ区切りのタグID |
|
||||
| `customFields` | string | いいえ | JSONオブジェクトとしてのカスタムフィールド |
|
||||
| `attachmentUrls` | string | いいえ | カンマ区切りの添付ファイルURL |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 作成された課題データ |
|
||||
|
||||
### `pylon_get_issue`
|
||||
|
||||
IDで特定の課題を取得する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `issueId` | string | はい | 取得する課題のID |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 課題データ |
|
||||
|
||||
### `pylon_update_issue`
|
||||
|
||||
既存の課題を更新する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `issueId` | string | はい | 更新する課題のID |
|
||||
| `state` | string | いいえ | 課題の状態 |
|
||||
| `assigneeId` | string | いいえ | 課題を割り当てるユーザーID |
|
||||
| `teamId` | string | いいえ | 課題を割り当てるチームID |
|
||||
| `tags` | string | いいえ | カンマ区切りのタグID |
|
||||
| `customFields` | string | いいえ | JSONオブジェクトとしてのカスタムフィールド |
|
||||
| `customerPortalVisible` | boolean | いいえ | 課題がカスタマーポータルで表示されるかどうか |
|
||||
| `requesterId` | string | いいえ | 要求者ユーザーID |
|
||||
| `accountId` | string | いいえ | 課題に関連付けるアカウントID |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 更新された課題データ |
|
||||
|
||||
### `pylon_delete_issue`
|
||||
|
||||
IDで課題を削除する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `issueId` | string | はい | 削除する課題のID |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 削除結果 |
|
||||
|
||||
### `pylon_search_issues`
|
||||
|
||||
フィルターを使用して課題を検索する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `filter` | string | はい | JSON文字列としてのフィルター条件 |
|
||||
| `cursor` | string | いいえ | 次のページの結果のためのページネーションカーソル |
|
||||
| `limit` | number | いいえ | 返す結果の最大数 |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 検索結果 |
|
||||
|
||||
### `pylon_snooze_issue`
|
||||
|
||||
指定した時間まで課題の表示を延期する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `issueId` | string | はい | スヌーズする課題のID |
|
||||
| `snoozeUntil` | string | はい | 課題が再表示されるべきRFC3339タイムスタンプ(例:2024-01-01T00:00:00Z) |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | スヌーズされた課題データ |
|
||||
|
||||
### `pylon_list_issue_followers`
|
||||
|
||||
特定の課題のフォロワーリストを取得する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `issueId` | string | はい | 課題のID |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | フォロワーリスト |
|
||||
|
||||
### `pylon_manage_issue_followers`
|
||||
|
||||
課題にフォロワーを追加または削除する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `issueId` | string | はい | 課題のID |
|
||||
| `userIds` | string | いいえ | 追加/削除するユーザーIDのカンマ区切りリスト |
|
||||
| `contactIds` | string | いいえ | 追加/削除する連絡先IDのカンマ区切りリスト |
|
||||
| `operation` | string | いいえ | 実行する操作:"add"(追加)または"remove"(削除)(デフォルト:"add") |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 更新されたフォロワーリスト |
|
||||
|
||||
### `pylon_link_external_issue`
|
||||
|
||||
課題を外部システムの課題にリンクする
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `issueId` | string | はい | Pylon課題のID |
|
||||
| `externalIssueId` | string | はい | 外部課題のID |
|
||||
| `source` | string | はい | ソースシステム(例:"jira"、"linear"、"github") |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | リンクされた外部課題データ |
|
||||
|
||||
### `pylon_list_accounts`
|
||||
|
||||
アカウントのページ分割リストを取得する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `limit` | string | いいえ | 返すアカウント数(1-1000、デフォルト100) |
|
||||
| `cursor` | string | いいえ | 次のページの結果のためのページネーションカーソル |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | アカウントのリスト |
|
||||
|
||||
### `pylon_create_account`
|
||||
|
||||
指定されたプロパティで新しいアカウントを作成する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `name` | string | はい | アカウント名 |
|
||||
| `domains` | string | いいえ | カンマ区切りのドメインリスト |
|
||||
| `primaryDomain` | string | いいえ | アカウントのプライマリドメイン |
|
||||
| `customFields` | string | いいえ | JSONオブジェクトとしてのカスタムフィールド |
|
||||
| `tags` | string | いいえ | カンマ区切りのタグID |
|
||||
| `channels` | string | いいえ | カンマ区切りのチャネルID |
|
||||
| `externalIds` | string | いいえ | カンマ区切りの外部ID |
|
||||
| `ownerId` | string | いいえ | オーナーユーザーID |
|
||||
| `logoUrl` | string | いいえ | アカウントロゴのURL |
|
||||
| `subaccountIds` | string | いいえ | カンマ区切りのサブアカウントID |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 作成されたアカウントデータ |
|
||||
|
||||
### `pylon_get_account`
|
||||
|
||||
IDで単一のアカウントを取得する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `accountId` | string | はい | 取得するアカウントID |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | アカウントデータ |
|
||||
|
||||
### `pylon_update_account`
|
||||
|
||||
既存のアカウントを新しいプロパティで更新する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `accountId` | string | はい | 更新するアカウントID |
|
||||
| `name` | string | いいえ | アカウント名 |
|
||||
| `domains` | string | いいえ | カンマ区切りのドメインリスト |
|
||||
| `primaryDomain` | string | いいえ | アカウントのプライマリドメイン |
|
||||
| `customFields` | string | いいえ | JSONオブジェクトとしてのカスタムフィールド |
|
||||
| `tags` | string | いいえ | カンマ区切りのタグID |
|
||||
| `channels` | string | いいえ | カンマ区切りのチャネルID |
|
||||
| `externalIds` | string | いいえ | カンマ区切りの外部ID |
|
||||
| `ownerId` | string | いいえ | オーナーユーザーID |
|
||||
| `logoUrl` | string | いいえ | アカウントロゴのURL |
|
||||
| `subaccountIds` | string | いいえ | カンマ区切りのサブアカウントID |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 更新されたアカウントデータ |
|
||||
|
||||
### `pylon_delete_account`
|
||||
|
||||
IDによるアカウントの削除
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `accountId` | string | はい | 削除するアカウントID |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 削除確認 |
|
||||
|
||||
### `pylon_bulk_update_accounts`
|
||||
|
||||
複数のアカウントを一度に更新
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `accountIds` | string | はい | 更新するアカウントIDのカンマ区切りリスト |
|
||||
| `customFields` | string | いいえ | JSONオブジェクトとしてのカスタムフィールド |
|
||||
| `tags` | string | いいえ | カンマ区切りのタグID |
|
||||
| `ownerId` | string | いいえ | オーナーユーザーID |
|
||||
| `tagsApplyMode` | string | いいえ | タグ適用モード: append_only、remove_only、またはreplace |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 一括更新されたアカウントデータ |
|
||||
|
||||
### `pylon_search_accounts`
|
||||
|
||||
カスタムフィルターでアカウントを検索
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `filter` | string | はい | フィールド/演算子/値構造を持つJSONフィルター文字列 |
|
||||
| `limit` | string | いいえ | 返すアカウント数(1-1000、デフォルト100) |
|
||||
| `cursor` | string | いいえ | 次のページの結果用のページネーションカーソル |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 検索結果 |
|
||||
|
||||
### `pylon_list_contacts`
|
||||
|
||||
連絡先リストの取得
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `cursor` | string | いいえ | 次のページの結果用のページネーションカーソル |
|
||||
| `limit` | string | いいえ | 返す連絡先の最大数 |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 連絡先リスト |
|
||||
|
||||
### `pylon_create_contact`
|
||||
|
||||
指定されたプロパティで新しい連絡先を作成
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `name` | string | はい | 連絡先名 |
|
||||
| `email` | string | いいえ | 連絡先のメールアドレス |
|
||||
| `accountId` | string | いいえ | 連絡先に関連付けるアカウントID |
|
||||
| `accountExternalId` | string | いいえ | 連絡先に関連付ける外部アカウントID |
|
||||
| `avatarUrl` | string | いいえ | 連絡先のアバター画像のURL |
|
||||
| `customFields` | string | いいえ | JSONオブジェクトとしてのカスタムフィールド |
|
||||
| `portalRole` | string | いいえ | 連絡先のポータルロール |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 作成された連絡先データ |
|
||||
|
||||
### `pylon_get_contact`
|
||||
|
||||
IDで特定の連絡先を取得する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `contactId` | string | はい | 取得する連絡先ID |
|
||||
| `cursor` | string | いいえ | 次のページの結果のためのページネーションカーソル |
|
||||
| `limit` | string | いいえ | 返す項目の最大数 |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 連絡先データ |
|
||||
|
||||
### `pylon_update_contact`
|
||||
|
||||
指定されたプロパティで既存の連絡先を更新する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `contactId` | string | はい | 更新する連絡先ID |
|
||||
| `name` | string | いいえ | 連絡先名 |
|
||||
| `email` | string | いいえ | 連絡先のメールアドレス |
|
||||
| `accountId` | string | いいえ | 連絡先に関連付けるアカウントID |
|
||||
| `accountExternalId` | string | いいえ | 連絡先に関連付ける外部アカウントID |
|
||||
| `avatarUrl` | string | いいえ | 連絡先のアバター画像のURL |
|
||||
| `customFields` | string | いいえ | JSONオブジェクトとしてのカスタムフィールド |
|
||||
| `portalRole` | string | いいえ | 連絡先のポータルロール |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 更新された連絡先データ |
|
||||
|
||||
### `pylon_delete_contact`
|
||||
|
||||
IDで特定の連絡先を削除する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `contactId` | string | はい | 削除する連絡先ID |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 削除操作の結果 |
|
||||
|
||||
### `pylon_search_contacts`
|
||||
|
||||
フィルターを使用して連絡先を検索する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `filter` | string | はい | JSONオブジェクトとしてのフィルター |
|
||||
| `limit` | string | いいえ | 返す連絡先の最大数 |
|
||||
| `cursor` | string | いいえ | 次のページの結果のためのページネーションカーソル |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 検索結果 |
|
||||
|
||||
### `pylon_list_users`
|
||||
|
||||
ユーザーリストを取得する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | ユーザーリスト |
|
||||
|
||||
### `pylon_get_user`
|
||||
|
||||
IDで特定のユーザーを取得する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `userId` | string | はい | 取得するユーザーID |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | ユーザーデータ |
|
||||
|
||||
### `pylon_update_user`
|
||||
|
||||
指定されたプロパティで既存のユーザーを更新する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `userId` | string | はい | 更新するユーザーID |
|
||||
| `roleId` | string | いいえ | ユーザーに割り当てるロールID |
|
||||
| `status` | string | いいえ | ユーザーステータス |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 更新されたユーザーデータ |
|
||||
|
||||
### `pylon_search_users`
|
||||
|
||||
メールフィールドを使用したフィルターでユーザーを検索する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `filter` | string | はい | メールフィールドを含むJSONオブジェクトとしてのフィルター |
|
||||
| `cursor` | string | いいえ | 次のページの結果のためのページネーションカーソル |
|
||||
| `limit` | string | いいえ | 返すユーザーの最大数 |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 検索結果 |
|
||||
|
||||
### `pylon_list_teams`
|
||||
|
||||
チームのリストを取得する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | チームのリスト |
|
||||
|
||||
### `pylon_get_team`
|
||||
|
||||
IDで特定のチームを取得する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `teamId` | string | はい | 取得するチームID |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | チームデータ |
|
||||
|
||||
### `pylon_create_team`
|
||||
|
||||
指定されたプロパティで新しいチームを作成する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `name` | string | いいえ | チーム名 |
|
||||
| `userIds` | string | いいえ | チームメンバーとして追加するユーザーIDのカンマ区切りリスト |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 作成されたチームデータ |
|
||||
|
||||
### `pylon_update_team`
|
||||
|
||||
指定されたプロパティで既存のチームを更新します(userIdsはメンバーシップ全体を置き換えます)
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `teamId` | string | はい | 更新するチームID |
|
||||
| `name` | string | いいえ | チーム名 |
|
||||
| `userIds` | string | いいえ | カンマ区切りのユーザーID(チームメンバーシップ全体を置き換えます) |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 更新されたチームデータ |
|
||||
|
||||
### `pylon_list_tags`
|
||||
|
||||
タグのリストを取得する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | タグのリスト |
|
||||
|
||||
### `pylon_get_tag`
|
||||
|
||||
IDで特定のタグを取得する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `tagId` | string | はい | 取得するタグID |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | タグデータ |
|
||||
|
||||
### `pylon_create_tag`
|
||||
|
||||
指定されたプロパティで新しいタグを作成します(objectType: account/issue/contact)
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `objectType` | string | はい | タグのオブジェクトタイプ(account、issue、またはcontact) |
|
||||
| `value` | string | はい | タグの値/名前 |
|
||||
| `hexColor` | string | いいえ | タグの16進カラーコード(例:#FF5733) |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 作成されたタグデータ |
|
||||
|
||||
### `pylon_update_tag`
|
||||
|
||||
指定されたプロパティで既存のタグを更新します
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `tagId` | string | はい | 更新するタグID |
|
||||
| `hexColor` | string | いいえ | タグの16進カラーコード(例:#FF5733) |
|
||||
| `value` | string | いいえ | タグの値/名前 |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 更新されたタグデータ |
|
||||
|
||||
### `pylon_delete_tag`
|
||||
|
||||
IDで特定のタグを削除する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `tagId` | string | はい | 削除するタグID |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 削除操作の結果 |
|
||||
|
||||
### `pylon_redact_message`
|
||||
|
||||
問題内の特定のメッセージを編集する
|
||||
|
||||
#### 入力
|
||||
|
||||
| パラメータ | 型 | 必須 | 説明 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | はい | Pylon APIトークン |
|
||||
| `issueId` | string | はい | メッセージを含む問題ID |
|
||||
| `messageId` | string | はい | 編集するメッセージID |
|
||||
|
||||
#### 出力
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功ステータス |
|
||||
| `output` | object | 編集操作の結果 |
|
||||
|
||||
## 注意事項
|
||||
|
||||
- カテゴリー: `tools`
|
||||
- タイプ: `pylon`
|
||||
@@ -1,806 +0,0 @@
|
||||
---
|
||||
title: Pylon
|
||||
description: 在 Pylon 中管理客户支持问题、账户、联系人、用户、团队和标签
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="pylon"
|
||||
color="#E8F4FA"
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Pylon](https://usepylon.com/) 是一个先进的客户支持和成功平台,旨在帮助您管理客户关系的各个方面——从支持问题到账户、联系人、用户、团队等。Pylon 通过丰富的 API 和全面的工具集,使支持和成功团队能够高效且程序化地运作。
|
||||
|
||||
在 Sim 中使用 Pylon,您可以:
|
||||
|
||||
- **管理支持问题:**
|
||||
- 列出、创建、获取、更新和删除支持问题,以实现高效的案例跟踪。
|
||||
- 搜索和延后问题,帮助代理专注并保持有序。
|
||||
- 处理问题关注者和外部问题,与内部和外部利益相关者无缝协作。
|
||||
|
||||
- **全面的账户管理:**
|
||||
- 列出、创建、获取、更新和删除客户账户。
|
||||
- 以编程方式批量更新账户。
|
||||
- 搜索账户,快速找到与支持或外联相关的客户信息。
|
||||
|
||||
- **联系人管理:**
|
||||
- 列出、创建、获取、更新、删除和搜索联系人——管理与您的账户相关的所有人。
|
||||
|
||||
- **用户和团队操作:**
|
||||
- 列出、获取、更新和搜索 Pylon 工作区中的用户。
|
||||
- 列出、创建、获取和更新团队,以构建您的支持组织和工作流程。
|
||||
|
||||
- **标签和组织:**
|
||||
- 列出、获取、创建、更新和删除标签,用于对问题、账户或联系人进行分类。
|
||||
|
||||
- **消息处理:**
|
||||
- 直接从您的工作流程中编辑敏感消息内容,以确保隐私和合规性。
|
||||
|
||||
通过将 Pylon 工具集成到 Sim 中,您的代理可以自动化支持操作的各个方面:
|
||||
- 在客户事件发生时自动打开、更新或分类新问题。
|
||||
- 在您的技术堆栈中保持账户和联系人数据的同步。
|
||||
- 使用标签和团队路由对话、处理升级并组织您的支持数据。
|
||||
- 确保敏感数据得到妥善管理,根据需要编辑消息。
|
||||
|
||||
Pylon 的端点提供了对客户问题和关系全生命周期管理的精细控制。无论是扩展支持服务台、推动主动客户成功,还是与其他系统集成,Sim 中的 Pylon 都能实现一流的 CRM 自动化——安全、灵活且可扩展。
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## 使用说明
|
||||
|
||||
将 Pylon 集成到工作流程中。管理问题(列表、创建、获取、更新、删除、搜索、延迟、关注者、外部问题)、账户(列表、创建、获取、更新、删除、批量更新、搜索)、联系人(列表、创建、获取、更新、删除、搜索)、用户(列表、获取、更新、搜索)、团队(列表、获取、创建、更新)、标签(列表、获取、创建、更新、删除)和消息(编辑)。
|
||||
|
||||
## 工具
|
||||
|
||||
### `pylon_list_issues`
|
||||
|
||||
检索指定时间范围内的问题列表
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `startTime` | string | 是 | RFC3339 格式的开始时间 \(例如:2024-01-01T00:00:00Z\) |
|
||||
| `endTime` | string | 是 | RFC3339 格式的结束时间 \(例如:2024-01-31T23:59:59Z\) |
|
||||
| `cursor` | string | 否 | 下一页结果的分页游标 |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 问题列表 |
|
||||
|
||||
### `pylon_create_issue`
|
||||
|
||||
创建具有指定属性的新问题
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `title` | string | 是 | 问题标题 |
|
||||
| `bodyHtml` | string | 是 | HTML 格式的问题正文 |
|
||||
| `accountId` | string | 否 | 与问题关联的账户 ID |
|
||||
| `assigneeId` | string | 否 | 分配问题的用户 ID |
|
||||
| `teamId` | string | 否 | 分配问题的团队 ID |
|
||||
| `requesterId` | string | 否 | 请求者用户 ID(请求者邮箱的替代选项) |
|
||||
| `requesterEmail` | string | 否 | 请求者邮箱地址(请求者 ID 的替代选项) |
|
||||
| `priority` | string | 否 | 问题优先级 |
|
||||
| `tags` | string | 否 | 逗号分隔的标签 ID |
|
||||
| `customFields` | string | 否 | 作为 JSON 对象的自定义字段 |
|
||||
| `attachmentUrls` | string | 否 | 逗号分隔的附件 URL |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 创建的问题数据 |
|
||||
|
||||
### `pylon_get_issue`
|
||||
|
||||
通过 ID 获取特定问题
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `issueId` | string | 是 | 要检索的问题 ID |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 问题数据 |
|
||||
|
||||
### `pylon_update_issue`
|
||||
|
||||
更新现有问题
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `issueId` | string | 是 | 要更新的问题 ID |
|
||||
| `state` | string | 否 | 问题状态 |
|
||||
| `assigneeId` | string | 否 | 分配问题的用户 ID |
|
||||
| `teamId` | string | 否 | 分配问题的团队 ID |
|
||||
| `tags` | string | 否 | 逗号分隔的标签 ID |
|
||||
| `customFields` | string | 否 | 作为 JSON 对象的自定义字段 |
|
||||
| `customerPortalVisible` | boolean | 否 | 问题是否在客户门户中可见 |
|
||||
| `requesterId` | string | 否 | 请求者用户 ID |
|
||||
| `accountId` | string | 否 | 与问题关联的账户 ID |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 更新的问题数据 |
|
||||
|
||||
### `pylon_delete_issue`
|
||||
|
||||
通过 ID 删除问题
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `issueId` | string | 是 | 要删除的问题 ID |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 删除结果 |
|
||||
|
||||
### `pylon_search_issues`
|
||||
|
||||
使用筛选器查询问题
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `filter` | string | 是 | 作为 JSON 字符串的筛选条件 |
|
||||
| `cursor` | string | 否 | 下一页结果的分页游标 |
|
||||
| `limit` | number | 否 | 要返回的最大结果数 |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 搜索结果 |
|
||||
|
||||
### `pylon_snooze_issue`
|
||||
|
||||
推迟问题的可见性直到指定时间
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `issueId` | string | 是 | 要推迟的问题 ID |
|
||||
| `snoozeUntil` | string | 是 | 问题应重新出现的 RFC3339 时间戳 \(例如,2024-01-01T00:00:00Z\) |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 延期问题数据 |
|
||||
|
||||
### `pylon_list_issue_followers`
|
||||
|
||||
获取特定问题的关注者列表
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `issueId` | string | 是 | 问题的 ID |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 关注者列表 |
|
||||
|
||||
### `pylon_manage_issue_followers`
|
||||
|
||||
添加或移除问题的关注者
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `issueId` | string | 是 | 问题的 ID |
|
||||
| `userIds` | string | 否 | 逗号分隔的用户 ID 列表,用于添加/移除 |
|
||||
| `contactIds` | string | 否 | 逗号分隔的联系人 ID 列表,用于添加/移除 |
|
||||
| `operation` | string | 否 | 要执行的操作:"add" 或 "remove" \(默认值:"add"\) |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 更新后的关注者列表 |
|
||||
|
||||
### `pylon_link_external_issue`
|
||||
|
||||
将问题链接到外部系统问题
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `issueId` | string | 是 | Pylon 问题的 ID |
|
||||
| `externalIssueId` | string | 是 | 外部问题的 ID |
|
||||
| `source` | string | 是 | 来源系统(例如:"jira", "linear", "github") |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 已链接的外部问题数据 |
|
||||
|
||||
### `pylon_list_accounts`
|
||||
|
||||
检索账户的分页列表
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `limit` | string | 否 | 要返回的账户数量(1-1000,默认 100) |
|
||||
| `cursor` | string | 否 | 下一页结果的分页游标 |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 账户列表 |
|
||||
|
||||
### `pylon_create_account`
|
||||
|
||||
使用指定属性创建新账户
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `name` | string | 是 | 账户名称 |
|
||||
| `domains` | string | 否 | 逗号分隔的域名列表 |
|
||||
| `primaryDomain` | string | 否 | 账户的主域名 |
|
||||
| `customFields` | string | 否 | 作为 JSON 对象的自定义字段 |
|
||||
| `tags` | string | 否 | 逗号分隔的标签 ID |
|
||||
| `channels` | string | 否 | 逗号分隔的频道 ID |
|
||||
| `externalIds` | string | 否 | 逗号分隔的外部 ID |
|
||||
| `ownerId` | string | 否 | 所有者用户 ID |
|
||||
| `logoUrl` | string | 否 | 账户徽标的 URL |
|
||||
| `subaccountIds` | string | 否 | 逗号分隔的子账户 ID |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 创建的账户数据 |
|
||||
|
||||
### `pylon_get_account`
|
||||
|
||||
通过 ID 检索单个账户
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `accountId` | string | 是 | 要检索的账户 ID |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 账户数据 |
|
||||
|
||||
### `pylon_update_account`
|
||||
|
||||
使用新属性更新现有账户
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `accountId` | string | 是 | 要更新的账户 ID |
|
||||
| `name` | string | 否 | 账户名称 |
|
||||
| `domains` | string | 否 | 逗号分隔的域名列表 |
|
||||
| `primaryDomain` | string | 否 | 账户的主域名 |
|
||||
| `customFields` | string | 否 | 作为 JSON 对象的自定义字段 |
|
||||
| `tags` | string | 否 | 逗号分隔的标签 ID |
|
||||
| `channels` | string | 否 | 逗号分隔的频道 ID |
|
||||
| `externalIds` | string | 否 | 逗号分隔的外部 ID |
|
||||
| `ownerId` | string | 否 | 所有者用户 ID |
|
||||
| `logoUrl` | string | 否 | 账户标志的 URL |
|
||||
| `subaccountIds` | string | 否 | 逗号分隔的子账户 ID |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 更新的账户数据 |
|
||||
|
||||
### `pylon_delete_account`
|
||||
|
||||
通过 ID 删除账户
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `accountId` | string | 是 | 要删除的账户 ID |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 删除确认 |
|
||||
|
||||
### `pylon_bulk_update_accounts`
|
||||
|
||||
一次更新多个账户
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `accountIds` | string | 是 | 逗号分隔的账户 ID 列表 |
|
||||
| `customFields` | string | 否 | 自定义字段(JSON 对象) |
|
||||
| `tags` | string | 否 | 逗号分隔的标签 ID |
|
||||
| `ownerId` | string | 否 | 所有者用户 ID |
|
||||
| `tagsApplyMode` | string | 否 | 标签应用模式:append_only、remove_only 或 replace |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 批量更新的账户数据 |
|
||||
|
||||
### `pylon_search_accounts`
|
||||
|
||||
使用自定义筛选器搜索账户
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `filter` | string | 是 | 以 JSON 字符串形式表示的筛选器,包含字段/操作符/值结构 |
|
||||
| `limit` | string | 否 | 要返回的账户数量 \(1-1000,默认 100\) |
|
||||
| `cursor` | string | 否 | 用于下一页结果的分页游标 |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 搜索结果 |
|
||||
|
||||
### `pylon_list_contacts`
|
||||
|
||||
检索联系人列表
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `cursor` | string | 否 | 用于下一页结果的分页游标 |
|
||||
| `limit` | string | 否 | 要返回的最大联系人数量 |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 联系人列表 |
|
||||
|
||||
### `pylon_create_contact`
|
||||
|
||||
创建具有指定属性的新联系人
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `name` | string | 是 | 联系人姓名 |
|
||||
| `email` | string | 否 | 联系人电子邮件地址 |
|
||||
| `accountId` | string | 否 | 要与联系人关联的账户 ID |
|
||||
| `accountExternalId` | string | 否 | 要与联系人关联的外部账户 ID |
|
||||
| `avatarUrl` | string | 否 | 联系人头像图片的 URL |
|
||||
| `customFields` | string | 否 | 以 JSON 对象形式表示的自定义字段 |
|
||||
| `portalRole` | string | 否 | 联系人的门户角色 |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 创建的联系人数据 |
|
||||
|
||||
### `pylon_get_contact`
|
||||
|
||||
通过 ID 检索特定联系人
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `contactId` | string | 是 | 要检索的联系人 ID |
|
||||
| `cursor` | string | 否 | 下一页结果的分页游标 |
|
||||
| `limit` | string | 否 | 要返回的最大项目数 |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 联系人数据 |
|
||||
|
||||
### `pylon_update_contact`
|
||||
|
||||
使用指定属性更新现有联系人
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `contactId` | string | 是 | 要更新的联系人 ID |
|
||||
| `name` | string | 否 | 联系人姓名 |
|
||||
| `email` | string | 否 | 联系人电子邮件地址 |
|
||||
| `accountId` | string | 否 | 要与联系人关联的账户 ID |
|
||||
| `accountExternalId` | string | 否 | 要与联系人关联的外部账户 ID |
|
||||
| `avatarUrl` | string | 否 | 联系人头像图片的 URL |
|
||||
| `customFields` | string | 否 | 作为 JSON 对象的自定义字段 |
|
||||
| `portalRole` | string | 否 | 联系人的门户角色 |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 更新的联系人数据 |
|
||||
|
||||
### `pylon_delete_contact`
|
||||
|
||||
通过 ID 删除特定联系人
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `contactId` | string | 是 | 要删除的联系人 ID |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 删除操作结果 |
|
||||
|
||||
### `pylon_search_contacts`
|
||||
|
||||
使用筛选器搜索联系人
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `filter` | string | 是 | 作为 JSON 对象的筛选器 |
|
||||
| `limit` | string | 否 | 要返回的最大联系人数量 |
|
||||
| `cursor` | string | 否 | 下一页结果的分页游标 |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 搜索结果 |
|
||||
|
||||
### `pylon_list_users`
|
||||
|
||||
检索用户列表
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 用户列表 |
|
||||
|
||||
### `pylon_get_user`
|
||||
|
||||
通过 ID 检索特定用户
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `userId` | string | 是 | 要检索的用户 ID |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 用户数据 |
|
||||
|
||||
### `pylon_update_user`
|
||||
|
||||
使用指定属性更新现有用户
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `userId` | string | 是 | 要更新的用户 ID |
|
||||
| `roleId` | string | 否 | 要分配给用户的角色 ID |
|
||||
| `status` | string | 否 | 用户状态 |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 更新的用户数据 |
|
||||
|
||||
### `pylon_search_users`
|
||||
|
||||
使用电子邮件字段的过滤器搜索用户
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `filter` | string | 是 | 包含电子邮件字段的 JSON 对象过滤器 |
|
||||
| `cursor` | string | 否 | 下一页结果的分页游标 |
|
||||
| `limit` | string | 否 | 要返回的最大用户数 |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 搜索结果 |
|
||||
|
||||
### `pylon_list_teams`
|
||||
|
||||
检索团队列表
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 团队列表 |
|
||||
|
||||
### `pylon_get_team`
|
||||
|
||||
通过 ID 检索特定团队
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `teamId` | string | 是 | 要检索的团队 ID |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 团队数据 |
|
||||
|
||||
### `pylon_create_team`
|
||||
|
||||
使用指定属性创建新团队
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `name` | string | 否 | 团队名称 |
|
||||
| `userIds` | string | 否 | 以逗号分隔的用户 ID,用于添加为团队成员 |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 创建的团队数据 |
|
||||
|
||||
### `pylon_update_team`
|
||||
|
||||
使用指定属性更新现有团队(userIds 将替换整个成员列表)
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `teamId` | string | 是 | 要更新的团队 ID |
|
||||
| `name` | string | 否 | 团队名称 |
|
||||
| `userIds` | string | 否 | 逗号分隔的用户 ID(替换整个团队成员列表) |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 更新的团队数据 |
|
||||
|
||||
### `pylon_list_tags`
|
||||
|
||||
检索标签列表
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 标签列表 |
|
||||
|
||||
### `pylon_get_tag`
|
||||
|
||||
通过 ID 检索特定标签
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `tagId` | string | 是 | 要检索的标签 ID |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 标签数据 |
|
||||
|
||||
### `pylon_create_tag`
|
||||
|
||||
使用指定属性创建一个新标签(objectType: account/issue/contact)
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `objectType` | string | 是 | 标签的对象类型 \(account, issue, 或 contact\) |
|
||||
| `value` | string | 是 | 标签值/名称 |
|
||||
| `hexColor` | string | 否 | 标签的十六进制颜色代码 \(例如:#FF5733\) |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 创建的标签数据 |
|
||||
|
||||
### `pylon_update_tag`
|
||||
|
||||
使用指定属性更新现有标签
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `tagId` | string | 是 | 要更新的标签 ID |
|
||||
| `hexColor` | string | 否 | 标签的十六进制颜色代码 \(例如:#FF5733\) |
|
||||
| `value` | string | 否 | 标签值/名称 |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 更新的标签数据 |
|
||||
|
||||
### `pylon_delete_tag`
|
||||
|
||||
通过 ID 删除特定标签
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `tagId` | string | 是 | 要删除的标签 ID |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 删除操作结果 |
|
||||
|
||||
### `pylon_redact_message`
|
||||
|
||||
编辑问题中的特定消息
|
||||
|
||||
#### 输入
|
||||
|
||||
| 参数 | 类型 | 必需 | 描述 |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiToken` | string | 是 | Pylon API 令牌 |
|
||||
| `issueId` | string | 是 | 包含消息的问题 ID |
|
||||
| `messageId` | string | 是 | 要编辑的消息 ID |
|
||||
|
||||
#### 输出
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | 操作成功状态 |
|
||||
| `output` | object | 编辑操作结果 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 类别:`tools`
|
||||
- 类型:`pylon`
|
||||
@@ -63,7 +63,6 @@ export const FOOTER_TOOLS = [
|
||||
'Pipedrive',
|
||||
'PostHog',
|
||||
'PostgreSQL',
|
||||
'Pylon',
|
||||
'Qdrant',
|
||||
'Reddit',
|
||||
'Resend',
|
||||
|
||||
@@ -1,838 +0,0 @@
|
||||
import { PylonIcon } from '@/components/icons'
|
||||
import type { BlockConfig } from '@/blocks/types'
|
||||
import { AuthMode } from '@/blocks/types'
|
||||
|
||||
export const PylonBlock: BlockConfig = {
|
||||
type: 'pylon',
|
||||
name: 'Pylon',
|
||||
description:
|
||||
'Manage customer support issues, accounts, contacts, users, teams, and tags in Pylon',
|
||||
longDescription:
|
||||
'Integrate Pylon into the workflow. Manage issues (list, create, get, update, delete, search, snooze, followers, external issues), accounts (list, create, get, update, delete, bulk update, search), contacts (list, create, get, update, delete, search), users (list, get, update, search), teams (list, get, create, update), tags (list, get, create, update, delete), and messages (redact).',
|
||||
docsLink: 'https://docs.usepylon.com/pylon-docs/developer/api',
|
||||
authMode: AuthMode.ApiKey,
|
||||
category: 'tools',
|
||||
bgColor: '#E8F4FA',
|
||||
icon: PylonIcon,
|
||||
subBlocks: [
|
||||
{
|
||||
id: 'operation',
|
||||
title: 'Operation',
|
||||
type: 'dropdown',
|
||||
options: [
|
||||
// Issue operations
|
||||
{ label: 'List Issues', id: 'list_issues' },
|
||||
{ label: 'Create Issue', id: 'create_issue' },
|
||||
{ label: 'Get Issue', id: 'get_issue' },
|
||||
{ label: 'Update Issue', id: 'update_issue' },
|
||||
{ label: 'Delete Issue', id: 'delete_issue' },
|
||||
{ label: 'Search Issues', id: 'search_issues' },
|
||||
{ label: 'Snooze Issue', id: 'snooze_issue' },
|
||||
{ label: 'List Issue Followers', id: 'list_issue_followers' },
|
||||
{ label: 'Manage Issue Followers', id: 'manage_issue_followers' },
|
||||
{ label: 'Link External Issue', id: 'link_external_issue' },
|
||||
// Account operations
|
||||
{ label: 'List Accounts', id: 'list_accounts' },
|
||||
{ label: 'Create Account', id: 'create_account' },
|
||||
{ label: 'Get Account', id: 'get_account' },
|
||||
{ label: 'Update Account', id: 'update_account' },
|
||||
{ label: 'Delete Account', id: 'delete_account' },
|
||||
{ label: 'Bulk Update Accounts', id: 'bulk_update_accounts' },
|
||||
{ label: 'Search Accounts', id: 'search_accounts' },
|
||||
// Contact operations
|
||||
{ label: 'List Contacts', id: 'list_contacts' },
|
||||
{ label: 'Create Contact', id: 'create_contact' },
|
||||
{ label: 'Get Contact', id: 'get_contact' },
|
||||
{ label: 'Update Contact', id: 'update_contact' },
|
||||
{ label: 'Delete Contact', id: 'delete_contact' },
|
||||
{ label: 'Search Contacts', id: 'search_contacts' },
|
||||
// User operations
|
||||
{ label: 'List Users', id: 'list_users' },
|
||||
{ label: 'Get User', id: 'get_user' },
|
||||
{ label: 'Update User', id: 'update_user' },
|
||||
{ label: 'Search Users', id: 'search_users' },
|
||||
// Team operations
|
||||
{ label: 'List Teams', id: 'list_teams' },
|
||||
{ label: 'Get Team', id: 'get_team' },
|
||||
{ label: 'Create Team', id: 'create_team' },
|
||||
{ label: 'Update Team', id: 'update_team' },
|
||||
// Tag operations
|
||||
{ label: 'List Tags', id: 'list_tags' },
|
||||
{ label: 'Get Tag', id: 'get_tag' },
|
||||
{ label: 'Create Tag', id: 'create_tag' },
|
||||
{ label: 'Update Tag', id: 'update_tag' },
|
||||
{ label: 'Delete Tag', id: 'delete_tag' },
|
||||
// Message operations
|
||||
{ label: 'Redact Message', id: 'redact_message' },
|
||||
],
|
||||
value: () => 'list_issues',
|
||||
},
|
||||
{
|
||||
id: 'apiToken',
|
||||
title: 'API Token',
|
||||
type: 'short-input',
|
||||
password: true,
|
||||
placeholder: 'Enter your Pylon API token',
|
||||
required: true,
|
||||
},
|
||||
// Issue fields
|
||||
{
|
||||
id: 'startTime',
|
||||
title: 'Start Time',
|
||||
type: 'short-input',
|
||||
placeholder: 'RFC3339 format (e.g., 2024-01-01T00:00:00Z)',
|
||||
required: true,
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['list_issues'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'endTime',
|
||||
title: 'End Time',
|
||||
type: 'short-input',
|
||||
placeholder: 'RFC3339 format (e.g., 2024-01-31T23:59:59Z)',
|
||||
required: true,
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['list_issues'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'issueId',
|
||||
title: 'Issue ID',
|
||||
type: 'short-input',
|
||||
placeholder: 'Issue ID',
|
||||
required: true,
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: [
|
||||
'get_issue',
|
||||
'update_issue',
|
||||
'delete_issue',
|
||||
'snooze_issue',
|
||||
'list_issue_followers',
|
||||
'manage_issue_followers',
|
||||
'link_external_issue',
|
||||
'redact_message',
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'title',
|
||||
title: 'Title',
|
||||
type: 'short-input',
|
||||
placeholder: 'Issue title',
|
||||
required: {
|
||||
field: 'operation',
|
||||
value: ['create_issue'],
|
||||
},
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_issue'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'bodyHtml',
|
||||
title: 'Body HTML',
|
||||
type: 'long-input',
|
||||
placeholder: 'Issue body in HTML format',
|
||||
required: true,
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_issue'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'accountId',
|
||||
title: 'Account ID',
|
||||
type: 'short-input',
|
||||
placeholder: 'Account ID',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_issue', 'update_issue', 'create_contact', 'update_contact'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'assigneeId',
|
||||
title: 'Assignee ID',
|
||||
type: 'short-input',
|
||||
placeholder: 'User ID to assign to',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_issue', 'update_issue'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'teamId',
|
||||
title: 'Team ID',
|
||||
type: 'short-input',
|
||||
placeholder: 'Team ID',
|
||||
required: {
|
||||
field: 'operation',
|
||||
value: ['get_team', 'update_team'],
|
||||
},
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_issue', 'update_issue', 'get_team', 'update_team'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'requesterId',
|
||||
title: 'Requester ID',
|
||||
type: 'short-input',
|
||||
placeholder: 'Requester user ID',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_issue', 'update_issue'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'requesterEmail',
|
||||
title: 'Requester Email',
|
||||
type: 'short-input',
|
||||
placeholder: 'Requester email address',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_issue'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'priority',
|
||||
title: 'Priority',
|
||||
type: 'short-input',
|
||||
placeholder: 'Issue priority',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_issue', 'update_issue'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'state',
|
||||
title: 'State',
|
||||
type: 'short-input',
|
||||
placeholder: 'Issue state',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['update_issue'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'tags',
|
||||
title: 'Tags',
|
||||
type: 'short-input',
|
||||
placeholder: 'Comma-separated tag IDs',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: [
|
||||
'create_issue',
|
||||
'update_issue',
|
||||
'create_account',
|
||||
'update_account',
|
||||
'bulk_update_accounts',
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'customFields',
|
||||
title: 'Custom Fields',
|
||||
type: 'long-input',
|
||||
placeholder: 'JSON object with custom fields',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: [
|
||||
'create_issue',
|
||||
'update_issue',
|
||||
'create_account',
|
||||
'update_account',
|
||||
'bulk_update_accounts',
|
||||
'create_contact',
|
||||
'update_contact',
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'attachmentUrls',
|
||||
title: 'Attachment URLs',
|
||||
type: 'short-input',
|
||||
placeholder: 'Comma-separated attachment URLs',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_issue'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'customerPortalVisible',
|
||||
title: 'Customer Portal Visible',
|
||||
type: 'short-input',
|
||||
placeholder: 'true or false',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['update_issue'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'snoozeUntil',
|
||||
title: 'Snooze Until',
|
||||
type: 'short-input',
|
||||
placeholder: 'RFC3339 timestamp',
|
||||
required: true,
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['snooze_issue'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'userIds',
|
||||
title: 'User IDs',
|
||||
type: 'short-input',
|
||||
placeholder: 'Comma-separated user IDs',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['manage_issue_followers', 'create_team', 'update_team'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'contactIds',
|
||||
title: 'Contact IDs',
|
||||
type: 'short-input',
|
||||
placeholder: 'Comma-separated contact IDs',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['manage_issue_followers'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'followerOperation',
|
||||
title: 'Follower Operation',
|
||||
type: 'dropdown',
|
||||
options: [
|
||||
{ label: 'Add', id: 'add' },
|
||||
{ label: 'Remove', id: 'remove' },
|
||||
],
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['manage_issue_followers'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'externalIssueId',
|
||||
title: 'External Issue ID',
|
||||
type: 'short-input',
|
||||
placeholder: 'External issue identifier',
|
||||
required: true,
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['link_external_issue'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'source',
|
||||
title: 'Source',
|
||||
type: 'short-input',
|
||||
placeholder: 'Source system (e.g., linear, jira)',
|
||||
required: true,
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['link_external_issue'],
|
||||
},
|
||||
},
|
||||
// Account fields
|
||||
{
|
||||
id: 'name',
|
||||
title: 'Name',
|
||||
type: 'short-input',
|
||||
placeholder: 'Name',
|
||||
required: {
|
||||
field: 'operation',
|
||||
value: ['create_account', 'create_contact'],
|
||||
},
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: [
|
||||
'create_account',
|
||||
'update_account',
|
||||
'create_contact',
|
||||
'update_contact',
|
||||
'create_team',
|
||||
'update_team',
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'accountIdField',
|
||||
title: 'Account ID',
|
||||
type: 'short-input',
|
||||
placeholder: 'Account ID',
|
||||
required: true,
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['get_account', 'update_account', 'delete_account'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'accountIds',
|
||||
title: 'Account IDs',
|
||||
type: 'short-input',
|
||||
placeholder: 'Comma-separated account IDs',
|
||||
required: true,
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['bulk_update_accounts'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'domains',
|
||||
title: 'Domains',
|
||||
type: 'short-input',
|
||||
placeholder: 'Comma-separated domain names',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_account', 'update_account'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'primaryDomain',
|
||||
title: 'Primary Domain',
|
||||
type: 'short-input',
|
||||
placeholder: 'Primary domain name',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_account', 'update_account'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'channels',
|
||||
title: 'Channels',
|
||||
type: 'short-input',
|
||||
placeholder: 'Channels',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_account', 'update_account'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'externalIds',
|
||||
title: 'External IDs',
|
||||
type: 'short-input',
|
||||
placeholder: 'External IDs',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_account', 'update_account'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'ownerId',
|
||||
title: 'Owner ID',
|
||||
type: 'short-input',
|
||||
placeholder: 'Owner user ID',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_account', 'update_account', 'bulk_update_accounts'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'logoUrl',
|
||||
title: 'Logo URL',
|
||||
type: 'short-input',
|
||||
placeholder: 'Account logo URL',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_account', 'update_account'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'subaccountIds',
|
||||
title: 'Subaccount IDs',
|
||||
type: 'short-input',
|
||||
placeholder: 'Comma-separated subaccount IDs',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_account', 'update_account'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'tagsApplyMode',
|
||||
title: 'Tags Apply Mode',
|
||||
type: 'dropdown',
|
||||
options: [
|
||||
{ label: 'Append Only', id: 'append_only' },
|
||||
{ label: 'Remove Only', id: 'remove_only' },
|
||||
{ label: 'Replace', id: 'replace' },
|
||||
],
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['bulk_update_accounts'],
|
||||
},
|
||||
},
|
||||
// Contact fields
|
||||
{
|
||||
id: 'contactId',
|
||||
title: 'Contact ID',
|
||||
type: 'short-input',
|
||||
placeholder: 'Contact ID',
|
||||
required: true,
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['get_contact', 'update_contact', 'delete_contact'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'email',
|
||||
title: 'Email',
|
||||
type: 'short-input',
|
||||
placeholder: 'Email address',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_contact', 'update_contact'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'accountExternalId',
|
||||
title: 'Account External ID',
|
||||
type: 'short-input',
|
||||
placeholder: 'External account ID',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_contact', 'update_contact'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'avatarUrl',
|
||||
title: 'Avatar URL',
|
||||
type: 'short-input',
|
||||
placeholder: 'Square PNG/JPG image URL',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_contact', 'update_contact'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'portalRole',
|
||||
title: 'Portal Role',
|
||||
type: 'dropdown',
|
||||
options: [
|
||||
{ label: 'No Access', id: 'no_access' },
|
||||
{ label: 'Member', id: 'member' },
|
||||
{ label: 'Admin', id: 'admin' },
|
||||
],
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_contact', 'update_contact'],
|
||||
},
|
||||
},
|
||||
// User fields
|
||||
{
|
||||
id: 'userId',
|
||||
title: 'User ID',
|
||||
type: 'short-input',
|
||||
placeholder: 'User ID',
|
||||
required: true,
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['get_user', 'update_user'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'roleId',
|
||||
title: 'Role ID',
|
||||
type: 'short-input',
|
||||
placeholder: 'Role ID',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['update_user'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'status',
|
||||
title: 'Status',
|
||||
type: 'dropdown',
|
||||
options: [
|
||||
{ label: 'Active', id: 'active' },
|
||||
{ label: 'Away', id: 'away' },
|
||||
{ label: 'Out of Office', id: 'out_of_office' },
|
||||
],
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['update_user'],
|
||||
},
|
||||
},
|
||||
// Tag fields
|
||||
{
|
||||
id: 'tagId',
|
||||
title: 'Tag ID',
|
||||
type: 'short-input',
|
||||
placeholder: 'Tag ID',
|
||||
required: true,
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['get_tag', 'update_tag', 'delete_tag'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'objectType',
|
||||
title: 'Object Type',
|
||||
type: 'dropdown',
|
||||
options: [
|
||||
{ label: 'Account', id: 'account' },
|
||||
{ label: 'Issue', id: 'issue' },
|
||||
{ label: 'Contact', id: 'contact' },
|
||||
],
|
||||
required: true,
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_tag'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'value',
|
||||
title: 'Value',
|
||||
type: 'short-input',
|
||||
placeholder: 'Tag value/name',
|
||||
required: {
|
||||
field: 'operation',
|
||||
value: ['create_tag'],
|
||||
},
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_tag', 'update_tag'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'hexColor',
|
||||
title: 'Hex Color',
|
||||
type: 'short-input',
|
||||
placeholder: 'Hex color code (e.g., #3a89ce)',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['create_tag', 'update_tag'],
|
||||
},
|
||||
},
|
||||
// Message fields
|
||||
{
|
||||
id: 'messageId',
|
||||
title: 'Message ID',
|
||||
type: 'short-input',
|
||||
placeholder: 'Message ID',
|
||||
required: true,
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['redact_message'],
|
||||
},
|
||||
},
|
||||
// Search and pagination fields
|
||||
{
|
||||
id: 'filter',
|
||||
title: 'Filter',
|
||||
type: 'long-input',
|
||||
placeholder: 'JSON filter object',
|
||||
required: {
|
||||
field: 'operation',
|
||||
value: ['search_accounts', 'search_contacts', 'search_users'],
|
||||
},
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: ['search_issues', 'search_accounts', 'search_contacts', 'search_users'],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'limit',
|
||||
title: 'Limit',
|
||||
type: 'short-input',
|
||||
placeholder: 'Results per page (1-1000, default: 100)',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: [
|
||||
'list_accounts',
|
||||
'list_contacts',
|
||||
'get_contact',
|
||||
'search_issues',
|
||||
'search_accounts',
|
||||
'search_contacts',
|
||||
'search_users',
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'cursor',
|
||||
title: 'Cursor',
|
||||
type: 'short-input',
|
||||
placeholder: 'Pagination cursor',
|
||||
condition: {
|
||||
field: 'operation',
|
||||
value: [
|
||||
'list_issues',
|
||||
'list_accounts',
|
||||
'list_contacts',
|
||||
'get_contact',
|
||||
'search_issues',
|
||||
'search_accounts',
|
||||
'search_contacts',
|
||||
'search_users',
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
tools: {
|
||||
access: [
|
||||
'pylon_list_issues',
|
||||
'pylon_create_issue',
|
||||
'pylon_get_issue',
|
||||
'pylon_update_issue',
|
||||
'pylon_delete_issue',
|
||||
'pylon_search_issues',
|
||||
'pylon_snooze_issue',
|
||||
'pylon_list_issue_followers',
|
||||
'pylon_manage_issue_followers',
|
||||
'pylon_link_external_issue',
|
||||
'pylon_list_accounts',
|
||||
'pylon_create_account',
|
||||
'pylon_get_account',
|
||||
'pylon_update_account',
|
||||
'pylon_delete_account',
|
||||
'pylon_bulk_update_accounts',
|
||||
'pylon_search_accounts',
|
||||
'pylon_list_contacts',
|
||||
'pylon_create_contact',
|
||||
'pylon_get_contact',
|
||||
'pylon_update_contact',
|
||||
'pylon_delete_contact',
|
||||
'pylon_search_contacts',
|
||||
'pylon_list_users',
|
||||
'pylon_get_user',
|
||||
'pylon_update_user',
|
||||
'pylon_search_users',
|
||||
'pylon_list_teams',
|
||||
'pylon_get_team',
|
||||
'pylon_create_team',
|
||||
'pylon_update_team',
|
||||
'pylon_list_tags',
|
||||
'pylon_get_tag',
|
||||
'pylon_create_tag',
|
||||
'pylon_update_tag',
|
||||
'pylon_delete_tag',
|
||||
'pylon_redact_message',
|
||||
],
|
||||
config: {
|
||||
tool: (params) => {
|
||||
switch (params.operation) {
|
||||
// Issue operations
|
||||
case 'list_issues':
|
||||
return 'pylon_list_issues'
|
||||
case 'create_issue':
|
||||
return 'pylon_create_issue'
|
||||
case 'get_issue':
|
||||
return 'pylon_get_issue'
|
||||
case 'update_issue':
|
||||
return 'pylon_update_issue'
|
||||
case 'delete_issue':
|
||||
return 'pylon_delete_issue'
|
||||
case 'search_issues':
|
||||
return 'pylon_search_issues'
|
||||
case 'snooze_issue':
|
||||
return 'pylon_snooze_issue'
|
||||
case 'list_issue_followers':
|
||||
return 'pylon_list_issue_followers'
|
||||
case 'manage_issue_followers':
|
||||
return 'pylon_manage_issue_followers'
|
||||
case 'link_external_issue':
|
||||
return 'pylon_link_external_issue'
|
||||
// Account operations
|
||||
case 'list_accounts':
|
||||
return 'pylon_list_accounts'
|
||||
case 'create_account':
|
||||
return 'pylon_create_account'
|
||||
case 'get_account':
|
||||
return 'pylon_get_account'
|
||||
case 'update_account':
|
||||
return 'pylon_update_account'
|
||||
case 'delete_account':
|
||||
return 'pylon_delete_account'
|
||||
case 'bulk_update_accounts':
|
||||
return 'pylon_bulk_update_accounts'
|
||||
case 'search_accounts':
|
||||
return 'pylon_search_accounts'
|
||||
// Contact operations
|
||||
case 'list_contacts':
|
||||
return 'pylon_list_contacts'
|
||||
case 'create_contact':
|
||||
return 'pylon_create_contact'
|
||||
case 'get_contact':
|
||||
return 'pylon_get_contact'
|
||||
case 'update_contact':
|
||||
return 'pylon_update_contact'
|
||||
case 'delete_contact':
|
||||
return 'pylon_delete_contact'
|
||||
case 'search_contacts':
|
||||
return 'pylon_search_contacts'
|
||||
// User operations
|
||||
case 'list_users':
|
||||
return 'pylon_list_users'
|
||||
case 'get_user':
|
||||
return 'pylon_get_user'
|
||||
case 'update_user':
|
||||
return 'pylon_update_user'
|
||||
case 'search_users':
|
||||
return 'pylon_search_users'
|
||||
// Team operations
|
||||
case 'list_teams':
|
||||
return 'pylon_list_teams'
|
||||
case 'get_team':
|
||||
return 'pylon_get_team'
|
||||
case 'create_team':
|
||||
return 'pylon_create_team'
|
||||
case 'update_team':
|
||||
return 'pylon_update_team'
|
||||
// Tag operations
|
||||
case 'list_tags':
|
||||
return 'pylon_list_tags'
|
||||
case 'get_tag':
|
||||
return 'pylon_get_tag'
|
||||
case 'create_tag':
|
||||
return 'pylon_create_tag'
|
||||
case 'update_tag':
|
||||
return 'pylon_update_tag'
|
||||
case 'delete_tag':
|
||||
return 'pylon_delete_tag'
|
||||
// Message operations
|
||||
case 'redact_message':
|
||||
return 'pylon_redact_message'
|
||||
default:
|
||||
throw new Error(`Unknown operation: ${params.operation}`)
|
||||
}
|
||||
},
|
||||
params: (params) => {
|
||||
const { apiToken, operation, ...rest } = params
|
||||
const cleanParams: Record<string, any> = { apiToken }
|
||||
|
||||
// Handle parameter mapping
|
||||
if (params.accountIdField) {
|
||||
cleanParams.accountId = params.accountIdField
|
||||
}
|
||||
if (params.followerOperation) {
|
||||
cleanParams.operation = params.followerOperation
|
||||
}
|
||||
|
||||
Object.entries(rest).forEach(([key, value]) => {
|
||||
if (value !== undefined && value !== null && value !== '') {
|
||||
// Skip mapped fields
|
||||
if (key === 'accountIdField' || key === 'followerOperation') {
|
||||
return
|
||||
}
|
||||
cleanParams[key] = value
|
||||
}
|
||||
})
|
||||
|
||||
return cleanParams
|
||||
},
|
||||
},
|
||||
},
|
||||
inputs: {
|
||||
operation: { type: 'string', description: 'Operation to perform' },
|
||||
apiToken: { type: 'string', description: 'Pylon API token' },
|
||||
},
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: { type: 'json', description: 'Operation result data' },
|
||||
},
|
||||
}
|
||||
@@ -82,7 +82,6 @@ import { PipedriveBlock } from '@/blocks/blocks/pipedrive'
|
||||
import { PolymarketBlock } from '@/blocks/blocks/polymarket'
|
||||
import { PostgreSQLBlock } from '@/blocks/blocks/postgresql'
|
||||
import { PostHogBlock } from '@/blocks/blocks/posthog'
|
||||
import { PylonBlock } from '@/blocks/blocks/pylon'
|
||||
import { QdrantBlock } from '@/blocks/blocks/qdrant'
|
||||
import { RDSBlock } from '@/blocks/blocks/rds'
|
||||
import { RedditBlock } from '@/blocks/blocks/reddit'
|
||||
@@ -224,7 +223,6 @@ export const registry: Record<string, BlockConfig> = {
|
||||
polymarket: PolymarketBlock,
|
||||
postgresql: PostgreSQLBlock,
|
||||
posthog: PostHogBlock,
|
||||
pylon: PylonBlock,
|
||||
qdrant: QdrantBlock,
|
||||
rds: RDSBlock,
|
||||
sqs: SQSBlock,
|
||||
|
||||
@@ -3667,31 +3667,6 @@ export function ZoomIcon(props: SVGProps<SVGSVGElement>) {
|
||||
)
|
||||
}
|
||||
|
||||
export function PylonIcon(props: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
{...props}
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
width='98'
|
||||
height='29'
|
||||
viewBox='0 0 26 26'
|
||||
fill='none'
|
||||
>
|
||||
<g clipPath='url(#clip0_6559_17753)'>
|
||||
<path
|
||||
d='M21.3437 4.1562C18.9827 1.79763 15.8424 0.5 12.5015 0.5C9.16056 0.5 6.02027 1.79763 3.66091 4.15455C1.29989 6.51147 0 9.64465 0 12.9798C0 16.3149 1.29989 19.448 3.66091 21.805C6.02193 24.1619 9.16222 25.4612 12.5031 25.4612C15.844 25.4612 18.9843 24.1635 21.3454 21.8066C23.7064 19.4497 25.0063 16.3165 25.0063 12.9814C25.0063 9.6463 23.7064 6.51312 21.3454 4.1562H21.3437ZM22.3949 12.9814C22.3949 17.927 18.7074 22.1227 13.8063 22.7699V3.1896C18.7074 3.83676 22.3949 8.0342 22.3949 12.9798V12.9814ZM4.8265 6.75643C6.43312 4.7835 8.68803 3.52063 11.1983 3.1896V6.75643H4.8265ZM11.1983 9.36162V11.6904H2.69428C2.79874 10.8926 3.00267 10.1097 3.2978 9.36162H11.1983ZM11.1983 14.2939V16.6227H3.30775C3.00931 15.8746 2.80371 15.0917 2.6976 14.2939H11.1983ZM11.1983 19.2279V22.7699C8.70129 22.4405 6.45302 21.1859 4.84805 19.2279H11.1983Z'
|
||||
fill='#5B0EFF'
|
||||
/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id='clip0_6559_17753'>
|
||||
<rect width='97.4717' height='28' fill='white' transform='translate(0 0.5)' />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export function SendgridIcon(props: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
|
||||
@@ -1,140 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonBulkUpdateAccounts')
|
||||
|
||||
export interface PylonBulkUpdateAccountsParams {
|
||||
apiToken: string
|
||||
accountIds: string
|
||||
customFields?: string
|
||||
tags?: string
|
||||
ownerId?: string
|
||||
tagsApplyMode?: string
|
||||
}
|
||||
|
||||
export interface PylonBulkUpdateAccountsResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
accounts: any[]
|
||||
metadata: {
|
||||
operation: 'bulk_update_accounts'
|
||||
totalUpdated: number
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonBulkUpdateAccountsTool: ToolConfig<
|
||||
PylonBulkUpdateAccountsParams,
|
||||
PylonBulkUpdateAccountsResponse
|
||||
> = {
|
||||
id: 'pylon_bulk_update_accounts',
|
||||
name: 'Bulk Update Accounts in Pylon',
|
||||
description: 'Update multiple accounts at once',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
accountIds: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated account IDs to update',
|
||||
},
|
||||
customFields: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Custom fields as JSON object',
|
||||
},
|
||||
tags: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated tag IDs',
|
||||
},
|
||||
ownerId: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Owner user ID',
|
||||
},
|
||||
tagsApplyMode: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Tag application mode: append_only, remove_only, or replace',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: () => buildPylonUrl('/accounts'),
|
||||
method: 'PATCH',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: any = {
|
||||
account_ids: params.accountIds.split(',').map((id) => id.trim()),
|
||||
}
|
||||
|
||||
if (params.ownerId) body.owner_id = params.ownerId
|
||||
if (params.tagsApplyMode) body.tags_apply_mode = params.tagsApplyMode
|
||||
|
||||
if (params.customFields) {
|
||||
try {
|
||||
body.custom_fields = JSON.parse(params.customFields)
|
||||
} catch (error) {
|
||||
logger.warn('Failed to parse custom fields', { error })
|
||||
}
|
||||
}
|
||||
|
||||
if (params.tags) {
|
||||
body.tags = params.tags.split(',').map((t) => t.trim())
|
||||
}
|
||||
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'bulk_update_accounts')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
accounts: data.data || [],
|
||||
metadata: {
|
||||
operation: 'bulk_update_accounts' as const,
|
||||
totalUpdated: data.data?.length || 0,
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Bulk updated accounts data',
|
||||
properties: {
|
||||
accounts: { type: 'array', description: 'Array of updated account objects' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,191 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonCreateAccount')
|
||||
|
||||
export interface PylonCreateAccountParams {
|
||||
apiToken: string
|
||||
name: string
|
||||
domains?: string
|
||||
primaryDomain?: string
|
||||
customFields?: string
|
||||
tags?: string
|
||||
channels?: string
|
||||
externalIds?: string
|
||||
ownerId?: string
|
||||
logoUrl?: string
|
||||
subaccountIds?: string
|
||||
}
|
||||
|
||||
export interface PylonCreateAccountResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
account: any
|
||||
metadata: {
|
||||
operation: 'create_account'
|
||||
accountId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonCreateAccountTool: ToolConfig<
|
||||
PylonCreateAccountParams,
|
||||
PylonCreateAccountResponse
|
||||
> = {
|
||||
id: 'pylon_create_account',
|
||||
name: 'Create Account in Pylon',
|
||||
description: 'Create a new account with specified properties',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
name: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Account name',
|
||||
},
|
||||
domains: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated list of domains',
|
||||
},
|
||||
primaryDomain: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Primary domain for the account',
|
||||
},
|
||||
customFields: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Custom fields as JSON object',
|
||||
},
|
||||
tags: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated tag IDs',
|
||||
},
|
||||
channels: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated channel IDs',
|
||||
},
|
||||
externalIds: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated external IDs',
|
||||
},
|
||||
ownerId: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Owner user ID',
|
||||
},
|
||||
logoUrl: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'URL to account logo',
|
||||
},
|
||||
subaccountIds: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated subaccount IDs',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: () => buildPylonUrl('/accounts'),
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: any = {
|
||||
name: params.name,
|
||||
}
|
||||
|
||||
if (params.domains) {
|
||||
body.domains = params.domains.split(',').map((d) => d.trim())
|
||||
}
|
||||
if (params.primaryDomain) body.primary_domain = params.primaryDomain
|
||||
if (params.ownerId) body.owner_id = params.ownerId
|
||||
if (params.logoUrl) body.logo_url = params.logoUrl
|
||||
|
||||
if (params.customFields) {
|
||||
try {
|
||||
body.custom_fields = JSON.parse(params.customFields)
|
||||
} catch (error) {
|
||||
logger.warn('Failed to parse custom fields', { error })
|
||||
}
|
||||
}
|
||||
|
||||
if (params.tags) {
|
||||
body.tags = params.tags.split(',').map((t) => t.trim())
|
||||
}
|
||||
|
||||
if (params.channels) {
|
||||
body.channels = params.channels.split(',').map((c) => c.trim())
|
||||
}
|
||||
|
||||
if (params.externalIds) {
|
||||
body.external_ids = params.externalIds.split(',').map((e) => e.trim())
|
||||
}
|
||||
|
||||
if (params.subaccountIds) {
|
||||
body.subaccount_ids = params.subaccountIds.split(',').map((s) => s.trim())
|
||||
}
|
||||
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'create_account')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
account: data.data,
|
||||
metadata: {
|
||||
operation: 'create_account' as const,
|
||||
accountId: data.data?.id || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Created account data',
|
||||
properties: {
|
||||
account: { type: 'object', description: 'Created account object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,153 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonCreateContact')
|
||||
|
||||
export interface PylonCreateContactParams {
|
||||
apiToken: string
|
||||
name: string
|
||||
email?: string
|
||||
accountId?: string
|
||||
accountExternalId?: string
|
||||
avatarUrl?: string
|
||||
customFields?: string
|
||||
portalRole?: string
|
||||
}
|
||||
|
||||
export interface PylonCreateContactResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
contact: any
|
||||
metadata: {
|
||||
operation: 'create_contact'
|
||||
contactId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonCreateContactTool: ToolConfig<
|
||||
PylonCreateContactParams,
|
||||
PylonCreateContactResponse
|
||||
> = {
|
||||
id: 'pylon_create_contact',
|
||||
name: 'Create Contact in Pylon',
|
||||
description: 'Create a new contact with specified properties',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
name: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Contact name',
|
||||
},
|
||||
email: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Contact email address',
|
||||
},
|
||||
accountId: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Account ID to associate with contact',
|
||||
},
|
||||
accountExternalId: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'External account ID to associate with contact',
|
||||
},
|
||||
avatarUrl: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'URL for contact avatar image',
|
||||
},
|
||||
customFields: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Custom fields as JSON object',
|
||||
},
|
||||
portalRole: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Portal role for the contact',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: () => buildPylonUrl('/contacts'),
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: any = {
|
||||
name: params.name,
|
||||
}
|
||||
|
||||
if (params.email) body.email = params.email
|
||||
if (params.accountId) body.account_id = params.accountId
|
||||
if (params.accountExternalId) body.account_external_id = params.accountExternalId
|
||||
if (params.avatarUrl) body.avatar_url = params.avatarUrl
|
||||
if (params.portalRole) body.portal_role = params.portalRole
|
||||
|
||||
if (params.customFields) {
|
||||
try {
|
||||
body.custom_fields = JSON.parse(params.customFields)
|
||||
} catch (error) {
|
||||
logger.warn('Failed to parse custom fields', { error })
|
||||
}
|
||||
}
|
||||
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'create_contact')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
contact: data.data,
|
||||
metadata: {
|
||||
operation: 'create_contact' as const,
|
||||
contactId: data.data?.id || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Created contact data',
|
||||
properties: {
|
||||
contact: { type: 'object', description: 'Created contact object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,188 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonCreateIssue')
|
||||
|
||||
export interface PylonCreateIssueParams {
|
||||
apiToken: string
|
||||
title: string
|
||||
bodyHtml: string
|
||||
accountId?: string
|
||||
assigneeId?: string
|
||||
teamId?: string
|
||||
requesterId?: string
|
||||
requesterEmail?: string
|
||||
priority?: string
|
||||
tags?: string
|
||||
customFields?: string
|
||||
attachmentUrls?: string
|
||||
}
|
||||
|
||||
export interface PylonCreateIssueResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
issue: any
|
||||
metadata: {
|
||||
operation: 'create_issue'
|
||||
issueId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonCreateIssueTool: ToolConfig<PylonCreateIssueParams, PylonCreateIssueResponse> = {
|
||||
id: 'pylon_create_issue',
|
||||
name: 'Create Issue in Pylon',
|
||||
description: 'Create a new issue with specified properties',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
title: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Issue title',
|
||||
},
|
||||
bodyHtml: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Issue body in HTML format',
|
||||
},
|
||||
accountId: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Account ID to associate with issue',
|
||||
},
|
||||
assigneeId: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'User ID to assign issue to',
|
||||
},
|
||||
teamId: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Team ID to assign issue to',
|
||||
},
|
||||
requesterId: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Requester user ID (alternative to requester_email)',
|
||||
},
|
||||
requesterEmail: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Requester email address (alternative to requester_id)',
|
||||
},
|
||||
priority: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Issue priority',
|
||||
},
|
||||
tags: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated tag IDs',
|
||||
},
|
||||
customFields: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Custom fields as JSON object',
|
||||
},
|
||||
attachmentUrls: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated attachment URLs',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: () => buildPylonUrl('/issues'),
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: any = {
|
||||
title: params.title,
|
||||
body_html: params.bodyHtml,
|
||||
}
|
||||
|
||||
if (params.accountId) body.account_id = params.accountId
|
||||
if (params.assigneeId) body.assignee_id = params.assigneeId
|
||||
if (params.teamId) body.team_id = params.teamId
|
||||
if (params.requesterId) body.requester_id = params.requesterId
|
||||
if (params.requesterEmail) body.requester_email = params.requesterEmail
|
||||
if (params.priority) body.priority = params.priority
|
||||
|
||||
if (params.tags) {
|
||||
body.tags = params.tags.split(',').map((t) => t.trim())
|
||||
}
|
||||
|
||||
if (params.customFields) {
|
||||
try {
|
||||
body.custom_fields = JSON.parse(params.customFields)
|
||||
} catch (error) {
|
||||
logger.warn('Failed to parse custom fields', { error })
|
||||
}
|
||||
}
|
||||
|
||||
if (params.attachmentUrls) {
|
||||
body.attachment_urls = params.attachmentUrls.split(',').map((url) => url.trim())
|
||||
}
|
||||
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'create_issue')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
issue: data.data,
|
||||
metadata: {
|
||||
operation: 'create_issue' as const,
|
||||
issueId: data.data?.id || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Created issue data',
|
||||
properties: {
|
||||
issue: { type: 'object', description: 'Created issue object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,111 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonCreateTag')
|
||||
|
||||
export interface PylonCreateTagParams {
|
||||
apiToken: string
|
||||
objectType: string
|
||||
value: string
|
||||
hexColor?: string
|
||||
}
|
||||
|
||||
export interface PylonCreateTagResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
tag: any
|
||||
metadata: {
|
||||
operation: 'create_tag'
|
||||
tagId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonCreateTagTool: ToolConfig<PylonCreateTagParams, PylonCreateTagResponse> = {
|
||||
id: 'pylon_create_tag',
|
||||
name: 'Create Tag in Pylon',
|
||||
description: 'Create a new tag with specified properties (objectType: account/issue/contact)',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
objectType: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Object type for tag (account, issue, or contact)',
|
||||
},
|
||||
value: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Tag value/name',
|
||||
},
|
||||
hexColor: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Hex color code for tag (e.g., #FF5733)',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: () => buildPylonUrl('/tags'),
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: any = {
|
||||
object_type: params.objectType,
|
||||
value: params.value,
|
||||
}
|
||||
|
||||
if (params.hexColor) body.hex_color = params.hexColor
|
||||
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'create_tag')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
tag: data.data,
|
||||
metadata: {
|
||||
operation: 'create_tag' as const,
|
||||
tagId: data.data?.id || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Created tag data',
|
||||
properties: {
|
||||
tag: { type: 'object', description: 'Created tag object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,105 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonCreateTeam')
|
||||
|
||||
export interface PylonCreateTeamParams {
|
||||
apiToken: string
|
||||
name?: string
|
||||
userIds?: string
|
||||
}
|
||||
|
||||
export interface PylonCreateTeamResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
team: any
|
||||
metadata: {
|
||||
operation: 'create_team'
|
||||
teamId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonCreateTeamTool: ToolConfig<PylonCreateTeamParams, PylonCreateTeamResponse> = {
|
||||
id: 'pylon_create_team',
|
||||
name: 'Create Team in Pylon',
|
||||
description: 'Create a new team with specified properties',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
name: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Team name',
|
||||
},
|
||||
userIds: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated user IDs to add as team members',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: () => buildPylonUrl('/teams'),
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: any = {}
|
||||
|
||||
if (params.name) body.name = params.name
|
||||
|
||||
if (params.userIds) {
|
||||
body.user_ids = params.userIds.split(',').map((id) => id.trim())
|
||||
}
|
||||
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'create_team')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
team: data.data,
|
||||
metadata: {
|
||||
operation: 'create_team' as const,
|
||||
teamId: data.data?.id || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Created team data',
|
||||
properties: {
|
||||
team: { type: 'object', description: 'Created team object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,84 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonDeleteAccount')
|
||||
|
||||
export interface PylonDeleteAccountParams {
|
||||
apiToken: string
|
||||
accountId: string
|
||||
}
|
||||
|
||||
export interface PylonDeleteAccountResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
metadata: {
|
||||
operation: 'delete_account'
|
||||
accountId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonDeleteAccountTool: ToolConfig<
|
||||
PylonDeleteAccountParams,
|
||||
PylonDeleteAccountResponse
|
||||
> = {
|
||||
id: 'pylon_delete_account',
|
||||
name: 'Delete Account from Pylon',
|
||||
description: 'Remove an account by ID',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
accountId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Account ID to delete',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/accounts/${params.accountId}`),
|
||||
method: 'DELETE',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'delete_account')
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
metadata: {
|
||||
operation: 'delete_account' as const,
|
||||
accountId: '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Deletion confirmation',
|
||||
properties: {
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,84 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonDeleteContact')
|
||||
|
||||
export interface PylonDeleteContactParams {
|
||||
apiToken: string
|
||||
contactId: string
|
||||
}
|
||||
|
||||
export interface PylonDeleteContactResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
metadata: {
|
||||
operation: 'delete_contact'
|
||||
contactId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonDeleteContactTool: ToolConfig<
|
||||
PylonDeleteContactParams,
|
||||
PylonDeleteContactResponse
|
||||
> = {
|
||||
id: 'pylon_delete_contact',
|
||||
name: 'Delete Contact in Pylon',
|
||||
description: 'Delete a specific contact by ID',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
contactId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Contact ID to delete',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/contacts/${params.contactId}`),
|
||||
method: 'DELETE',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'delete_contact')
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
metadata: {
|
||||
operation: 'delete_contact' as const,
|
||||
contactId: '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Delete operation result',
|
||||
properties: {
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,81 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonDeleteIssue')
|
||||
|
||||
export interface PylonDeleteIssueParams {
|
||||
apiToken: string
|
||||
issueId: string
|
||||
}
|
||||
|
||||
export interface PylonDeleteIssueResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
metadata: {
|
||||
operation: 'delete_issue'
|
||||
issueId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonDeleteIssueTool: ToolConfig<PylonDeleteIssueParams, PylonDeleteIssueResponse> = {
|
||||
id: 'pylon_delete_issue',
|
||||
name: 'Delete Issue from Pylon',
|
||||
description: 'Remove an issue by ID',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
issueId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'The ID of the issue to delete',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/issues/${params.issueId}`),
|
||||
method: 'DELETE',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response, params?: PylonDeleteIssueParams) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'delete_issue')
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
metadata: {
|
||||
operation: 'delete_issue' as const,
|
||||
issueId: params?.issueId || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Deletion result',
|
||||
properties: {
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,81 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonDeleteTag')
|
||||
|
||||
export interface PylonDeleteTagParams {
|
||||
apiToken: string
|
||||
tagId: string
|
||||
}
|
||||
|
||||
export interface PylonDeleteTagResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
metadata: {
|
||||
operation: 'delete_tag'
|
||||
tagId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonDeleteTagTool: ToolConfig<PylonDeleteTagParams, PylonDeleteTagResponse> = {
|
||||
id: 'pylon_delete_tag',
|
||||
name: 'Delete Tag in Pylon',
|
||||
description: 'Delete a specific tag by ID',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
tagId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Tag ID to delete',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/tags/${params.tagId}`),
|
||||
method: 'DELETE',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'delete_tag')
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
metadata: {
|
||||
operation: 'delete_tag' as const,
|
||||
tagId: '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Delete operation result',
|
||||
properties: {
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,86 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonGetAccount')
|
||||
|
||||
export interface PylonGetAccountParams {
|
||||
apiToken: string
|
||||
accountId: string
|
||||
}
|
||||
|
||||
export interface PylonGetAccountResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
account: any
|
||||
metadata: {
|
||||
operation: 'get_account'
|
||||
accountId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonGetAccountTool: ToolConfig<PylonGetAccountParams, PylonGetAccountResponse> = {
|
||||
id: 'pylon_get_account',
|
||||
name: 'Get Account from Pylon',
|
||||
description: 'Retrieve a single account by ID',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
accountId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Account ID to retrieve',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/accounts/${params.accountId}`),
|
||||
method: 'GET',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'get_account')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
account: data.data,
|
||||
metadata: {
|
||||
operation: 'get_account' as const,
|
||||
accountId: data.data?.id || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Account data',
|
||||
properties: {
|
||||
account: { type: 'object', description: 'Account object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,109 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonGetContact')
|
||||
|
||||
export interface PylonGetContactParams {
|
||||
apiToken: string
|
||||
contactId: string
|
||||
cursor?: string
|
||||
limit?: string
|
||||
}
|
||||
|
||||
export interface PylonGetContactResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
contact: any
|
||||
metadata: {
|
||||
operation: 'get_contact'
|
||||
contactId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonGetContactTool: ToolConfig<PylonGetContactParams, PylonGetContactResponse> = {
|
||||
id: 'pylon_get_contact',
|
||||
name: 'Get Contact in Pylon',
|
||||
description: 'Retrieve a specific contact by ID',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
contactId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Contact ID to retrieve',
|
||||
},
|
||||
cursor: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Pagination cursor for next page of results',
|
||||
},
|
||||
limit: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Maximum number of items to return',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => {
|
||||
const url = new URL(buildPylonUrl(`/contacts/${params.contactId}`))
|
||||
if (params.cursor) {
|
||||
url.searchParams.append('cursor', params.cursor)
|
||||
}
|
||||
if (params.limit) {
|
||||
url.searchParams.append('limit', params.limit)
|
||||
}
|
||||
return url.toString()
|
||||
},
|
||||
method: 'GET',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'get_contact')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
contact: data.data,
|
||||
metadata: {
|
||||
operation: 'get_contact' as const,
|
||||
contactId: data.data?.id || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Contact data',
|
||||
properties: {
|
||||
contact: { type: 'object', description: 'Contact object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,86 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonGetIssue')
|
||||
|
||||
export interface PylonGetIssueParams {
|
||||
apiToken: string
|
||||
issueId: string
|
||||
}
|
||||
|
||||
export interface PylonGetIssueResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
issue: any
|
||||
metadata: {
|
||||
operation: 'get_issue'
|
||||
issueId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonGetIssueTool: ToolConfig<PylonGetIssueParams, PylonGetIssueResponse> = {
|
||||
id: 'pylon_get_issue',
|
||||
name: 'Get Issue from Pylon',
|
||||
description: 'Fetch a specific issue by ID',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
issueId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'The ID of the issue to retrieve',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/issues/${params.issueId}`),
|
||||
method: 'GET',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'get_issue')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
issue: data.data,
|
||||
metadata: {
|
||||
operation: 'get_issue' as const,
|
||||
issueId: data.data?.id || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Issue data',
|
||||
properties: {
|
||||
issue: { type: 'object', description: 'Issue object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,86 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonGetTag')
|
||||
|
||||
export interface PylonGetTagParams {
|
||||
apiToken: string
|
||||
tagId: string
|
||||
}
|
||||
|
||||
export interface PylonGetTagResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
tag: any
|
||||
metadata: {
|
||||
operation: 'get_tag'
|
||||
tagId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonGetTagTool: ToolConfig<PylonGetTagParams, PylonGetTagResponse> = {
|
||||
id: 'pylon_get_tag',
|
||||
name: 'Get Tag in Pylon',
|
||||
description: 'Retrieve a specific tag by ID',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
tagId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Tag ID to retrieve',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/tags/${params.tagId}`),
|
||||
method: 'GET',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'get_tag')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
tag: data.data,
|
||||
metadata: {
|
||||
operation: 'get_tag' as const,
|
||||
tagId: data.data?.id || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Tag data',
|
||||
properties: {
|
||||
tag: { type: 'object', description: 'Tag object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,86 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonGetTeam')
|
||||
|
||||
export interface PylonGetTeamParams {
|
||||
apiToken: string
|
||||
teamId: string
|
||||
}
|
||||
|
||||
export interface PylonGetTeamResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
team: any
|
||||
metadata: {
|
||||
operation: 'get_team'
|
||||
teamId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonGetTeamTool: ToolConfig<PylonGetTeamParams, PylonGetTeamResponse> = {
|
||||
id: 'pylon_get_team',
|
||||
name: 'Get Team in Pylon',
|
||||
description: 'Retrieve a specific team by ID',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
teamId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Team ID to retrieve',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/teams/${params.teamId}`),
|
||||
method: 'GET',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'get_team')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
team: data.data,
|
||||
metadata: {
|
||||
operation: 'get_team' as const,
|
||||
teamId: data.data?.id || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Team data',
|
||||
properties: {
|
||||
team: { type: 'object', description: 'Team object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,86 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonGetUser')
|
||||
|
||||
export interface PylonGetUserParams {
|
||||
apiToken: string
|
||||
userId: string
|
||||
}
|
||||
|
||||
export interface PylonGetUserResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
user: any
|
||||
metadata: {
|
||||
operation: 'get_user'
|
||||
userId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonGetUserTool: ToolConfig<PylonGetUserParams, PylonGetUserResponse> = {
|
||||
id: 'pylon_get_user',
|
||||
name: 'Get User in Pylon',
|
||||
description: 'Retrieve a specific user by ID',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
userId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'User ID to retrieve',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/users/${params.userId}`),
|
||||
method: 'GET',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'get_user')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
user: data.data,
|
||||
metadata: {
|
||||
operation: 'get_user' as const,
|
||||
userId: data.data?.id || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'User data',
|
||||
properties: {
|
||||
user: { type: 'object', description: 'User object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
// Pylon API integration tools
|
||||
// Export all tools for registration
|
||||
|
||||
export { pylonBulkUpdateAccountsTool } from './bulk_update_accounts'
|
||||
export { pylonCreateAccountTool } from './create_account'
|
||||
export { pylonCreateContactTool } from './create_contact'
|
||||
export { pylonCreateIssueTool } from './create_issue'
|
||||
export { pylonCreateTagTool } from './create_tag'
|
||||
export { pylonCreateTeamTool } from './create_team'
|
||||
export { pylonDeleteAccountTool } from './delete_account'
|
||||
export { pylonDeleteContactTool } from './delete_contact'
|
||||
export { pylonDeleteIssueTool } from './delete_issue'
|
||||
export { pylonDeleteTagTool } from './delete_tag'
|
||||
export { pylonGetAccountTool } from './get_account'
|
||||
export { pylonGetContactTool } from './get_contact'
|
||||
export { pylonGetIssueTool } from './get_issue'
|
||||
export { pylonGetTagTool } from './get_tag'
|
||||
export { pylonGetTeamTool } from './get_team'
|
||||
export { pylonGetUserTool } from './get_user'
|
||||
export { pylonLinkExternalIssueTool } from './link_external_issue'
|
||||
// Account tools
|
||||
export { pylonListAccountsTool } from './list_accounts'
|
||||
// Contact tools
|
||||
export { pylonListContactsTool } from './list_contacts'
|
||||
export { pylonListIssueFollowersTool } from './list_issue_followers'
|
||||
// Issue tools
|
||||
export { pylonListIssuesTool } from './list_issues'
|
||||
// Tag tools
|
||||
export { pylonListTagsTool } from './list_tags'
|
||||
// Team tools
|
||||
export { pylonListTeamsTool } from './list_teams'
|
||||
// User tools
|
||||
export { pylonListUsersTool } from './list_users'
|
||||
export { pylonManageIssueFollowersTool } from './manage_issue_followers'
|
||||
// Message tools
|
||||
export { pylonRedactMessageTool } from './redact_message'
|
||||
export { pylonSearchAccountsTool } from './search_accounts'
|
||||
export { pylonSearchContactsTool } from './search_contacts'
|
||||
export { pylonSearchIssuesTool } from './search_issues'
|
||||
export { pylonSearchUsersTool } from './search_users'
|
||||
export { pylonSnoozeIssueTool } from './snooze_issue'
|
||||
export { pylonUpdateAccountTool } from './update_account'
|
||||
export { pylonUpdateContactTool } from './update_contact'
|
||||
export { pylonUpdateIssueTool } from './update_issue'
|
||||
export { pylonUpdateTagTool } from './update_tag'
|
||||
export { pylonUpdateTeamTool } from './update_team'
|
||||
export { pylonUpdateUserTool } from './update_user'
|
||||
@@ -1,112 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonLinkExternalIssue')
|
||||
|
||||
export interface PylonLinkExternalIssueParams {
|
||||
apiToken: string
|
||||
issueId: string
|
||||
externalIssueId: string
|
||||
source: string
|
||||
}
|
||||
|
||||
export interface PylonLinkExternalIssueResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
externalIssue: any
|
||||
metadata: {
|
||||
operation: 'link_external_issue'
|
||||
issueId: string
|
||||
externalIssueId: string
|
||||
source: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonLinkExternalIssueTool: ToolConfig<
|
||||
PylonLinkExternalIssueParams,
|
||||
PylonLinkExternalIssueResponse
|
||||
> = {
|
||||
id: 'pylon_link_external_issue',
|
||||
name: 'Link External Issue in Pylon',
|
||||
description: 'Link an issue to an external system issue',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
issueId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'The ID of the Pylon issue',
|
||||
},
|
||||
externalIssueId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'The ID of the external issue',
|
||||
},
|
||||
source: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'The source system (e.g., "jira", "linear", "github")',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/issues/${params?.issueId || ''}/external-issues`),
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => ({
|
||||
external_issue_id: params?.externalIssueId || '',
|
||||
source: params?.source || '',
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response, params?: PylonLinkExternalIssueParams) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'link_external_issue')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
externalIssue: data.data,
|
||||
metadata: {
|
||||
operation: 'link_external_issue' as const,
|
||||
issueId: params?.issueId || '',
|
||||
externalIssueId: params?.externalIssueId || '',
|
||||
source: params?.source || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Linked external issue data',
|
||||
properties: {
|
||||
externalIssue: { type: 'object', description: 'External issue link object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,109 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonListAccounts')
|
||||
|
||||
export interface PylonListAccountsParams {
|
||||
apiToken: string
|
||||
limit?: string
|
||||
cursor?: string
|
||||
}
|
||||
|
||||
export interface PylonListAccountsResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
accounts: any[]
|
||||
pagination?: {
|
||||
cursor?: string
|
||||
has_next_page?: boolean
|
||||
}
|
||||
metadata: {
|
||||
operation: 'list_accounts'
|
||||
totalReturned: number
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonListAccountsTool: ToolConfig<PylonListAccountsParams, PylonListAccountsResponse> =
|
||||
{
|
||||
id: 'pylon_list_accounts',
|
||||
name: 'List Accounts in Pylon',
|
||||
description: 'Retrieve a paginated list of accounts',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
limit: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Number of accounts to return (1-1000, default 100)',
|
||||
},
|
||||
cursor: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Pagination cursor for next page of results',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => {
|
||||
const url = new URL(buildPylonUrl('/accounts'))
|
||||
if (params.limit) {
|
||||
url.searchParams.append('limit', params.limit)
|
||||
}
|
||||
if (params.cursor) {
|
||||
url.searchParams.append('cursor', params.cursor)
|
||||
}
|
||||
return url.toString()
|
||||
},
|
||||
method: 'GET',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'list_accounts')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
accounts: data.data || [],
|
||||
pagination: data.pagination,
|
||||
metadata: {
|
||||
operation: 'list_accounts' as const,
|
||||
totalReturned: data.data?.length || 0,
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'List of accounts',
|
||||
properties: {
|
||||
accounts: { type: 'array', description: 'Array of account objects' },
|
||||
pagination: { type: 'object', description: 'Pagination metadata' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,109 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonListContacts')
|
||||
|
||||
export interface PylonListContactsParams {
|
||||
apiToken: string
|
||||
cursor?: string
|
||||
limit?: string
|
||||
}
|
||||
|
||||
export interface PylonListContactsResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
contacts: any[]
|
||||
pagination?: {
|
||||
cursor?: string
|
||||
has_next_page?: boolean
|
||||
}
|
||||
metadata: {
|
||||
operation: 'list_contacts'
|
||||
totalReturned: number
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonListContactsTool: ToolConfig<PylonListContactsParams, PylonListContactsResponse> =
|
||||
{
|
||||
id: 'pylon_list_contacts',
|
||||
name: 'List Contacts in Pylon',
|
||||
description: 'Retrieve a list of contacts',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
cursor: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Pagination cursor for next page of results',
|
||||
},
|
||||
limit: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Maximum number of contacts to return',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => {
|
||||
const url = new URL(buildPylonUrl('/contacts'))
|
||||
if (params.cursor) {
|
||||
url.searchParams.append('cursor', params.cursor)
|
||||
}
|
||||
if (params.limit) {
|
||||
url.searchParams.append('limit', params.limit)
|
||||
}
|
||||
return url.toString()
|
||||
},
|
||||
method: 'GET',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'list_contacts')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
contacts: data.data || [],
|
||||
pagination: data.pagination,
|
||||
metadata: {
|
||||
operation: 'list_contacts' as const,
|
||||
totalReturned: data.data?.length || 0,
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'List of contacts',
|
||||
properties: {
|
||||
contacts: { type: 'array', description: 'Array of contact objects' },
|
||||
pagination: { type: 'object', description: 'Pagination metadata' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonListIssueFollowers')
|
||||
|
||||
export interface PylonListIssueFollowersParams {
|
||||
apiToken: string
|
||||
issueId: string
|
||||
}
|
||||
|
||||
export interface PylonListIssueFollowersResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
followers: any[]
|
||||
metadata: {
|
||||
operation: 'list_issue_followers'
|
||||
issueId: string
|
||||
totalFollowers: number
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonListIssueFollowersTool: ToolConfig<
|
||||
PylonListIssueFollowersParams,
|
||||
PylonListIssueFollowersResponse
|
||||
> = {
|
||||
id: 'pylon_list_issue_followers',
|
||||
name: 'List Issue Followers in Pylon',
|
||||
description: 'Get list of followers for a specific issue',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
issueId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'The ID of the issue',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/issues/${params?.issueId || ''}/followers`),
|
||||
method: 'GET',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response, params?: PylonListIssueFollowersParams) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'list_issue_followers')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
followers: data.data || [],
|
||||
metadata: {
|
||||
operation: 'list_issue_followers' as const,
|
||||
issueId: params?.issueId || '',
|
||||
totalFollowers: data.data?.length || 0,
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Followers list',
|
||||
properties: {
|
||||
followers: { type: 'array', description: 'Array of follower objects' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,114 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonListIssues')
|
||||
|
||||
export interface PylonListIssuesParams {
|
||||
apiToken: string
|
||||
startTime: string
|
||||
endTime: string
|
||||
cursor?: string
|
||||
}
|
||||
|
||||
export interface PylonListIssuesResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
issues: any[]
|
||||
pagination?: {
|
||||
cursor?: string
|
||||
has_next_page?: boolean
|
||||
}
|
||||
metadata: {
|
||||
operation: 'list_issues'
|
||||
totalReturned: number
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonListIssuesTool: ToolConfig<PylonListIssuesParams, PylonListIssuesResponse> = {
|
||||
id: 'pylon_list_issues',
|
||||
name: 'List Issues in Pylon',
|
||||
description: 'Retrieve a list of issues within a specified time range',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
startTime: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Start time in RFC3339 format (e.g., 2024-01-01T00:00:00Z)',
|
||||
},
|
||||
endTime: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'End time in RFC3339 format (e.g., 2024-01-31T23:59:59Z)',
|
||||
},
|
||||
cursor: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Pagination cursor for next page of results',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => {
|
||||
const url = new URL(buildPylonUrl('/issues'))
|
||||
url.searchParams.append('start_time', params.startTime)
|
||||
url.searchParams.append('end_time', params.endTime)
|
||||
if (params.cursor) {
|
||||
url.searchParams.append('cursor', params.cursor)
|
||||
}
|
||||
return url.toString()
|
||||
},
|
||||
method: 'GET',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'list_issues')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
issues: data.data || [],
|
||||
pagination: data.pagination,
|
||||
metadata: {
|
||||
operation: 'list_issues' as const,
|
||||
totalReturned: data.data?.length || 0,
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'List of issues',
|
||||
properties: {
|
||||
issues: { type: 'array', description: 'Array of issue objects' },
|
||||
pagination: { type: 'object', description: 'Pagination metadata' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,79 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonListTags')
|
||||
|
||||
export interface PylonListTagsParams {
|
||||
apiToken: string
|
||||
}
|
||||
|
||||
export interface PylonListTagsResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
tags: any[]
|
||||
metadata: {
|
||||
operation: 'list_tags'
|
||||
totalReturned: number
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonListTagsTool: ToolConfig<PylonListTagsParams, PylonListTagsResponse> = {
|
||||
id: 'pylon_list_tags',
|
||||
name: 'List Tags in Pylon',
|
||||
description: 'Retrieve a list of tags',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: () => buildPylonUrl('/tags'),
|
||||
method: 'GET',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'list_tags')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
tags: data.data || [],
|
||||
metadata: {
|
||||
operation: 'list_tags' as const,
|
||||
totalReturned: data.data?.length || 0,
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'List of tags',
|
||||
properties: {
|
||||
tags: { type: 'array', description: 'Array of tag objects' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,79 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonListTeams')
|
||||
|
||||
export interface PylonListTeamsParams {
|
||||
apiToken: string
|
||||
}
|
||||
|
||||
export interface PylonListTeamsResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
teams: any[]
|
||||
metadata: {
|
||||
operation: 'list_teams'
|
||||
totalReturned: number
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonListTeamsTool: ToolConfig<PylonListTeamsParams, PylonListTeamsResponse> = {
|
||||
id: 'pylon_list_teams',
|
||||
name: 'List Teams in Pylon',
|
||||
description: 'Retrieve a list of teams',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: () => buildPylonUrl('/teams'),
|
||||
method: 'GET',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'list_teams')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
teams: data.data || [],
|
||||
metadata: {
|
||||
operation: 'list_teams' as const,
|
||||
totalReturned: data.data?.length || 0,
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'List of teams',
|
||||
properties: {
|
||||
teams: { type: 'array', description: 'Array of team objects' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,79 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonListUsers')
|
||||
|
||||
export interface PylonListUsersParams {
|
||||
apiToken: string
|
||||
}
|
||||
|
||||
export interface PylonListUsersResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
users: any[]
|
||||
metadata: {
|
||||
operation: 'list_users'
|
||||
totalReturned: number
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonListUsersTool: ToolConfig<PylonListUsersParams, PylonListUsersResponse> = {
|
||||
id: 'pylon_list_users',
|
||||
name: 'List Users in Pylon',
|
||||
description: 'Retrieve a list of users',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: () => buildPylonUrl('/users'),
|
||||
method: 'GET',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'list_users')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
users: data.data || [],
|
||||
metadata: {
|
||||
operation: 'list_users' as const,
|
||||
totalReturned: data.data?.length || 0,
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'List of users',
|
||||
properties: {
|
||||
users: { type: 'array', description: 'Array of user objects' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,128 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonManageIssueFollowers')
|
||||
|
||||
export interface PylonManageIssueFollowersParams {
|
||||
apiToken: string
|
||||
issueId: string
|
||||
userIds?: string
|
||||
contactIds?: string
|
||||
operation?: string
|
||||
}
|
||||
|
||||
export interface PylonManageIssueFollowersResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
followers: any[]
|
||||
metadata: {
|
||||
operation: 'manage_issue_followers'
|
||||
issueId: string
|
||||
action: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonManageIssueFollowersTool: ToolConfig<
|
||||
PylonManageIssueFollowersParams,
|
||||
PylonManageIssueFollowersResponse
|
||||
> = {
|
||||
id: 'pylon_manage_issue_followers',
|
||||
name: 'Manage Issue Followers in Pylon',
|
||||
description: 'Add or remove followers from an issue',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
issueId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'The ID of the issue',
|
||||
},
|
||||
userIds: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated user IDs to add/remove',
|
||||
},
|
||||
contactIds: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated contact IDs to add/remove',
|
||||
},
|
||||
operation: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Operation to perform: "add" or "remove" (default: "add")',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/issues/${params?.issueId || ''}/followers`),
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: any = {}
|
||||
|
||||
if (params.userIds) {
|
||||
body.user_ids = params.userIds.split(',').map((id) => id.trim())
|
||||
}
|
||||
|
||||
if (params.contactIds) {
|
||||
body.contact_ids = params.contactIds.split(',').map((id) => id.trim())
|
||||
}
|
||||
|
||||
body.operation = params?.operation || 'add'
|
||||
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response, params?: PylonManageIssueFollowersParams) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'manage_issue_followers')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
followers: data.data || [],
|
||||
metadata: {
|
||||
operation: 'manage_issue_followers' as const,
|
||||
issueId: params?.issueId || '',
|
||||
action: params?.operation || 'add' || 'add',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Updated followers list',
|
||||
properties: {
|
||||
followers: { type: 'array', description: 'Array of follower objects' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,94 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonRedactMessage')
|
||||
|
||||
export interface PylonRedactMessageParams {
|
||||
apiToken: string
|
||||
issueId: string
|
||||
messageId: string
|
||||
}
|
||||
|
||||
export interface PylonRedactMessageResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
metadata: {
|
||||
operation: 'redact_message'
|
||||
issueId: string
|
||||
messageId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonRedactMessageTool: ToolConfig<
|
||||
PylonRedactMessageParams,
|
||||
PylonRedactMessageResponse
|
||||
> = {
|
||||
id: 'pylon_redact_message',
|
||||
name: 'Redact Message in Pylon',
|
||||
description: 'Redact a specific message within an issue',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
issueId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Issue ID containing the message',
|
||||
},
|
||||
messageId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Message ID to redact',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/issues/${params.issueId}/messages/${params.messageId}/redact`),
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'redact_message')
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
metadata: {
|
||||
operation: 'redact_message' as const,
|
||||
issueId: '',
|
||||
messageId: '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Redact operation result',
|
||||
properties: {
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,130 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonSearchAccounts')
|
||||
|
||||
export interface PylonSearchAccountsParams {
|
||||
apiToken: string
|
||||
filter: string
|
||||
limit?: string
|
||||
cursor?: string
|
||||
}
|
||||
|
||||
export interface PylonSearchAccountsResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
accounts: any[]
|
||||
pagination?: {
|
||||
cursor?: string
|
||||
has_next_page?: boolean
|
||||
}
|
||||
metadata: {
|
||||
operation: 'search_accounts'
|
||||
totalReturned: number
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonSearchAccountsTool: ToolConfig<
|
||||
PylonSearchAccountsParams,
|
||||
PylonSearchAccountsResponse
|
||||
> = {
|
||||
id: 'pylon_search_accounts',
|
||||
name: 'Search Accounts in Pylon',
|
||||
description: 'Search accounts with custom filters',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
filter: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Filter as JSON string with field/operator/value structure',
|
||||
},
|
||||
limit: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Number of accounts to return (1-1000, default 100)',
|
||||
},
|
||||
cursor: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Pagination cursor for next page of results',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: () => buildPylonUrl('/accounts/search'),
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: any = {}
|
||||
|
||||
try {
|
||||
body.filter = JSON.parse(params.filter)
|
||||
} catch (error) {
|
||||
logger.warn('Failed to parse filter', { error })
|
||||
throw new Error('Invalid filter JSON format')
|
||||
}
|
||||
|
||||
if (params.limit) {
|
||||
body.limit = Number.parseInt(params.limit, 10)
|
||||
}
|
||||
|
||||
if (params.cursor) {
|
||||
body.cursor = params.cursor
|
||||
}
|
||||
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'search_accounts')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
accounts: data.data || [],
|
||||
pagination: data.pagination,
|
||||
metadata: {
|
||||
operation: 'search_accounts' as const,
|
||||
totalReturned: data.data?.length || 0,
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Search results',
|
||||
properties: {
|
||||
accounts: { type: 'array', description: 'Array of matching account objects' },
|
||||
pagination: { type: 'object', description: 'Pagination metadata' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,125 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonSearchContacts')
|
||||
|
||||
export interface PylonSearchContactsParams {
|
||||
apiToken: string
|
||||
filter: string
|
||||
limit?: string
|
||||
cursor?: string
|
||||
}
|
||||
|
||||
export interface PylonSearchContactsResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
contacts: any[]
|
||||
pagination?: {
|
||||
cursor?: string
|
||||
has_next_page?: boolean
|
||||
}
|
||||
metadata: {
|
||||
operation: 'search_contacts'
|
||||
totalReturned: number
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonSearchContactsTool: ToolConfig<
|
||||
PylonSearchContactsParams,
|
||||
PylonSearchContactsResponse
|
||||
> = {
|
||||
id: 'pylon_search_contacts',
|
||||
name: 'Search Contacts in Pylon',
|
||||
description: 'Search for contacts using a filter',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
filter: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Filter as JSON object',
|
||||
},
|
||||
limit: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Maximum number of contacts to return',
|
||||
},
|
||||
cursor: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Pagination cursor for next page of results',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: () => buildPylonUrl('/contacts/search'),
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: any = {}
|
||||
|
||||
try {
|
||||
body.filter = JSON.parse(params.filter)
|
||||
} catch (error) {
|
||||
logger.warn('Failed to parse filter', { error })
|
||||
body.filter = {}
|
||||
}
|
||||
|
||||
if (params.limit) body.limit = Number.parseInt(params.limit, 10)
|
||||
if (params.cursor) body.cursor = params.cursor
|
||||
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'search_contacts')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
contacts: data.data || [],
|
||||
pagination: data.pagination,
|
||||
metadata: {
|
||||
operation: 'search_contacts' as const,
|
||||
totalReturned: data.data?.length || 0,
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Search results',
|
||||
properties: {
|
||||
contacts: { type: 'array', description: 'Array of contact objects' },
|
||||
pagination: { type: 'object', description: 'Pagination metadata' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,124 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonSearchIssues')
|
||||
|
||||
export interface PylonSearchIssuesParams {
|
||||
apiToken: string
|
||||
filter: string
|
||||
cursor?: string
|
||||
limit?: number
|
||||
}
|
||||
|
||||
export interface PylonSearchIssuesResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
issues: any[]
|
||||
pagination?: {
|
||||
cursor?: string
|
||||
has_next_page?: boolean
|
||||
}
|
||||
metadata: {
|
||||
operation: 'search_issues'
|
||||
totalReturned: number
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonSearchIssuesTool: ToolConfig<PylonSearchIssuesParams, PylonSearchIssuesResponse> =
|
||||
{
|
||||
id: 'pylon_search_issues',
|
||||
name: 'Search Issues in Pylon',
|
||||
description: 'Query issues using filters',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
filter: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Filter criteria as JSON string',
|
||||
},
|
||||
cursor: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Pagination cursor for next page of results',
|
||||
},
|
||||
limit: {
|
||||
type: 'number',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Maximum number of results to return',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: () => buildPylonUrl('/issues/search'),
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: any = {}
|
||||
|
||||
if (params.filter) {
|
||||
try {
|
||||
body.filter = JSON.parse(params.filter)
|
||||
} catch (error) {
|
||||
logger.warn('Failed to parse filter', { error })
|
||||
}
|
||||
}
|
||||
|
||||
if (params.cursor) body.cursor = params.cursor
|
||||
if (params.limit !== undefined) body.limit = params.limit
|
||||
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'search_issues')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
issues: data.data || [],
|
||||
pagination: data.pagination,
|
||||
metadata: {
|
||||
operation: 'search_issues' as const,
|
||||
totalReturned: data.data?.length || 0,
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Search results',
|
||||
properties: {
|
||||
issues: { type: 'array', description: 'Array of issue objects' },
|
||||
pagination: { type: 'object', description: 'Pagination metadata' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,122 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonSearchUsers')
|
||||
|
||||
export interface PylonSearchUsersParams {
|
||||
apiToken: string
|
||||
filter: string
|
||||
cursor?: string
|
||||
limit?: string
|
||||
}
|
||||
|
||||
export interface PylonSearchUsersResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
users: any[]
|
||||
pagination?: {
|
||||
cursor?: string
|
||||
has_next_page?: boolean
|
||||
}
|
||||
metadata: {
|
||||
operation: 'search_users'
|
||||
totalReturned: number
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonSearchUsersTool: ToolConfig<PylonSearchUsersParams, PylonSearchUsersResponse> = {
|
||||
id: 'pylon_search_users',
|
||||
name: 'Search Users in Pylon',
|
||||
description: 'Search for users using a filter with email field',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
filter: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Filter as JSON object with email field',
|
||||
},
|
||||
cursor: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Pagination cursor for next page of results',
|
||||
},
|
||||
limit: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Maximum number of users to return',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: () => buildPylonUrl('/users/search'),
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: any = {}
|
||||
|
||||
try {
|
||||
body.filter = JSON.parse(params.filter)
|
||||
} catch (error) {
|
||||
logger.warn('Failed to parse filter', { error })
|
||||
body.filter = {}
|
||||
}
|
||||
|
||||
if (params.cursor) body.cursor = params.cursor
|
||||
if (params.limit) body.limit = Number.parseInt(params.limit, 10)
|
||||
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'search_users')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
users: data.data || [],
|
||||
pagination: data.pagination,
|
||||
metadata: {
|
||||
operation: 'search_users' as const,
|
||||
totalReturned: data.data?.length || 0,
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Search results',
|
||||
properties: {
|
||||
users: { type: 'array', description: 'Array of user objects' },
|
||||
pagination: { type: 'object', description: 'Pagination metadata' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,99 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonSnoozeIssue')
|
||||
|
||||
export interface PylonSnoozeIssueParams {
|
||||
apiToken: string
|
||||
issueId: string
|
||||
snoozeUntil: string
|
||||
}
|
||||
|
||||
export interface PylonSnoozeIssueResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
issue: any
|
||||
metadata: {
|
||||
operation: 'snooze_issue'
|
||||
issueId: string
|
||||
snoozeUntil: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonSnoozeIssueTool: ToolConfig<PylonSnoozeIssueParams, PylonSnoozeIssueResponse> = {
|
||||
id: 'pylon_snooze_issue',
|
||||
name: 'Snooze Issue in Pylon',
|
||||
description: 'Postpone issue visibility until specified time',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
issueId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'The ID of the issue to snooze',
|
||||
},
|
||||
snoozeUntil: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'RFC3339 timestamp when issue should reappear (e.g., 2024-01-01T00:00:00Z)',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/issues/${params?.issueId || ''}/snooze`),
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => ({
|
||||
snooze_until: params?.snoozeUntil || '',
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response, params?: PylonSnoozeIssueParams) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'snooze_issue')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
issue: data.data,
|
||||
metadata: {
|
||||
operation: 'snooze_issue' as const,
|
||||
issueId: params?.issueId || '',
|
||||
snoozeUntil: params?.snoozeUntil || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Snoozed issue data',
|
||||
properties: {
|
||||
issue: { type: 'object', description: 'Snoozed issue object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
// Shared types and utilities for Pylon tools
|
||||
|
||||
export const PYLON_API_BASE_URL = 'https://api.usepylon.com'
|
||||
|
||||
export function buildPylonUrl(path: string): string {
|
||||
return `${PYLON_API_BASE_URL}${path}`
|
||||
}
|
||||
|
||||
export interface PylonErrorResponse {
|
||||
error?: {
|
||||
code?: string
|
||||
message?: string
|
||||
details?: any
|
||||
}
|
||||
request_id?: string
|
||||
}
|
||||
|
||||
export function handlePylonError(
|
||||
data: PylonErrorResponse,
|
||||
status: number,
|
||||
operation: string
|
||||
): never {
|
||||
const errorMessage = data.error?.message || `Pylon API error during ${operation}`
|
||||
const errorCode = data.error?.code || `HTTP_${status}`
|
||||
|
||||
throw new Error(`${errorCode}: ${errorMessage}`)
|
||||
}
|
||||
@@ -1,198 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonUpdateAccount')
|
||||
|
||||
export interface PylonUpdateAccountParams {
|
||||
apiToken: string
|
||||
accountId: string
|
||||
name?: string
|
||||
domains?: string
|
||||
primaryDomain?: string
|
||||
customFields?: string
|
||||
tags?: string
|
||||
channels?: string
|
||||
externalIds?: string
|
||||
ownerId?: string
|
||||
logoUrl?: string
|
||||
subaccountIds?: string
|
||||
}
|
||||
|
||||
export interface PylonUpdateAccountResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
account: any
|
||||
metadata: {
|
||||
operation: 'update_account'
|
||||
accountId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonUpdateAccountTool: ToolConfig<
|
||||
PylonUpdateAccountParams,
|
||||
PylonUpdateAccountResponse
|
||||
> = {
|
||||
id: 'pylon_update_account',
|
||||
name: 'Update Account in Pylon',
|
||||
description: 'Update an existing account with new properties',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
accountId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Account ID to update',
|
||||
},
|
||||
name: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Account name',
|
||||
},
|
||||
domains: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated list of domains',
|
||||
},
|
||||
primaryDomain: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Primary domain for the account',
|
||||
},
|
||||
customFields: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Custom fields as JSON object',
|
||||
},
|
||||
tags: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated tag IDs',
|
||||
},
|
||||
channels: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated channel IDs',
|
||||
},
|
||||
externalIds: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated external IDs',
|
||||
},
|
||||
ownerId: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Owner user ID',
|
||||
},
|
||||
logoUrl: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'URL to account logo',
|
||||
},
|
||||
subaccountIds: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated subaccount IDs',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/accounts/${params.accountId}`),
|
||||
method: 'PATCH',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: any = {}
|
||||
|
||||
if (params.name) body.name = params.name
|
||||
if (params.primaryDomain) body.primary_domain = params.primaryDomain
|
||||
if (params.ownerId) body.owner_id = params.ownerId
|
||||
if (params.logoUrl) body.logo_url = params.logoUrl
|
||||
|
||||
if (params.domains) {
|
||||
body.domains = params.domains.split(',').map((d) => d.trim())
|
||||
}
|
||||
|
||||
if (params.customFields) {
|
||||
try {
|
||||
body.custom_fields = JSON.parse(params.customFields)
|
||||
} catch (error) {
|
||||
logger.warn('Failed to parse custom fields', { error })
|
||||
}
|
||||
}
|
||||
|
||||
if (params.tags) {
|
||||
body.tags = params.tags.split(',').map((t) => t.trim())
|
||||
}
|
||||
|
||||
if (params.channels) {
|
||||
body.channels = params.channels.split(',').map((c) => c.trim())
|
||||
}
|
||||
|
||||
if (params.externalIds) {
|
||||
body.external_ids = params.externalIds.split(',').map((e) => e.trim())
|
||||
}
|
||||
|
||||
if (params.subaccountIds) {
|
||||
body.subaccount_ids = params.subaccountIds.split(',').map((s) => s.trim())
|
||||
}
|
||||
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'update_account')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
account: data.data,
|
||||
metadata: {
|
||||
operation: 'update_account' as const,
|
||||
accountId: data.data?.id || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Updated account data',
|
||||
properties: {
|
||||
account: { type: 'object', description: 'Updated account object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,159 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonUpdateContact')
|
||||
|
||||
export interface PylonUpdateContactParams {
|
||||
apiToken: string
|
||||
contactId: string
|
||||
name?: string
|
||||
email?: string
|
||||
accountId?: string
|
||||
accountExternalId?: string
|
||||
avatarUrl?: string
|
||||
customFields?: string
|
||||
portalRole?: string
|
||||
}
|
||||
|
||||
export interface PylonUpdateContactResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
contact: any
|
||||
metadata: {
|
||||
operation: 'update_contact'
|
||||
contactId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonUpdateContactTool: ToolConfig<
|
||||
PylonUpdateContactParams,
|
||||
PylonUpdateContactResponse
|
||||
> = {
|
||||
id: 'pylon_update_contact',
|
||||
name: 'Update Contact in Pylon',
|
||||
description: 'Update an existing contact with specified properties',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
contactId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Contact ID to update',
|
||||
},
|
||||
name: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Contact name',
|
||||
},
|
||||
email: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Contact email address',
|
||||
},
|
||||
accountId: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Account ID to associate with contact',
|
||||
},
|
||||
accountExternalId: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'External account ID to associate with contact',
|
||||
},
|
||||
avatarUrl: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'URL for contact avatar image',
|
||||
},
|
||||
customFields: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Custom fields as JSON object',
|
||||
},
|
||||
portalRole: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Portal role for the contact',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/contacts/${params.contactId}`),
|
||||
method: 'PATCH',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: any = {}
|
||||
|
||||
if (params.name) body.name = params.name
|
||||
if (params.email) body.email = params.email
|
||||
if (params.accountId) body.account_id = params.accountId
|
||||
if (params.accountExternalId) body.account_external_id = params.accountExternalId
|
||||
if (params.avatarUrl) body.avatar_url = params.avatarUrl
|
||||
if (params.portalRole) body.portal_role = params.portalRole
|
||||
|
||||
if (params.customFields) {
|
||||
try {
|
||||
body.custom_fields = JSON.parse(params.customFields)
|
||||
} catch (error) {
|
||||
logger.warn('Failed to parse custom fields', { error })
|
||||
}
|
||||
}
|
||||
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'update_contact')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
contact: data.data,
|
||||
metadata: {
|
||||
operation: 'update_contact' as const,
|
||||
contactId: data.data?.id || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Updated contact data',
|
||||
properties: {
|
||||
contact: { type: 'object', description: 'Updated contact object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,168 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonUpdateIssue')
|
||||
|
||||
export interface PylonUpdateIssueParams {
|
||||
apiToken: string
|
||||
issueId: string
|
||||
state?: string
|
||||
assigneeId?: string
|
||||
teamId?: string
|
||||
tags?: string
|
||||
customFields?: string
|
||||
customerPortalVisible?: boolean
|
||||
requesterId?: string
|
||||
accountId?: string
|
||||
}
|
||||
|
||||
export interface PylonUpdateIssueResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
issue: any
|
||||
metadata: {
|
||||
operation: 'update_issue'
|
||||
issueId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonUpdateIssueTool: ToolConfig<PylonUpdateIssueParams, PylonUpdateIssueResponse> = {
|
||||
id: 'pylon_update_issue',
|
||||
name: 'Update Issue in Pylon',
|
||||
description: 'Update an existing issue',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
issueId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'The ID of the issue to update',
|
||||
},
|
||||
state: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Issue state',
|
||||
},
|
||||
assigneeId: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'User ID to assign issue to',
|
||||
},
|
||||
teamId: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Team ID to assign issue to',
|
||||
},
|
||||
tags: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated tag IDs',
|
||||
},
|
||||
customFields: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Custom fields as JSON object',
|
||||
},
|
||||
customerPortalVisible: {
|
||||
type: 'boolean',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Whether issue is visible in customer portal',
|
||||
},
|
||||
requesterId: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Requester user ID',
|
||||
},
|
||||
accountId: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Account ID to associate with issue',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/issues/${params.issueId}`),
|
||||
method: 'PATCH',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: any = {}
|
||||
|
||||
if (params.state !== undefined) body.state = params.state
|
||||
if (params.assigneeId !== undefined) body.assignee_id = params.assigneeId
|
||||
if (params.teamId !== undefined) body.team_id = params.teamId
|
||||
if (params.requesterId !== undefined) body.requester_id = params.requesterId
|
||||
if (params.accountId !== undefined) body.account_id = params.accountId
|
||||
if (params.customerPortalVisible !== undefined)
|
||||
body.customer_portal_visible = params.customerPortalVisible
|
||||
|
||||
if (params.tags) {
|
||||
body.tags = params.tags.split(',').map((t) => t.trim())
|
||||
}
|
||||
|
||||
if (params.customFields) {
|
||||
try {
|
||||
body.custom_fields = JSON.parse(params.customFields)
|
||||
} catch (error) {
|
||||
logger.warn('Failed to parse custom fields', { error })
|
||||
}
|
||||
}
|
||||
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'update_issue')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
issue: data.data,
|
||||
metadata: {
|
||||
operation: 'update_issue' as const,
|
||||
issueId: data.data?.id || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Updated issue data',
|
||||
properties: {
|
||||
issue: { type: 'object', description: 'Updated issue object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,109 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonUpdateTag')
|
||||
|
||||
export interface PylonUpdateTagParams {
|
||||
apiToken: string
|
||||
tagId: string
|
||||
hexColor?: string
|
||||
value?: string
|
||||
}
|
||||
|
||||
export interface PylonUpdateTagResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
tag: any
|
||||
metadata: {
|
||||
operation: 'update_tag'
|
||||
tagId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonUpdateTagTool: ToolConfig<PylonUpdateTagParams, PylonUpdateTagResponse> = {
|
||||
id: 'pylon_update_tag',
|
||||
name: 'Update Tag in Pylon',
|
||||
description: 'Update an existing tag with specified properties',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
tagId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Tag ID to update',
|
||||
},
|
||||
hexColor: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Hex color code for tag (e.g., #FF5733)',
|
||||
},
|
||||
value: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Tag value/name',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/tags/${params.tagId}`),
|
||||
method: 'PATCH',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: any = {}
|
||||
|
||||
if (params.hexColor) body.hex_color = params.hexColor
|
||||
if (params.value) body.value = params.value
|
||||
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'update_tag')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
tag: data.data,
|
||||
metadata: {
|
||||
operation: 'update_tag' as const,
|
||||
tagId: data.data?.id || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Updated tag data',
|
||||
properties: {
|
||||
tag: { type: 'object', description: 'Updated tag object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,113 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonUpdateTeam')
|
||||
|
||||
export interface PylonUpdateTeamParams {
|
||||
apiToken: string
|
||||
teamId: string
|
||||
name?: string
|
||||
userIds?: string
|
||||
}
|
||||
|
||||
export interface PylonUpdateTeamResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
team: any
|
||||
metadata: {
|
||||
operation: 'update_team'
|
||||
teamId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonUpdateTeamTool: ToolConfig<PylonUpdateTeamParams, PylonUpdateTeamResponse> = {
|
||||
id: 'pylon_update_team',
|
||||
name: 'Update Team in Pylon',
|
||||
description:
|
||||
'Update an existing team with specified properties (userIds replaces entire membership)',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
teamId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Team ID to update',
|
||||
},
|
||||
name: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Team name',
|
||||
},
|
||||
userIds: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Comma-separated user IDs (replaces entire team membership)',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/teams/${params.teamId}`),
|
||||
method: 'PATCH',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: any = {}
|
||||
|
||||
if (params.name) body.name = params.name
|
||||
|
||||
if (params.userIds) {
|
||||
body.user_ids = params.userIds.split(',').map((id) => id.trim())
|
||||
}
|
||||
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'update_team')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
team: data.data,
|
||||
metadata: {
|
||||
operation: 'update_team' as const,
|
||||
teamId: data.data?.id || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Updated team data',
|
||||
properties: {
|
||||
team: { type: 'object', description: 'Updated team object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,109 +0,0 @@
|
||||
import { createLogger } from '@/lib/logs/console/logger'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
import { buildPylonUrl, handlePylonError } from './types'
|
||||
|
||||
const logger = createLogger('PylonUpdateUser')
|
||||
|
||||
export interface PylonUpdateUserParams {
|
||||
apiToken: string
|
||||
userId: string
|
||||
roleId?: string
|
||||
status?: string
|
||||
}
|
||||
|
||||
export interface PylonUpdateUserResponse {
|
||||
success: boolean
|
||||
output: {
|
||||
user: any
|
||||
metadata: {
|
||||
operation: 'update_user'
|
||||
userId: string
|
||||
}
|
||||
success: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export const pylonUpdateUserTool: ToolConfig<PylonUpdateUserParams, PylonUpdateUserResponse> = {
|
||||
id: 'pylon_update_user',
|
||||
name: 'Update User in Pylon',
|
||||
description: 'Update an existing user with specified properties',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiToken: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'hidden',
|
||||
description: 'Pylon API token',
|
||||
},
|
||||
userId: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'User ID to update',
|
||||
},
|
||||
roleId: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Role ID to assign to user',
|
||||
},
|
||||
status: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'User status',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: (params) => buildPylonUrl(`/users/${params.userId}`),
|
||||
method: 'PATCH',
|
||||
headers: (params) => ({
|
||||
Authorization: `Bearer ${params.apiToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: any = {}
|
||||
|
||||
if (params.roleId) body.role_id = params.roleId
|
||||
if (params.status) body.status = params.status
|
||||
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
const data = await response.json()
|
||||
handlePylonError(data, response.status, 'update_user')
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
user: data.data,
|
||||
metadata: {
|
||||
operation: 'update_user' as const,
|
||||
userId: data.data?.id || '',
|
||||
},
|
||||
success: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
success: { type: 'boolean', description: 'Operation success status' },
|
||||
output: {
|
||||
type: 'object',
|
||||
description: 'Updated user data',
|
||||
properties: {
|
||||
user: { type: 'object', description: 'Updated user object' },
|
||||
metadata: { type: 'object', description: 'Operation metadata' },
|
||||
success: { type: 'boolean', description: 'Operation success' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -857,45 +857,6 @@ import {
|
||||
posthogUpdatePropertyDefinitionTool,
|
||||
posthogUpdateSurveyTool,
|
||||
} from '@/tools/posthog'
|
||||
import {
|
||||
pylonBulkUpdateAccountsTool,
|
||||
pylonCreateAccountTool,
|
||||
pylonCreateContactTool,
|
||||
pylonCreateIssueTool,
|
||||
pylonCreateTagTool,
|
||||
pylonCreateTeamTool,
|
||||
pylonDeleteAccountTool,
|
||||
pylonDeleteContactTool,
|
||||
pylonDeleteIssueTool,
|
||||
pylonDeleteTagTool,
|
||||
pylonGetAccountTool,
|
||||
pylonGetContactTool,
|
||||
pylonGetIssueTool,
|
||||
pylonGetTagTool,
|
||||
pylonGetTeamTool,
|
||||
pylonGetUserTool,
|
||||
pylonLinkExternalIssueTool,
|
||||
pylonListAccountsTool,
|
||||
pylonListContactsTool,
|
||||
pylonListIssueFollowersTool,
|
||||
pylonListIssuesTool,
|
||||
pylonListTagsTool,
|
||||
pylonListTeamsTool,
|
||||
pylonListUsersTool,
|
||||
pylonManageIssueFollowersTool,
|
||||
pylonRedactMessageTool,
|
||||
pylonSearchAccountsTool,
|
||||
pylonSearchContactsTool,
|
||||
pylonSearchIssuesTool,
|
||||
pylonSearchUsersTool,
|
||||
pylonSnoozeIssueTool,
|
||||
pylonUpdateAccountTool,
|
||||
pylonUpdateContactTool,
|
||||
pylonUpdateIssueTool,
|
||||
pylonUpdateTagTool,
|
||||
pylonUpdateTeamTool,
|
||||
pylonUpdateUserTool,
|
||||
} from '@/tools/pylon'
|
||||
import { qdrantFetchTool, qdrantSearchTool, qdrantUpsertTool } from '@/tools/qdrant'
|
||||
import {
|
||||
rdsDeleteTool,
|
||||
@@ -2331,43 +2292,6 @@ export const tools: Record<string, ToolConfig> = {
|
||||
salesforce_describe_object: salesforceDescribeObjectTool,
|
||||
salesforce_list_objects: salesforceListObjectsTool,
|
||||
sqs_send: sqsSendTool,
|
||||
pylon_list_issues: pylonListIssuesTool,
|
||||
pylon_create_issue: pylonCreateIssueTool,
|
||||
pylon_get_issue: pylonGetIssueTool,
|
||||
pylon_update_issue: pylonUpdateIssueTool,
|
||||
pylon_delete_issue: pylonDeleteIssueTool,
|
||||
pylon_search_issues: pylonSearchIssuesTool,
|
||||
pylon_snooze_issue: pylonSnoozeIssueTool,
|
||||
pylon_list_issue_followers: pylonListIssueFollowersTool,
|
||||
pylon_manage_issue_followers: pylonManageIssueFollowersTool,
|
||||
pylon_link_external_issue: pylonLinkExternalIssueTool,
|
||||
pylon_list_accounts: pylonListAccountsTool,
|
||||
pylon_create_account: pylonCreateAccountTool,
|
||||
pylon_get_account: pylonGetAccountTool,
|
||||
pylon_update_account: pylonUpdateAccountTool,
|
||||
pylon_delete_account: pylonDeleteAccountTool,
|
||||
pylon_bulk_update_accounts: pylonBulkUpdateAccountsTool,
|
||||
pylon_search_accounts: pylonSearchAccountsTool,
|
||||
pylon_list_contacts: pylonListContactsTool,
|
||||
pylon_create_contact: pylonCreateContactTool,
|
||||
pylon_get_contact: pylonGetContactTool,
|
||||
pylon_update_contact: pylonUpdateContactTool,
|
||||
pylon_delete_contact: pylonDeleteContactTool,
|
||||
pylon_search_contacts: pylonSearchContactsTool,
|
||||
pylon_list_users: pylonListUsersTool,
|
||||
pylon_get_user: pylonGetUserTool,
|
||||
pylon_update_user: pylonUpdateUserTool,
|
||||
pylon_search_users: pylonSearchUsersTool,
|
||||
pylon_list_teams: pylonListTeamsTool,
|
||||
pylon_get_team: pylonGetTeamTool,
|
||||
pylon_create_team: pylonCreateTeamTool,
|
||||
pylon_update_team: pylonUpdateTeamTool,
|
||||
pylon_list_tags: pylonListTagsTool,
|
||||
pylon_get_tag: pylonGetTagTool,
|
||||
pylon_create_tag: pylonCreateTagTool,
|
||||
pylon_update_tag: pylonUpdateTagTool,
|
||||
pylon_delete_tag: pylonDeleteTagTool,
|
||||
pylon_redact_message: pylonRedactMessageTool,
|
||||
mailchimp_get_audiences: mailchimpGetAudiencesTool,
|
||||
mailchimp_get_audience: mailchimpGetAudienceTool,
|
||||
mailchimp_create_audience: mailchimpCreateAudienceTool,
|
||||
|
||||
Reference in New Issue
Block a user