@rubytech/taskmaster 1.11.1 → 1.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,7 @@
6
6
  <title>Taskmaster Control</title>
7
7
  <meta name="color-scheme" content="dark light" />
8
8
  <link rel="icon" type="image/png" href="./favicon.png" />
9
- <script type="module" crossorigin src="./assets/index-YAjVyXqJ.js"></script>
9
+ <script type="module" crossorigin src="./assets/index-s8s_YKvR.js"></script>
10
10
  <link rel="stylesheet" crossorigin href="./assets/index-CpaEIgQy.css">
11
11
  </head>
12
12
  <body>
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * Deliver OTP verification codes via WhatsApp (primary), SMS (fallback), or email (Brevo).
3
+ * Both SMS and email use the same Brevo API key — SMS requires prepaid credits.
3
4
  */
4
5
  import { getActiveWebListener } from "../../web/active-listener.js";
5
6
  import { sendMessageWhatsApp } from "../../web/outbound.js";
6
- import { resolveSmsCredentials, sendSms } from "./deliver-sms.js";
7
+ import { hasSmsApiKey, resolveSmsCredentials, sendSms } from "./deliver-sms.js";
7
8
  import { hasEmailApiKey, resolveEmailCredentials, sendEmail } from "./deliver-email.js";
8
9
  /** Detect whether an identifier is an email address. */
