Files
automatisch/packages/backend/src/apps/twilio/triggers/receive-sms/index.js
2025-01-13 16:11:29 +00:00

88 lines
2.0 KiB
JavaScript

import { URLSearchParams } from 'node:url';
import Crypto from 'crypto';
import isEmpty from 'lodash/isEmpty.js';
import defineTrigger from '../../../../helpers/define-trigger.js';
import fetchMessages from './fetch-messages.js';
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',
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 run($) {
const dataItem = {
raw: $.request.body,
meta: {
internalId: Crypto.randomUUID(),
},
};
$.pushTriggerItem(dataItem);
},
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;
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;
const payload = new URLSearchParams({
SmsUrl: '',
}).toString();
await $.http.post(
`/2010-04-01/Accounts/${$.auth.data.accountSid}/IncomingPhoneNumbers/${phoneNumberSid}.json`,
payload
);
},
});