Files
automatisch/packages/backend/src/apps/twilio/triggers/receive-sms/index.ts
2023-06-05 23:00:35 +02:00

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
);
},
});