9
10
  function isEmail(identifier) {
@@ -17,7 +18,7 @@ export function detectOtpChannels(whatsappAccountId) {
17
18
  const channels = [];
18
19
  if (getActiveWebListener(whatsappAccountId))
19
20
  channels.push("whatsapp");
20
- if (resolveSmsCredentials())
21
+ if (hasSmsApiKey())
21
22
  channels.push("sms");
22
23
  if (hasEmailApiKey())
23
24
  channels.push("email");
@@ -26,12 +27,13 @@ export function detectOtpChannels(whatsappAccountId) {
26
27
  /**
27
28
  * Deliver a verification code to the given identifier.
28
29
  *
29
- * Email identifiers (containing @) are sent via Brevo.
30
+ * Email identifiers (containing @) are sent via Brevo email API.
30
31
  * Phone identifiers use the existing WhatsApp -> SMS fallback chain.
32
+ * Both SMS and email share the same Brevo API key.
31
33
  */
32
34
  export async function deliverOtp(identifier, code, accountId) {
33
35
  const message = `Your verification code is: ${code}`;
34
- // Email identifiers — deliver via Brevo only
36
+ // Email identifiers — deliver via Brevo email API
35
37
  if (isEmail(identifier)) {
36
38
  const emailCreds = await resolveEmailCredentials();
37
39
  if (!emailCreds) {
@@ -42,7 +44,7 @@ export async function deliverOtp(identifier, code, accountId) {
42
44
  }
43
45
  // Phone identifiers — WhatsApp first, SMS fallback
44
46
  const hasWhatsApp = !!getActiveWebListener(accountId);
45
- const smsCreds = resolveSmsCredentials();
47
+ const smsCreds = await resolveSmsCredentials();
46
48
  if (hasWhatsApp) {
47
49
  try {
48
50
  await sendMessageWhatsApp(identifier, message, { verbose: false, accountId });
@@ -59,5 +61,5 @@ export async function deliverOtp(identifier, code, accountId) {
59
61
  if (hasWhatsApp) {
60
62
  throw new Error("Failed to send verification code via WhatsApp and SMS is not configured.");
61
63
  }
62
- throw new Error("No verification channel available. Connect WhatsApp or configure SMS credentials.");
64
+ throw new Error("No verification channel available. Connect WhatsApp or add a Brevo API key with SMS credits.");
63
65
  }
@@ -1,44 +1,81 @@
1
1
  /**
2
- * Lightweight Twilio SMS sender — single HTTP POST, no SDK dependency.
2
+ * Lightweight Brevo SMS sender — single HTTP POST, no SDK dependency.
3
+ *
4
+ * Uses the same Brevo API key as email delivery. The sender name is
5
+ * auto-detected from the verified email sender's display name.
6
+ * SMS requires prepaid credits in the Brevo account.
3
7
  */
4
8
  import { loadConfig } from "../../config/config.js";
9
+ /** Cached sender name — avoids hitting the API on every SMS. */
10
+ let cachedSenderName = null;
5
11
  /**
6
- * Read SMS credentials from `publicChat.sms` in config.
7
- * Returns null if any required field is missing.
12
+ * Query Brevo for the first active sender's display name.
13
+ * Returns the sender name or "Verify" as a safe fallback.
8
14
  */
9
- export function resolveSmsCredentials() {
15
+ async function fetchSenderName(apiKey) {
16
+ try {
17
+ const res = await fetch("https://api.brevo.com/v3/senders", {
18
+ headers: { "api-key": apiKey, Accept: "application/json" },
19
+ });
20
+ if (!res.ok)
21
+ return "Verify";
22
+ const json = (await res.json());
23
+ const active = json.senders?.find((s) => s.active && s.name);
24
+ return active?.name ?? json.senders?.[0]?.name ?? "Verify";
25
+ }
26
+ catch {
27
+ return "Verify";
28
+ }
29
+ }
30
+ /**
31
+ * Sync check: is a Brevo API key configured?
32
+ * Used by detectOtpChannels() for capability reporting.
33
+ */
34
+ export function hasSmsApiKey() {
10
35
  const cfg = loadConfig();
11
- const sms = cfg.publicChat?.sms;
12
- if (!sms?.accountSid || !sms.authToken || !sms.fromNumber)
36
+ return !!cfg.publicChat?.email?.apiKey;
37
+ }
38
+ /**
39
+ * Resolve SMS credentials from config.
40
+ *
41
+ * Uses the same Brevo API key as email. The sender name is resolved
42
+ * from the cached value or fetched from the Brevo senders API.
43
+ * Returns null if no API key is configured.
44
+ */
45
+ export async function resolveSmsCredentials() {
46
+ const cfg = loadConfig();
47
+ const apiKey = cfg.publicChat?.email?.apiKey;
48
+ if (!apiKey)
13
49
  return null;
14
- return {
15
- accountSid: sms.accountSid,
16
- authToken: sms.authToken,
17
- fromNumber: sms.fromNumber,
18
- };
50
+ if (cachedSenderName && cachedSenderName.apiKey === apiKey) {
51
+ return { apiKey, sender: cachedSenderName.name };
52
+ }
53
+ const name = await fetchSenderName(apiKey);
54
+ cachedSenderName = { apiKey, name };
55
+ return { apiKey, sender: name };
19
56
  }
20
57
  /**
21
- * Send an SMS via the Twilio REST API.
58
+ * Send an SMS via the Brevo transactional SMS API.
22
59
  */
23
60
  export async function sendSms(to, body, creds) {
24
- const url = `https://api.twilio.com/2010-04-01/Accounts/${encodeURIComponent(creds.accountSid)}/Messages.json`;
25
- const auth = Buffer.from(`${creds.accountSid}:${creds.authToken}`).toString("base64");
26
- const params = new URLSearchParams();
27
- params.set("To", to);
28
- params.set("From", creds.fromNumber);
29
- params.set("Body", body);
30
- const res = await fetch(url, {
61
+ const res = await fetch("https://api.brevo.com/v3/transactionalSMS/sms", {
31
62
  method: "POST",
32
63
  headers: {
33
- Authorization: `Basic ${auth}`,
34
- "Content-Type": "application/x-www-form-urlencoded",
64
+ "api-key": creds.apiKey,
65
+ "Content-Type": "application/json",
66
+ Accept: "application/json",
35
67
  },
36
- body: params.toString(),
68
+ body: JSON.stringify({
69
+ type: "transactional",
70
+ sender: creds.sender,
71
+ recipient: to,
72
+ content: body,
73
+ }),
37
74
  });
38
75
  if (!res.ok) {
39
76
  const text = await res.text().catch(() => "");
40
- throw new Error(`Twilio SMS failed (${res.status}): ${text}`);
77
+ throw new Error(`Brevo SMS failed (${res.status}): ${text}`);
41
78
  }
42
79
  const json = (await res.json());
43
- return { sid: json.sid ?? "unknown" };
80
+ return { id: String(json.messageId ?? "unknown") };
44
81
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/taskmaster",
3
- "version": "1.11.1",
3
+ "version": "1.11.2",
4
4
  "description": "AI-powered business assistant for small businesses",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -1,29 +1,30 @@
1
1
  ---
2
2
  name: brevo
3
- description: Guide users through getting a free Brevo API key for email OTP verification.
3
+ description: Guide users through getting a free Brevo API key for email and SMS verification.
4
4
  metadata: {"taskmaster":{"emoji":"🔑"}}
5
5
  ---
6
6
 
7
7
  # Brevo Setup
8
8
 
9
- Walks users through creating a Brevo account, verifying a sender email address, and obtaining an API key. Brevo uses single sender verification — the user verifies one email address by entering a 6-digit code sent to it. No DNS records or domain ownership required.
9
+ Walks users through creating a Brevo account, verifying a sender email address, and obtaining an API key. One API key powers both email OTP and SMS OTP — no separate provider needed. Brevo uses single sender verification — the user verifies one email address by entering a 6-digit code sent to it. No DNS records or domain ownership required.
10
10
 
11
11
  ## When to activate
12
12
 
13
- - User enables Email OTP or Visitor Chooses mode for Public Chat and email is not configured
14
- - User asks about email verification setup or Brevo
15
- - BOOTSTRAP detects missing Brevo API key when email verification is enabled
13
+ - User enables Email OTP, Phone OTP, or Visitor Chooses mode for Public Chat and Brevo is not configured
14
+ - User asks about email or SMS verification setup, or about Brevo
15
+ - BOOTSTRAP detects missing Brevo API key when email or SMS verification is enabled
16
+ - User asks about SMS fallback for phone verification
16
17
 
17
18
  ## What it unlocks
18
19
 
19
- - Email OTP verification for public chat visitors
20
- - Verification codes delivered via email to any address
21
- - Free tier: 300 emails per day, no credit card required
20
+ - **Email OTP** verification codes delivered via email to any address. Free tier: 300 emails per day, no credit card required.
21
+ - **SMS OTP** — verification codes delivered via text message when WhatsApp is unavailable. Requires prepaid SMS credits in Brevo (purchased separately). Same API key as email no additional configuration.
22
22
 
23
23
  ## References
24
24
 
25
25
  | Task | When to use | Reference |
26
26
  |------|-------------|-----------|
27
27
  | Guided setup | User wants help getting the key | `references/browser-setup.md` |
28
+ | SMS credits | User wants to enable SMS fallback | `references/sms-credits.md` |
28
29
 
29
30
  Load the reference and follow its instructions.
@@ -1,6 +1,6 @@
1
- # Brevo Email — Guided Setup
1
+ # Brevo — Guided Setup
2
2
 
3
- Walk the user through getting Brevo credentials. Brevo uses single sender verification — the user verifies an email address by entering a 6-digit code sent to it. No DNS records required. Guide with clear instructions.
3
+ Walk the user through getting Brevo credentials. One API key powers both email OTP and SMS OTP. Brevo uses single sender verification — the user verifies an email address by entering a 6-digit code sent to it. No DNS records required. Guide with clear instructions.
4
4
 
5
5
  **Important:** Brevo is primarily a marketing email platform. The signup flow and dashboard are oriented around marketing campaigns, contacts, and newsletters. The user does NOT need any of that. Guide them directly to the two things they need: a verified sender and an API key. Both are in the **Settings** page — accessed via the **gear icon** in the top-right toolbar. On the Settings page, both options are in the left sidebar under **Organization settings**.
6
6
 
@@ -119,6 +119,14 @@ The key is applied immediately — no restart needed. Confirm to the user:
119
119
 
120
120
  That's it. No further configuration is needed in Taskmaster — the verified sender address is detected automatically from Brevo.
121
121
 
122
+ ## SMS fallback (optional)
123
+
124
+ If the user wants SMS verification codes (for when WhatsApp is unavailable), they can enable it with the same Brevo account. No additional API key or configuration is needed — just SMS credits.
125
+
126
+ > "Your Brevo API key also works for SMS — same key, no extra setup. You just need SMS credits in your Brevo account. I can walk you through that if you'd like."
127
+
128
+ If the user wants to proceed, load `references/sms-credits.md` and follow it.
129
+
122
130
  ---
123
131
 
124
132
  ## If the user already has a Brevo account
@@ -158,4 +166,6 @@ If yes, skip to Step 4. If they're unsure:
158
166
  | "Do I need to set up DNS records?" | No. Single sender verification works without DNS. Brevo will recommend domain authentication for better deliverability, but it's not required. |
159
167
  | "Can I change the sender address later?" | Yes — add and verify a new sender in Brevo. Taskmaster auto-detects the verified sender, so no changes needed on this end. |
160
168
  | "Where does Taskmaster get the sender address?" | Automatically from the Brevo API. When you verify a sender in Brevo, Taskmaster detects it — you don't need to enter it anywhere else. |
161
- | "What about all the marketing stuff?" | Ignore it. Brevo is a full marketing platform, but we only use its transactional email API. You don't need to set up contacts, campaigns, or templates. |
169
+ | "What about all the marketing stuff?" | Ignore it. Brevo is a full marketing platform, but we only use its transactional email and SMS APIs. You don't need to set up contacts, campaigns, or templates. |
170
+ | "Can Brevo also send SMS?" | Yes — the same API key works for both email and SMS. You just need to purchase SMS credits in your Brevo account. See the SMS credits reference. |
171
+ | "Do I need a separate provider for SMS?" | No. Brevo handles both email and SMS verification with the same API key. No Twilio or other SMS provider needed. |
@@ -0,0 +1,68 @@
1
+ # Brevo SMS Credits — Guided Setup
2
+
3
+ Walk the user through purchasing SMS credits in Brevo. SMS verification uses the same Brevo API key as email — no additional configuration in Taskmaster. The user just needs credits in their Brevo account.
4
+
5
+ **Important:** SMS credits are prepaid and never expire. Pricing varies by country (see below). The SMS sender name is auto-detected from the user's verified email sender in Brevo — no manual configuration needed.
6
+
7
+ ---
8
+
9
+ ## Prerequisites
10
+
11
+ - User already has a Brevo account with an API key configured in Taskmaster (if not, use `references/browser-setup.md` first)
12
+ - Chat channel for sending instructions
13
+
14
+ ---
15
+
16
+ ## Step 1: Explain
17
+
18
+ > "Your Brevo API key already works for SMS — no extra setup needed on our end. You just need SMS credits in your Brevo account. Credits are prepaid and never expire, so you only pay for what you need.
19
+ >
20
+ > Let me walk you through purchasing credits. It takes about 2 minutes."
21
+
22
+ ## Step 2: Purchase SMS credits
23
+
24
+ > "1. Go to **brevo.com** and log in
25
+ > 2. In the **top-right toolbar**, click the **gear icon** (⚙️) to open **Settings**
26
+ > 3. In the left sidebar, look for **Your plan** or **Billing** under your account settings
27
+ > 4. Find the **SMS credits** section and click **Buy credits**
28
+ > 5. Choose how many credits you need:
29
+ > - **100 credits** is a good starting amount for verification codes
30
+ > - Each SMS uses 1 credit
31
+ > - Credits never expire
32
+ > 6. Complete the purchase
33
+ >
34
+ > Let me know when that's done."
35
+
36
+ Wait for the user to confirm.
37
+
38
+ ## Step 3: Confirm
39
+
40
+ > "SMS verification is now enabled. When a visitor verifies their phone number and WhatsApp is unavailable, the verification code will be sent by text message instead. No restart or configuration change needed — it works automatically with your existing Brevo API key."
41
+
42
+ ---
43
+
44
+ ## Pricing reference
45
+
46
+ Approximate SMS credit costs (varies by country):
47
+
48
+ | Region | Cost per 100 credits |
49
+ |--------|---------------------|
50
+ | US / Canada | ~$1.09 |
51
+ | UK | ~$3.45 |
52
+ | Australia | ~$5.50 |
53
+ | EU (varies) | ~$3.00–$7.00 |
54
+
55
+ Exact pricing is shown during purchase in the Brevo dashboard.
56
+
57
+ ---
58
+
59
+ ## Common questions
60
+
61
+ | Question | Answer |
62
+ |----------|--------|
63
+ | "Do credits expire?" | No — prepaid SMS credits never expire. |
64
+ | "How many credits per SMS?" | One credit per message. Each verification code is one SMS. |
65
+ | "What phone number do SMS come from?" | Brevo assigns a sender automatically based on the destination country. You don't need to buy or manage a phone number. |
66
+ | "What name appears on the SMS?" | The sender name from your verified email sender in Brevo (e.g. your business name). Taskmaster detects this automatically. |
67
+ | "Do I need to change anything in Taskmaster?" | No. If your Brevo API key is already configured, SMS works automatically when you have credits. |
68
+ | "Can I use SMS without email?" | The Brevo API key is configured through the email setup, but once configured it serves both email and SMS. You need at least one verified sender. |
@@ -0,0 +1,68 @@
1
+ ---
2
+ name: system-admin
3
+ description: "System administration through conversation. Monitors system health, manages channels, branding, public chat, skills, and usage — replacing the need to navigate the control panel UI."
4
+ metadata: {"taskmaster":{"always":true,"emoji":"⚙️","skillKey":"system-admin"}}
5
+ ---
6
+
7
+ # System Administration
8
+
9
+ You are the system administrator — the single point of contact for everything the business owner would otherwise need the control panel for. Your goal is to make the control panel unnecessary for day-to-day operations.
10
+
11
+ ## Philosophy
12
+
13
+ The user chose Taskmaster because they want ONE conversation, not a dozen apps. Every time they'd have to leave this chat to check a dashboard, toggle a setting, or review logs — that's a failure. Handle it here.
14
+
15
+ ## Available Tools
16
+
17
+ You have seven system administration tools. Use them proactively and reactively.
18
+
19
+ ### Monitoring (read-only, always safe)
20
+
21
+ - **system_status** — System health, auth status, license, channel connections, software version. Use `overview` for a combined snapshot when the user asks "how's the system?" or at the start of any admin session.
22
+ - **usage_report** — Token counts and cost data. Use `summary` for token breakdown, `cost` for spend over time. Offer monthly cost reports proactively.
23
+ - **logs_read** — System logs and session transcripts. Use `system` for gateway errors, `sessions` for conversation traces. Essential for debugging any "it's not working" report.
24
+
25
+ ### Configuration (read + write, check before acting)
26
+
27
+ - **channel_settings** — WhatsApp/iMessage connection status and settings. Change the AI model, thinking level, DM policy, or group chat policy per account.
28
+ - **brand_settings** — Accent color, background color, logo status. Set colors via hex values. Logo upload requires the UI (binary data).
29
+ - **public_chat_settings** — Enable/disable the public chat widget, manage the greeting, set access mode (open/verified/visitor-chooses).
30
+ - **skill_manage** — List, create, update, delete, or install skills. Preloaded skills cannot be deleted.
31
+
32
+ ### Already available (from other tools)
33
+
34
+ - **api_keys** — Manage provider API keys (Google, Tavily, OpenAI, etc.)
35
+ - **software_update** — Check for updates, install them, restart the gateway
36
+ - **cron** — Schedule recurring events and reminders
37
+ - **gateway** — Restart the gateway, apply config changes
38
+
39
+ ## When to Use These Tools
40
+
41
+ ### Reactively — the user asks
42
+
43
+ | User says | You do |
44
+ |-----------|--------|
45
+ | "How's the system?" / "Is everything working?" | `system_status` overview |
46
+ | "What's my usage?" / "How much am I spending?" | `usage_report` cost + summary |
47
+ | "Is WhatsApp connected?" | `channel_settings` status |
48
+ | "Change the color to blue" | `brand_settings` set_colors |
49
+ | "Enable the public chat" | `public_chat_settings` enable |
50
+ | "What model am I using?" | `channel_settings` status |
51
+ | "Switch to a cheaper model" | `channel_settings` set_model |
52
+ | "Show me the logs" | `logs_read` system |
53
+ | "Something isn't working" | `logs_read` system + `system_status` overview |
54
+ | "Is there an update?" | `software_update` check |
55
+
56
+ ### Proactively — you notice something
57
+
58
+ - After a restart or reconnection, check `system_status` and report any issues.
59
+ - When discussing costs, offer to pull `usage_report` data.
60
+ - If a user reports a message not going through, check `channel_settings` status and `logs_read`.
61
+ - When generating a greeting for a new public chat setup, use `public_chat_settings` regenerate_greeting.
62
+
63
+ ## Principles
64
+
65
+ - **Explain, don't just execute.** When changing a setting, tell the user what you're doing and what it means. "I've switched your WhatsApp to Sonnet — it's faster and cheaper than Opus, while still handling most conversations well."
66
+ - **Confirm destructive actions.** Before disabling public chat, deleting a skill, or changing access modes — confirm with the user. Read operations never need confirmation.
67
+ - **Surface the important, hide the noise.** The user doesn't need to see raw JSON. Summarize system status in plain language. "Everything's running smoothly — WhatsApp connected, Claude authenticated, license active. You've used about $4.20 this month."
68
+ - **Know your limits.** Some things still need the UI: scanning WhatsApp QR codes, uploading logos, managing WiFi, Tailscale setup, PIN changes, OAuth re-authentication. When these come up, direct the user to the specific page: "Open the Setup page and scroll to WhatsApp to scan a new QR code."
@@ -1,29 +1,32 @@
1
1
  ---
2
2
  name: twilio
3
- description: Guide users through getting Twilio SMS credentials for phone verification fallback.
4
- metadata: {"taskmaster":{"emoji":"🔑"}}
3
+ description: Guide users through getting Twilio credentials for the voice-call extension.
4
+ metadata: {"taskmaster":{"emoji":"📞"}}
5
5
  ---
6
6
 
7
- # Twilio Setup
7
+ # Twilio Setup (Voice Calling)
8
8
 
9
- Walks users through creating a Twilio account and obtaining SMS credentials (Account SID, Auth Token, and a phone number). Unlike Tavily or Google AI, Twilio signup requires identity verification guide the user with clear instructions rather than browser automation.
9
+ Walks users through creating a Twilio account and obtaining credentials for the voice-call extension. Twilio is used exclusively for voice calling SMS verification uses Brevo instead.
10
10
 
11
11
  ## When to activate
12
12
 
13
- - User enables Phone OTP or Visitor Chooses mode for Public Chat and SMS fallback is not configured
14
- - User asks about SMS verification or Twilio setup
15
- - User gets "No verification channel available" error and WhatsApp is not connected
13
+ - User wants to set up the voice-call extension with Twilio as the telephony provider
14
+ - User asks about Twilio setup for voice calling
15
+ - BOOTSTRAP detects missing Twilio credentials when voice-call extension is configured with Twilio provider
16
+
17
+ ## Important
18
+
19
+ Twilio is NOT used for SMS verification. If the user asks about SMS for public chat verification, direct them to the **Brevo** skill instead — Brevo handles both email and SMS OTP with one API key.
16
20
 
17
21
  ## What it unlocks
18
22
 
19
- - SMS fallback for phone verification when WhatsApp is unavailable
20
- - Verification codes delivered via text message to any mobile phone
21
- - Free trial includes credit for testing; pay-as-you-go after that
23
+ - Inbound and outbound voice calls via the voice-call extension
24
+ - Twilio as a telephony provider alongside Plivo and Telnyx
22
25
 
23
26
  ## References
24
27
 
25
28
  | Task | When to use | Reference |
26
29
  |------|-------------|-----------|
27
- | Guided setup | User wants help getting Twilio credentials | `references/browser-setup.md` |
30
+ | Guided setup | User wants help getting Twilio credentials for voice calling | `references/browser-setup.md` |
28
31
 
29
32
  Load the reference and follow its instructions.
@@ -1,12 +1,15 @@
1
- # Twilio SMS Credentials — Guided Setup
1
+ # Twilio Voice — Guided Setup
2
2
 
3
- Walk the user through getting Twilio credentials themselves. Unlike Tavily or Google AI, Twilio signup requires identity verification and personal details — guide with clear instructions rather than browser automation.
3
+ Walk the user through getting Twilio credentials for the voice-call extension. Twilio signup requires identity verification — guide with clear instructions rather than browser automation.
4
+
5
+ **Important:** This skill is for voice calling only. If the user needs SMS verification for public chat, direct them to the Brevo skill — Brevo handles both email and SMS OTP.
4
6
 
5
7
  ---
6
8
 
7
9
  ## Prerequisites
8
10
 
9
11
  - User has an email address and phone number
12
+ - User wants to use Twilio as their voice-call telephony provider
10
13
  - Chat channel for sending instructions
11
14
 
12
15
  ---
@@ -15,7 +18,7 @@ Walk the user through getting Twilio credentials themselves. Unlike Tavily or Go
15
18
 
16
19
  Tell the user what Twilio is and why they need it:
17
20
 
18
- > "When WhatsApp isn't connected, we can send verification codes by text message instead. Twilio is the standard service for sending SMS. There's a free trial with enough credit to get started — no payment needed upfront.
21
+ > "Twilio is a telephony provider that lets your assistant make and receive phone calls. There's a free trial with enough credit to get started — no payment needed upfront.
19
22
  >
20
23
  > I'll walk you through the setup. You'll need to create the account yourself since Twilio asks for some personal details, but I'll tell you exactly what to do at each step."
21
24
 
@@ -35,13 +38,13 @@ Wait for the user to confirm they've completed signup.
35
38
 
36
39
  If the user asks about onboarding questions Twilio shows after signup:
37
40
 
38
- > "Those are just survey questions — pick anything. You can select **SMS**, **Notifications**, and **No code**. They don't affect your account."
41
+ > "Those are just survey questions — pick anything. You can select **Voice**, **Notifications**, and **No code**. They don't affect your account."
39
42
 
40
43
  ## Step 4: Get a phone number
41
44
 
42
45
  > "On the Twilio dashboard, you should see a **trial phone number** offered to you. Click **'Get this number'** to claim it.
43
46
  >
44
- > If you don't see one, go to **Phone Numbers → Manage → Buy a number** in the left sidebar and get one with SMS capability.
47
+ > If you don't see one, go to **Phone Numbers → Manage → Buy a number** in the left sidebar and get one with Voice capability.
45
48
  >
46
49
  > Copy the phone number — it should look like **+15551234567**. Send it to me."
47
50
 
@@ -60,28 +63,15 @@ Wait for the user to send the credentials.
60
63
 
61
64
  ## Step 6: Save to Taskmaster
62
65
 
63
- Once you have all three values (Account SID, Auth Token, phone number):
64
-
65
- > "Now open your Taskmaster setup page:
66
- >
67
- > 1. Make sure **Public Chat** is enabled with **Phone OTP** or **Visitor chooses** mode
68
- > 2. Click **'Edit'** on the **SMS Fallback** row
69
- > 3. Paste in your **Account SID**, **Auth Token**, and **From Number**
70
- > 4. Click **Save**
71
- >
72
- > Let me know when it's done!"
73
-
74
- ## Step 7: Confirm
75
-
76
- Once the user confirms:
66
+ Once you have all three values (Account SID, Auth Token, phone number), save them as Twilio credentials for the voice-call extension using the appropriate configuration tool.
77
67
 
78
- > "SMS fallback is now configured. When WhatsApp is unavailable, verification codes will be sent by text message. Your visitors will always be able to verify their phone number."
68
+ > "I've saved your Twilio credentials. The voice-call extension can now make and receive calls through Twilio."
79
69
 
80
70
  ---
81
71
 
82
72
  ## If the user already has Twilio credentials
83
73
 
84
- Skip to Step 5 — just ask for the Account SID, Auth Token, and a Twilio phone number with SMS capability.
74
+ Skip to Step 5 — just ask for the Account SID, Auth Token, and a Twilio phone number with Voice capability.
85
75
 
86
76
  ---
87
77
 
@@ -89,7 +79,8 @@ Skip to Step 5 — just ask for the Account SID, Auth Token, and a Twilio phone
89
79
 
90
80
  | Question | Answer |
91
81
  |----------|--------|
92
- | "Is it free?" | The trial includes credit for ~100+ SMS messages. No card required. After that it's pay-as-you-go, about $0.008 per SMS in the US. |
93
- | "Can I send to any number?" | On the free trial, you can only send to numbers you've verified in Twilio. Upgrade to a paid account to send to any number. |
82
+ | "Is it free?" | The trial includes credit for testing. No card required. After that it's pay-as-you-go. |
83
+ | "Can I use Twilio for SMS too?" | Twilio is used for voice calling only in Taskmaster. For SMS verification codes, use Brevo instead it handles both email and SMS with one API key. |
94
84
  | "Where do I find my credentials later?" | Always at **console.twilio.com** — the Account SID and Auth Token are on the main dashboard. |
95
- | "I already have Twilio but use it for something else" | That's fine — the same credentials work. Just make sure the phone number has SMS capability enabled. |
85
+ | "I already have Twilio but use it for something else" | That's fine — the same credentials work. Just make sure the phone number has Voice capability enabled. |
86
+ | "Can I use a different telephony provider?" | Yes — Taskmaster also supports Plivo and Telnyx for voice calling. |
@@ -1473,9 +1473,9 @@ By default, anyone who opens the public chat can start a conversation immediatel
1473
1473
  |--------|-------------|---------------|
1474
1474
  | **Anonymous** | No verification — visitors chat immediately | Nothing (default) |
1475
1475
  | **Email OTP** | Visitors enter their email, receive a one-time code | A [Brevo](https://brevo.com) API key and a verified sender (free, no credit card). The sender address is configured in Brevo, not in Taskmaster. |
1476
- | **SMS OTP** | Visitors enter their phone number, receive a one-time code | [Twilio](https://twilio.com) account SID, auth token, and a Twilio phone number |
1476
+ | **SMS OTP** | Visitors enter their phone number, receive a one-time code | Same [Brevo](https://brevo.com) API key as email, plus prepaid SMS credits in your Brevo account |
1477
1477
 
1478
- 5. Enter your provider credentials — for email, add the Brevo API key in the **API Keys** section on the Setup page; for SMS, enter Twilio credentials in the SMS Fallback fields
1478
+ 5. Enter your provider credentials — add the Brevo API key in the **API Keys** section on the Setup page. The same key serves both email and SMS verification. For SMS, purchase SMS credits in your Brevo dashboard.
1479
1479
  6. Settings auto-save when you leave each field
1480
1480
 
1481
1481
  Once enabled, visitors must authenticate before they can send their first message. Verified contact details are stored and available to the agent via the `verify_contact` tool, so your assistant knows who it's talking to.