76 lines
1.8 KiB
TypeScript
76 lines
1.8 KiB
TypeScript
import { URLSearchParams } from 'node:url';
|
|
import isEmpty from 'lodash/isEmpty';
|
|
import defineTrigger from '../../../../helpers/define-trigger';
|
|
import fetchMessages from './fetch-messages';
|
|
|
|
export default defineTrigger({
|
|
name: 'Receive SMS',
|
|
key: 'receiveSms',
|
|
type: 'webhook',
|
|
description: 'Triggers when a new SMS is received.',
|
|
arguments: [
|
|
{
|
|
label: 'To Number',
|
|
key: 'phoneNumberSid',
|
|
type: 'dropdown' as const,
|
|
required: true,
|
|
description:
|
|
'The number to receive the SMS on. It should be a Twilio number.',
|
|
variables: false,
|
|
source: {
|
|
type: 'query',
|
|
name: 'getDynamicData',
|
|
arguments: [
|
|
{
|
|
name: 'key',
|
|
value: 'listIncomingPhoneNumbers',
|
|
},
|
|
{
|
|
name: 'parameters.valueType',
|
|
value: 'sid',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
],
|
|
|
|
async testRun($) {
|
|
await fetchMessages($);
|
|
|
|
const lastExecutionStep = await $.getLastExecutionStep();
|
|
|
|
if (!isEmpty(lastExecutionStep?.dataOut)) {
|
|
$.pushTriggerItem({
|
|
raw: lastExecutionStep.dataOut,
|
|
meta: {
|
|
internalId: '',
|
|
},
|
|
});
|
|
}
|
|
},
|
|
|
|
async registerHook($) {
|
|
const phoneNumberSid = $.step.parameters.phoneNumberSid as string;
|
|
const payload = new URLSearchParams({
|
|
SmsUrl: $.webhookUrl,
|
|
}).toString();
|
|
|
|
await $.http.post(
|
|
`/2010-04-01/Accounts/${$.auth.data.accountSid}/IncomingPhoneNumbers/${phoneNumberSid}.json`,
|
|
payload
|
|
);
|
|
},
|
|
|
|
async unregisterHook($) {
|
|
const phoneNumberSid = $.step.parameters.phoneNumberSid as string;
|
|
const payload = new URLSearchParams({
|
|
SmsUrl: '',
|
|
}).toString();
|
|
|
|
await $.http.post(
|
|
`/2010-04-01/Accounts/${$.auth.data.accountSid}/IncomingPhoneNumbers/${phoneNumberSid}.json`,
|
|
payload
|
|
);
|
|
},
|
|
});
|