본문으로 건너뛰기

SMS

회사 Twilio 계정으로 구독자에게 보내는 문자 메시지로, STOP과 방해 금지 시간을 지킵니다.

Connecting Twilio

SMS sits under Settings. Sending connects the company’s Twilio account once, for every project: its account SID, its auth token, sealed when saved and shown afterwards by its last characters, and the messaging service that holds the sender numbers and their registration. Twilio sends and bills the texts. Set the address shown under Incoming messages as the messaging service’s incoming messages webhook so replies reach Prodantix; delivery reports come back on their own. Both webhooks are believed only when Twilio’s signature matches the account’s auth token. Replace enters a new account and Disconnect stops every text until one is connected again.

Replies, quiet hours and opt-outs

STOP, START and HELP are handled automatically: a number that replies STOP gets no more texts from any project of the company until it replies START, and the HELP answer is set on the Twilio messaging service. No text is sent between 21:00 and 08:00 in the person’s own time, and one due then waits until 08:00; this cannot be widened. Numbers that opted out lists every number that replied STOP, searchable, and lets a manager let one through again only after confirming the person asked for it.

Writing a text campaign

Edit writes the text with its length as Twilio counts it: its characters, the messages it takes (160 plain letters in one, 153 a part when longer, or 70 and 67 once a special character makes it UCS-2) and its encoding, beside the text as the phone shows it. A marketing text says how to stop, such as Reply STOP to stop, and one that does not is refused. Write {{ person.first_name | fallback: "there" }} to greet each person by name. A push or text campaign is made from New campaign on the Campaigns grid, which lists every channel together, and opens on its own page. Recipients names the cohorts to send to and to leave out and the subscription type, which must be a marketing type of the channel; Settings sends it as soon as it is scheduled, at a set time, or at a wall-clock time in each person’s own time zone (send time optimisation reads email opens, so it is the email’s alone). When sending starts the list is fixed: only marketing contacts subscribed to the type and under the project’s weekly frequency cap for the channel are reached, and every person left out is counted by reason. Approval, Schedule, Unschedule, Pause, Resume and Cancel work as they do for an email, under the same prodantix.marketing_emails.* permissions, and sending stops while the company is over its messages allowance. Send test sends the saved message, led by [Test] and personalised as them, to one person of the project you name by their id, who must be subscribed to the type; the quiet hours hold for a test too, and a message takes ten tests a clock hour and each member thirty across every campaign. A test reaches a real person, so it needs the permission to send campaigns, and while the company asks for approval, a message not yet approved is tested only by someone who may approve it. A text goes to the person’s phone property in international format, never to a number that replied STOP. Each text writes $sms_sent on the person’s timeline, then $sms_delivered or $sms_failed as Twilio reports it. Report shows sent, delivered, failed and left out, from Twilio’s delivery reports; the phone lists text campaigns with the rest, opens their report and approves or sends one back.

Permissions, API and agents

Reading the connection and opt-outs needs prodantix.sms.read and changing them prodantix.sms.manage. The connection is served over REST at /v1/company/sms/connection, opt-outs under /v1/projects/{projectId}/sms/opt-outs and campaigns under /v1/projects/{projectId}/channel-messages, over GraphQL (smsConnection, smsOptOuts, smsMeasure, connectSms, disconnectSms, removeSmsOptOut, channelMessages, channelMessage, channelMessageReadiness, channelMessageReport, createChannelMessage, saveChannelMessage, requestChannelMessageApproval, approveChannelMessage, rejectChannelMessage, sendChannelMessageTest, scheduleChannelMessage, unscheduleChannelMessage, pauseChannelMessage, resumeChannelMessage, cancelChannelMessage, archiveChannelMessage, channelMessageChanges), as channelMessageChange frames on the company’s Socket.IO room, and to agents through the MCP tools prodantix.sms.connection, prodantix.sms.disconnect, prodantix.sms.opt_outs, prodantix.sms.remove_opt_out, prodantix.sms.measure, prodantix.channel_messages.list, prodantix.channel_messages.get, prodantix.channel_messages.readiness, prodantix.channel_messages.report, prodantix.channel_messages.create, prodantix.channel_messages.save, prodantix.channel_messages.request_approval, prodantix.channel_messages.approve, prodantix.channel_messages.reject, prodantix.channel_messages.send_test, prodantix.channel_messages.schedule, prodantix.channel_messages.unschedule, prodantix.channel_messages.pause, prodantix.channel_messages.resume, prodantix.channel_messages.cancel, prodantix.channel_messages.archive. Connecting an account is left out of MCP: the auth token is entered by a member, never passed through an agent. Twilio posts to /v1/twilio/inbound and /v1/twilio/status.