From 755da44edae099090cd935cd5de98ee8796c97d9 Mon Sep 17 00:00:00 2001 From: Luan Cazarine Date: Mon, 13 May 2024 17:19:40 -0300 Subject: [PATCH 1/5] thoughtly init --- .../actions/create-contact/create-contact.mjs | 71 ++++++++ .../actions/trigger-call/trigger-call.mjs | 38 +++++ components/thoughtly/package.json | 2 +- .../new-response-instant.mjs | 46 ++++++ components/thoughtly/thoughtly.app.mjs | 155 +++++++++++++++++- 5 files changed, 306 insertions(+), 6 deletions(-) create mode 100644 components/thoughtly/actions/create-contact/create-contact.mjs create mode 100644 components/thoughtly/actions/trigger-call/trigger-call.mjs create mode 100644 components/thoughtly/sources/new-response-instant/new-response-instant.mjs diff --git a/components/thoughtly/actions/create-contact/create-contact.mjs b/components/thoughtly/actions/create-contact/create-contact.mjs new file mode 100644 index 0000000000000..4f1331de4c68d --- /dev/null +++ b/components/thoughtly/actions/create-contact/create-contact.mjs @@ -0,0 +1,71 @@ +import thoughtly from "../../thoughtly.app.mjs"; +import { axios } from "@pipedream/platform"; + +export default { + key: "thoughtly-create-contact", + name: "Create Contact", + description: "Generates a new contact within your Thoughtly team.", + version: "0.0.1", + type: "action", + props: { + thoughtly, + phoneNumber: thoughtly.propDefinitions.phoneNumber, + name: { + propDefinition: [ + thoughtly, + "name", + (c) => ({ + optional: true, + }), + ], + }, + email: { + propDefinition: [ + thoughtly, + "email", + (c) => ({ + optional: true, + }), + ], + }, + countryCode: { + propDefinition: [ + thoughtly, + "countryCode", + (c) => ({ + optional: true, + }), + ], + }, + tags: { + propDefinition: [ + thoughtly, + "tags", + (c) => ({ + optional: true, + }), + ], + }, + attributes: { + propDefinition: [ + thoughtly, + "attributes", + (c) => ({ + optional: true, + }), + ], + }, + }, + async run({ $ }) { + const response = await this.thoughtly.createContact({ + phoneNumber: this.phoneNumber, + name: this.name, + email: this.email, + countryCode: this.countryCode, + tags: this.tags, + attributes: this.attributes, + }); + $.export("$summary", `Successfully created contact with phone number ${this.phoneNumber}`); + return response; + }, +}; diff --git a/components/thoughtly/actions/trigger-call/trigger-call.mjs b/components/thoughtly/actions/trigger-call/trigger-call.mjs new file mode 100644 index 0000000000000..7f2061686adde --- /dev/null +++ b/components/thoughtly/actions/trigger-call/trigger-call.mjs @@ -0,0 +1,38 @@ +import thoughtly from "../../thoughtly.app.mjs"; +import { axios } from "@pipedream/platform"; + +export default { + key: "thoughtly-trigger-call", + name: "Trigger a Call", + description: "Triggers a call to a designated phone number.", + version: "0.0.${ts}", + type: "action", + props: { + thoughtly, + contactId: { + propDefinition: [ + thoughtly, + "contactId", + ], + }, + interviewId: { + propDefinition: [ + thoughtly, + "interviewId", + ], + }, + idMetadata: { + ...thoughtly.propDefinitions.idMetadata, + optional: true, + }, + }, + async run({ $ }) { + const response = await this.thoughtly.callContact({ + contactId: this.contactId, + interviewId: this.interviewId, + idMetadata: this.idMetadata, + }); + $.export("$summary", `Successfully triggered a call to contact ID ${this.contactId}`); + return response; + }, +}; diff --git a/components/thoughtly/package.json b/components/thoughtly/package.json index 2ea3785f8db6c..4a86d22927185 100644 --- a/components/thoughtly/package.json +++ b/components/thoughtly/package.json @@ -12,4 +12,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} diff --git a/components/thoughtly/sources/new-response-instant/new-response-instant.mjs b/components/thoughtly/sources/new-response-instant/new-response-instant.mjs new file mode 100644 index 0000000000000..407c6fed3a2bc --- /dev/null +++ b/components/thoughtly/sources/new-response-instant/new-response-instant.mjs @@ -0,0 +1,46 @@ +import thoughtly from "../../thoughtly.app.mjs"; +import { axios } from "@pipedream/platform"; + +export default { + key: "thoughtly-new-response-instant", + name: "New Response Instant", + description: "Emit new event when a thoughtly gets a new response.", + version: "0.0.{{ts}}", + type: "source", + dedupe: "unique", + props: { + thoughtly: { + type: "app", + app: "thoughtly", + }, + http: { + type: "$.interface.http", + customResponse: false, + }, + type: thoughtly.propDefinitions.type, + url: thoughtly.propDefinitions.url, + db: "$.service.db", + }, + hooks: { + async activate() { + const response = await this.thoughtly.subscribeToWebhook({ + type: this.type, + url: this.url, + }); + this.db.set("subscriptionId", response.data.id); + }, + async deactivate() { + const subscriptionId = this.db.get("subscriptionId"); + await this.thoughtly.unsubscribeFromWebhook({ + idMetadata: subscriptionId, + }); + }, + }, + async run(event) { + this.$emit(event.body, { + id: event.body.id || `${Date.now()}`, + summary: "New response received", + ts: Date.now(), + }); + }, +}; diff --git a/components/thoughtly/thoughtly.app.mjs b/components/thoughtly/thoughtly.app.mjs index 0eb5cd0189108..0ea007e5ac582 100644 --- a/components/thoughtly/thoughtly.app.mjs +++ b/components/thoughtly/thoughtly.app.mjs @@ -1,11 +1,156 @@ +import { axios } from "@pipedream/platform"; + export default { type: "app", app: "thoughtly", - propDefinitions: {}, + propDefinitions: { + type: { + type: "string", + label: "Type", + description: "The type of the event.", + }, + url: { + type: "string", + label: "URL", + description: "The URL to receive the webhook.", + }, + contactId: { + type: "string", + label: "Contact ID", + description: "The ID of the contact.", + }, + interviewId: { + type: "string", + label: "Interview ID", + description: "The ID of the interview.", + }, + idMetadata: { + type: "string", + label: "ID Metadata", + description: "The optional ID metadata.", + optional: true, + }, + phoneNumber: { + type: "string", + label: "Phone Number", + description: "The phone number of the new contact.", + }, + name: { + type: "string", + label: "Name", + description: "The name of the new contact.", + optional: true, + }, + email: { + type: "string", + label: "Email", + description: "The email of the new contact.", + optional: true, + }, + countryCode: { + type: "string", + label: "Country Code", + description: "The country code of the new contact's phone number.", + optional: true, + }, + tags: { + type: "string[]", + label: "Tags", + description: "Tags associated with the new contact.", + optional: true, + }, + attributes: { + type: "object", + label: "Attributes", + description: "Additional attributes for the new contact.", + optional: true, + }, + }, methods: { - // this.$auth contains connected account data - authKeys() { - console.log(Object.keys(this.$auth)); + _baseUrl() { + return "https://api.thought.ly"; + }, + async _makeRequest(opts = {}) { + const { + $ = this, method = "GET", path, headers, ...otherOpts + } = opts; + return axios($, { + ...otherOpts, + method, + url: this._baseUrl() + path, + headers: { + ...headers, + Authorization: `Bearer ${this.$auth.oauth_access_token}`, + }, + }); + }, + async createContact({ + phoneNumber, name, email, countryCode, tags, attributes, + }) { + return this._makeRequest({ + method: "POST", + path: "/contact/create", + data: { + phoneNumber, + name, + email, + countryCode, + tags, + attributes, + }, + }); + }, + async callContact({ + contactId, interviewId, idMetadata, + }) { + return this._makeRequest({ + method: "POST", + path: "/contact/call", + data: { + contactId, + interviewId, + idMetadata, + }, + }); + }, + async subscribeToWebhook({ + type, url, + }) { + return this._makeRequest({ + method: "POST", + path: "/webhooks/subscribe", + data: { + type, + url, + }, + }); + }, + async unsubscribeFromWebhook({ idMetadata }) { + return this._makeRequest({ + method: "DELETE", + path: `/webhooks/unsubscribe/${idMetadata}`, + }); + }, + async getContacts() { + return this._makeRequest({ + path: "/contact", + }); + }, + async deleteContact({ contactId }) { + return this._makeRequest({ + method: "DELETE", + path: `/contact/${contactId}`, + }); + }, + async getInterviews() { + return this._makeRequest({ + path: "/interview", + }); + }, + async getInterviewResponses({ interviewId }) { + return this._makeRequest({ + path: `/interview/${interviewId}/responses`, + }); }, }, -}; \ No newline at end of file +}; From 261a05c2d31df3b3dd2d6c559a2cb2ba76a20765 Mon Sep 17 00:00:00 2001 From: Luan Cazarine Date: Tue, 14 May 2024 11:33:53 -0300 Subject: [PATCH 2/5] [Components] thoughtly #11728 Sources - New Response (Instant) Actions - Trigger Call - Create Contact --- .../actions/create-contact/create-contact.mjs | 79 ++++----- .../actions/trigger-call/trigger-call.mjs | 21 ++- components/thoughtly/common/utils.mjs | 24 +++ components/thoughtly/package.json | 6 +- .../new-response-instant.mjs | 54 +++--- .../new-response-instant/test-event.mjs | 44 +++++ components/thoughtly/thoughtly.app.mjs | 161 ++++++------------ 7 files changed, 205 insertions(+), 184 deletions(-) create mode 100644 components/thoughtly/common/utils.mjs create mode 100644 components/thoughtly/sources/new-response-instant/test-event.mjs diff --git a/components/thoughtly/actions/create-contact/create-contact.mjs b/components/thoughtly/actions/create-contact/create-contact.mjs index 4f1331de4c68d..caa14b434a03c 100644 --- a/components/thoughtly/actions/create-contact/create-contact.mjs +++ b/components/thoughtly/actions/create-contact/create-contact.mjs @@ -1,5 +1,4 @@ import thoughtly from "../../thoughtly.app.mjs"; -import { axios } from "@pipedream/platform"; export default { key: "thoughtly-create-contact", @@ -9,63 +8,55 @@ export default { type: "action", props: { thoughtly, - phoneNumber: thoughtly.propDefinitions.phoneNumber, + phoneNumber: { + type: "string", + label: "Phone Number", + description: "The phone number of the new contact.", + }, name: { - propDefinition: [ - thoughtly, - "name", - (c) => ({ - optional: true, - }), - ], + type: "string", + label: "Name", + description: "The name of the new contact.", + optional: true, }, email: { - propDefinition: [ - thoughtly, - "email", - (c) => ({ - optional: true, - }), - ], + type: "string", + label: "Email", + description: "The email of the new contact.", + optional: true, }, countryCode: { - propDefinition: [ - thoughtly, - "countryCode", - (c) => ({ - optional: true, - }), - ], + type: "string", + label: "Country Code", + description: "The country code of the new contact's phone number.", + optional: true, }, tags: { - propDefinition: [ - thoughtly, - "tags", - (c) => ({ - optional: true, - }), - ], + type: "string[]", + label: "Tags", + description: "Tags associated with the new contact.", + optional: true, }, attributes: { - propDefinition: [ - thoughtly, - "attributes", - (c) => ({ - optional: true, - }), - ], + type: "object", + label: "Attributes", + description: "Additional attributes for the new contact.", + optional: true, }, }, async run({ $ }) { const response = await this.thoughtly.createContact({ - phoneNumber: this.phoneNumber, - name: this.name, - email: this.email, - countryCode: this.countryCode, - tags: this.tags, - attributes: this.attributes, + $, + data: { + phone_number: this.phoneNumber, + name: this.name, + email: this.email, + country_code: this.countryCode, + tags: this.tags, + attributes: this.attributes, + }, }); - $.export("$summary", `Successfully created contact with phone number ${this.phoneNumber}`); + $.export("$summary", `Successfully created contact with ID: ${response.data.id}`); return response; }, }; diff --git a/components/thoughtly/actions/trigger-call/trigger-call.mjs b/components/thoughtly/actions/trigger-call/trigger-call.mjs index 7f2061686adde..76b2e8f15154c 100644 --- a/components/thoughtly/actions/trigger-call/trigger-call.mjs +++ b/components/thoughtly/actions/trigger-call/trigger-call.mjs @@ -1,11 +1,11 @@ +import { parseObject } from "../../common/utils.mjs"; import thoughtly from "../../thoughtly.app.mjs"; -import { axios } from "@pipedream/platform"; export default { key: "thoughtly-trigger-call", name: "Trigger a Call", - description: "Triggers a call to a designated phone number.", - version: "0.0.${ts}", + description: "Triggers a call to a designated contact.", + version: "0.0.1", type: "action", props: { thoughtly, @@ -21,16 +21,21 @@ export default { "interviewId", ], }, - idMetadata: { - ...thoughtly.propDefinitions.idMetadata, + metadata: { + type: "object", + label: "Metadata", + description: "An object of metadata.", optional: true, }, }, async run({ $ }) { const response = await this.thoughtly.callContact({ - contactId: this.contactId, - interviewId: this.interviewId, - idMetadata: this.idMetadata, + $, + data: { + contact_id: this.contactId, + interview_id: this.interviewId, + metadata: parseObject(this.metadata), + }, }); $.export("$summary", `Successfully triggered a call to contact ID ${this.contactId}`); return response; diff --git a/components/thoughtly/common/utils.mjs b/components/thoughtly/common/utils.mjs new file mode 100644 index 0000000000000..dcc9cc61f6f41 --- /dev/null +++ b/components/thoughtly/common/utils.mjs @@ -0,0 +1,24 @@ +export const parseObject = (obj) => { + if (!obj) return undefined; + + if (Array.isArray(obj)) { + return obj.map((item) => { + if (typeof item === "string") { + try { + return JSON.parse(item); + } catch (e) { + return item; + } + } + return item; + }); + } + if (typeof obj === "string") { + try { + return JSON.parse(obj); + } catch (e) { + return obj; + } + } + return obj; +}; diff --git a/components/thoughtly/package.json b/components/thoughtly/package.json index 4a86d22927185..9a2a969102308 100644 --- a/components/thoughtly/package.json +++ b/components/thoughtly/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/thoughtly", - "version": "0.0.1", + "version": "0.1.0", "description": "Pipedream Thoughtly Components", "main": "thoughtly.app.mjs", "keywords": [ @@ -11,5 +11,9 @@ "author": "Pipedream (https://pipedream.com/)", "publishConfig": { "access": "public" + }, + "dependencies": { + "@pipedream/platform": "^1.6.5" } } + diff --git a/components/thoughtly/sources/new-response-instant/new-response-instant.mjs b/components/thoughtly/sources/new-response-instant/new-response-instant.mjs index 407c6fed3a2bc..dc4c9a08ed975 100644 --- a/components/thoughtly/sources/new-response-instant/new-response-instant.mjs +++ b/components/thoughtly/sources/new-response-instant/new-response-instant.mjs @@ -1,46 +1,50 @@ import thoughtly from "../../thoughtly.app.mjs"; -import { axios } from "@pipedream/platform"; +import { sampleEmit } from "./test-event.mjs"; export default { key: "thoughtly-new-response-instant", - name: "New Response Instant", + name: "New Response (Instant)", description: "Emit new event when a thoughtly gets a new response.", - version: "0.0.{{ts}}", + version: "0.0.1", type: "source", dedupe: "unique", props: { - thoughtly: { - type: "app", - app: "thoughtly", - }, - http: { - type: "$.interface.http", - customResponse: false, - }, - type: thoughtly.propDefinitions.type, - url: thoughtly.propDefinitions.url, + thoughtly, + http: "$.interface.http", db: "$.service.db", + interviewId: { + propDefinition: [ + thoughtly, + "interviewId", + ], + }, }, hooks: { async activate() { - const response = await this.thoughtly.subscribeToWebhook({ - type: this.type, - url: this.url, + await this.thoughtly.createHook({ + data: { + type: "NEW_RESPONSE", + url: this.http.endpoint, + data: this.interviewId, + }, }); - this.db.set("subscriptionId", response.data.id); }, async deactivate() { - const subscriptionId = this.db.get("subscriptionId"); - await this.thoughtly.unsubscribeFromWebhook({ - idMetadata: subscriptionId, + await this.thoughtly.deleteHook({ + data: { + type: "NEW_RESPONSE", + url: this.http.endpoint, + data: this.interviewId, + }, }); }, }, - async run(event) { - this.$emit(event.body, { - id: event.body.id || `${Date.now()}`, - summary: "New response received", - ts: Date.now(), + async run({ body }) { + this.$emit(body, { + id: body.id, + summary: `New response received with Id: ${body.id}`, + ts: Date.parse(body.created), }); }, + sampleEmit, }; diff --git a/components/thoughtly/sources/new-response-instant/test-event.mjs b/components/thoughtly/sources/new-response-instant/test-event.mjs new file mode 100644 index 0000000000000..ee83232ee5bee --- /dev/null +++ b/components/thoughtly/sources/new-response-instant/test-event.mjs @@ -0,0 +1,44 @@ +export default { + "id": "12345678-1234-1234-1234-123456789012", + "created": "2024-05-14T14:27:36.575Z", + "updated": "2024-05-14T14:27:36.704Z", + "version": 2, + "interview": { + "id": "12345678" + }, + "contact": { + "id": "12345678-1234-1234-1234-123456789012", + "created": "2024-05-14T13:26:36.017Z", + "updated": "2024-05-14T13:26:36.017Z", + "version": 1, + "team_id": "12345678-1234-1234-1234-123456789012", + "status": "ACTIVE", + "name": "Contact name", + "caller_type": null, + "phone_number": "+123456789", + "email": "contact@email.com", + "attributes": {}, + "tags": [] + }, + "team": {}, + "type": "PHONE_CALL", + "status": "NOT_STARTED", + "start_time": "2024-05-14T14:27:33.016Z", + "end_time": null, + "duration_ms": "0", + "conversation_history": [ + { + "date": "2024-05-14T14:27:36.574Z", + "text": "string", + "author": "ai", + "audio_url": "https://cdn.thoughtly.net/production-1234567890.wav", + "cumulative_duration_ms": 0 + } + ], + "ai_name": "Tessa", + "phone_number": "+123456789", + "recording_url": null, + "transcript": "Agent: agent text", + "summary_data": null, + "metadata": null +} \ No newline at end of file diff --git a/components/thoughtly/thoughtly.app.mjs b/components/thoughtly/thoughtly.app.mjs index 0ea007e5ac582..77831d8cde90a 100644 --- a/components/thoughtly/thoughtly.app.mjs +++ b/components/thoughtly/thoughtly.app.mjs @@ -4,152 +4,101 @@ export default { type: "app", app: "thoughtly", propDefinitions: { - type: { - type: "string", - label: "Type", - description: "The type of the event.", - }, - url: { - type: "string", - label: "URL", - description: "The URL to receive the webhook.", - }, contactId: { type: "string", label: "Contact ID", description: "The ID of the contact.", + async options({ page }) { + const { data: { contacts } } = await this.listContacts({ + params: { + page, + }, + }); + + return contacts.map(({ + id: value, name, phone_number, + }) => ({ + label: `${name || phone_number}`, + value, + })); + }, }, interviewId: { type: "string", label: "Interview ID", description: "The ID of the interview.", - }, - idMetadata: { - type: "string", - label: "ID Metadata", - description: "The optional ID metadata.", - optional: true, - }, - phoneNumber: { - type: "string", - label: "Phone Number", - description: "The phone number of the new contact.", - }, - name: { - type: "string", - label: "Name", - description: "The name of the new contact.", - optional: true, - }, - email: { - type: "string", - label: "Email", - description: "The email of the new contact.", - optional: true, - }, - countryCode: { - type: "string", - label: "Country Code", - description: "The country code of the new contact's phone number.", - optional: true, - }, - tags: { - type: "string[]", - label: "Tags", - description: "Tags associated with the new contact.", - optional: true, - }, - attributes: { - type: "object", - label: "Attributes", - description: "Additional attributes for the new contact.", - optional: true, + async options({ page }) { + const { data: { interviews } } = await this.listInterviews({ + params: { + page, + }, + }); + + return interviews.map(({ + id: value, title: label, + }) => ({ + label, + value, + })); + }, }, }, methods: { _baseUrl() { return "https://api.thought.ly"; }, - async _makeRequest(opts = {}) { - const { - $ = this, method = "GET", path, headers, ...otherOpts - } = opts; + _headers() { + return { + "x-api-token": `${this.$auth.api_token}`, + }; + }, + _makeRequest({ + $ = this, path, ...opts + }) { return axios($, { - ...otherOpts, - method, url: this._baseUrl() + path, - headers: { - ...headers, - Authorization: `Bearer ${this.$auth.oauth_access_token}`, - }, + headers: this._headers(), + ...opts, }); }, - async createContact({ - phoneNumber, name, email, countryCode, tags, attributes, - }) { + createContact(opts = {}) { return this._makeRequest({ method: "POST", path: "/contact/create", - data: { - phoneNumber, - name, - email, - countryCode, - tags, - attributes, - }, + ...opts, }); }, - async callContact({ - contactId, interviewId, idMetadata, - }) { + callContact(opts = {}) { return this._makeRequest({ method: "POST", path: "/contact/call", - data: { - contactId, - interviewId, - idMetadata, - }, - }); - }, - async subscribeToWebhook({ - type, url, - }) { - return this._makeRequest({ - method: "POST", - path: "/webhooks/subscribe", - data: { - type, - url, - }, + ...opts, }); }, - async unsubscribeFromWebhook({ idMetadata }) { - return this._makeRequest({ - method: "DELETE", - path: `/webhooks/unsubscribe/${idMetadata}`, - }); - }, - async getContacts() { + listContacts(opts = {}) { return this._makeRequest({ path: "/contact", + ...opts, }); }, - async deleteContact({ contactId }) { + listInterviews(opts = {}) { return this._makeRequest({ - method: "DELETE", - path: `/contact/${contactId}`, + path: "/interview", + ...opts, }); }, - async getInterviews() { + createHook(opts = {}) { return this._makeRequest({ - path: "/interview", + method: "POST", + path: "/webhooks/subscribe", + ...opts, }); }, - async getInterviewResponses({ interviewId }) { + deleteHook(opts = {}) { return this._makeRequest({ - path: `/interview/${interviewId}/responses`, + method: "DELETE", + path: "/webhooks/unsubscribe", + ...opts, }); }, }, From f412abf0a6c6bb1a87952f3f8c5b639e7abf7728 Mon Sep 17 00:00:00 2001 From: Luan Cazarine Date: Tue, 14 May 2024 11:34:41 -0300 Subject: [PATCH 3/5] pnpm update --- pnpm-lock.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e33968d60512f..aaf0a4b4795d0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8668,7 +8668,10 @@ importers: '@pipedream/platform': 1.6.0 components/thoughtly: - specifiers: {} + specifiers: + '@pipedream/platform': ^1.6.5 + dependencies: + '@pipedream/platform': 1.6.5 components/threads: specifiers: From a3d2f82f3dce44faf6eafda3c2e2cb312e6b47fa Mon Sep 17 00:00:00 2001 From: Luan Cazarine Date: Tue, 14 May 2024 13:09:31 -0300 Subject: [PATCH 4/5] fix import --- .../sources/new-response-instant/new-response-instant.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/thoughtly/sources/new-response-instant/new-response-instant.mjs b/components/thoughtly/sources/new-response-instant/new-response-instant.mjs index dc4c9a08ed975..d384baf29957b 100644 --- a/components/thoughtly/sources/new-response-instant/new-response-instant.mjs +++ b/components/thoughtly/sources/new-response-instant/new-response-instant.mjs @@ -1,5 +1,5 @@ import thoughtly from "../../thoughtly.app.mjs"; -import { sampleEmit } from "./test-event.mjs"; +import sampleEmit from "./test-event.mjs"; export default { key: "thoughtly-new-response-instant", From 912e3e4b57085d74fd2c84dfb375be93975b03d2 Mon Sep 17 00:00:00 2001 From: michelle0927 Date: Wed, 15 May 2024 11:47:53 -0400 Subject: [PATCH 5/5] add doc links --- components/thoughtly/actions/create-contact/create-contact.mjs | 2 +- components/thoughtly/actions/trigger-call/trigger-call.mjs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/thoughtly/actions/create-contact/create-contact.mjs b/components/thoughtly/actions/create-contact/create-contact.mjs index caa14b434a03c..94c48ccc79b62 100644 --- a/components/thoughtly/actions/create-contact/create-contact.mjs +++ b/components/thoughtly/actions/create-contact/create-contact.mjs @@ -3,7 +3,7 @@ import thoughtly from "../../thoughtly.app.mjs"; export default { key: "thoughtly-create-contact", name: "Create Contact", - description: "Generates a new contact within your Thoughtly team.", + description: "Generates a new contact within your Thoughtly team. [See the documentation](https://api.thought.ly/docs/#/contact/post_contact_create)", version: "0.0.1", type: "action", props: { diff --git a/components/thoughtly/actions/trigger-call/trigger-call.mjs b/components/thoughtly/actions/trigger-call/trigger-call.mjs index 76b2e8f15154c..65c718ccd7637 100644 --- a/components/thoughtly/actions/trigger-call/trigger-call.mjs +++ b/components/thoughtly/actions/trigger-call/trigger-call.mjs @@ -4,7 +4,7 @@ import thoughtly from "../../thoughtly.app.mjs"; export default { key: "thoughtly-trigger-call", name: "Trigger a Call", - description: "Triggers a call to a designated contact.", + description: "Triggers a call to a designated contact. [See the documentation](https://api.thought.ly/docs/#/contact/post_contact_call)", version: "0.0.1", type: "action", props: {