@bitquirky/piece-goto-connect
Version:
GoTo Connect integration for ActivePieces
112 lines (104 loc) • 4.7 kB
text/typescript
import { createAction, Property, OAuth2PropertyValue, DropdownState } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { gotoConnectAuth } from '../auth';
export const sendSms = createAction({
auth: gotoConnectAuth,
name: 'send_sms',
displayName: 'Send SMS',
description: 'Send an SMS message using GoTo Connect',
props: {
from: Property.Dropdown({
displayName: 'From',
description: 'Phone number to send SMS from',
required: true,
refreshers: [],
options: async (props): Promise<DropdownState<string>> => {
// Debug what we receive
/* Debug logging
const debugInfo = {
auth_type: typeof props.auth,
auth_keys: props.auth ? Object.keys(props.auth) : 'auth is undefined',
props_keys: Object.keys(props)
};
console.debug('[GoToConnect] Dropdown props:', debugInfo);
*/
// First get the account info
try {
const token = (props.auth as OAuth2PropertyValue).access_token;
const accountResponse = await httpClient.sendRequest({
method: HttpMethod.GET,
url: 'https://api.getgo.com/admin/rest/v1/me',
headers: {
'Authorization': `Bearer ${token}`,
'Accept': 'application/json'
}
});
// console.debug('[GoToConnect] Account Response:', accountResponse.body);
if (!accountResponse.body.accountKey) {
console.error('[GoToConnect] No accountKey in response'); // Removed response body from error log
return {
disabled: false,
options: [{
label: 'Error: Could not get account key',
value: 'error_no_account_key'
}]
};
}
// Then get the phone numbers
const response = await httpClient.sendRequest({
method: HttpMethod.GET,
url: `https://api.goto.com/voice-admin/v1/phone-numbers?pageSize=100&accountKey=${accountResponse.body.accountKey}`,
headers: {
'Authorization': `Bearer ${token}`,
'Accept': 'application/json'
}
});
// console.debug('[GoToConnect] API Response:', response.body);
return {
disabled: false,
options: response.body.items.map((number: any) => ({
label: number.number,
value: number.number
}))
};
} catch (error: unknown) {
console.error('[GoToConnect] Error:', error instanceof Error ? error.message : 'Unknown error'); // Simplified error logging
return {
disabled: false,
options: [{
label: `Error: ${error instanceof Error ? error.message : 'Failed to fetch phone numbers'}`,
value: 'error'
}]
};
}
}
}),
to: Property.ShortText({
displayName: 'To',
description: 'Phone number to send SMS to',
required: true,
}),
message: Property.LongText({
displayName: 'Message',
description: 'Message content',
required: true,
}),
},
async run(context) {
const token = (context.auth as OAuth2PropertyValue).access_token;
return await httpClient.sendRequest({
method: HttpMethod.POST,
url: 'https://api.jive.com/messaging/v1/messages',
headers: {
'Authorization': `Bearer ${token}`,
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: {
ownerPhoneNumber: context.propsValue.from,
contactPhoneNumbers: context.propsValue.to,
body: context.propsValue.message
}
});
}
});