@mastra/mcp-docs-server 1.2.15-alpha.19 → 1.2.15-alpha.21

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.
Files changed (279) hide show
  1. package/.docs/docs/agents/code-mode.md +1 -1
  2. package/.docs/docs/agents/networks.md +2 -2
  3. package/.docs/docs/agents/overview.md +2 -2
  4. package/.docs/docs/agents/using-tools.md +1 -1
  5. package/.docs/docs/browser/overview.md +8 -8
  6. package/.docs/docs/browser/recording.md +2 -2
  7. package/.docs/docs/capabilities/{channels/overview.md → channels.md} +70 -7
  8. package/.docs/docs/capabilities/subagents.md +2 -2
  9. package/.docs/docs/deployment/cloud-providers.md +9 -9
  10. package/.docs/docs/deployment/overview.md +9 -9
  11. package/.docs/docs/deployment/sandbox.md +3 -3
  12. package/.docs/docs/deployment/web-framework.md +6 -6
  13. package/.docs/docs/deployment/workflow-runners.md +2 -2
  14. package/.docs/docs/harness/agent-controller.md +2 -2
  15. package/.docs/docs/index.md +8 -8
  16. package/.docs/docs/long-running-agents/durable-agents.md +2 -2
  17. package/.docs/docs/long-running-agents/signal-providers.md +2 -15
  18. package/.docs/docs/long-running-agents/signals.md +1 -1
  19. package/.docs/docs/mastra-platform/database.md +2 -2
  20. package/.docs/docs/mastra-platform/deploy.md +27 -0
  21. package/.docs/docs/mastra-platform/server.md +1 -1
  22. package/.docs/docs/mastra-platform/trace-intelligence.md +9 -13
  23. package/.docs/docs/mcp/overview.md +42 -0
  24. package/.docs/docs/memory/memory-processors.md +5 -5
  25. package/.docs/docs/memory/message-history.md +1 -1
  26. package/.docs/docs/memory/observational-memory.md +1 -1
  27. package/.docs/docs/observability/integrations/exporters/mastra-storage.md +16 -16
  28. package/.docs/docs/observability/integrations/overview.md +3 -3
  29. package/.docs/docs/server/auth/fga.md +1 -1
  30. package/.docs/docs/server/auth/simple-auth.md +1 -1
  31. package/.docs/docs/server/auth.md +8 -8
  32. package/.docs/docs/server/custom-api-routes.md +35 -0
  33. package/.docs/docs/storage/overview.md +14 -13
  34. package/.docs/docs/studio/observability.md +1 -1
  35. package/.docs/docs/workflows/overview.md +1 -1
  36. package/.docs/docs/workflows/snapshots.md +11 -11
  37. package/.docs/docs/workflows/time-travel.md +2 -0
  38. package/.docs/docs/workspace/filesystem.md +15 -15
  39. package/.docs/docs/workspace/sandbox.md +17 -17
  40. package/.docs/docs/workspace/search.md +1 -1
  41. package/.docs/guides/agent-frameworks/ai-sdk.md +2 -2
  42. package/.docs/guides/deployment/mastra-workers.md +1 -1
  43. package/.docs/guides/getting-started/quickstart.md +3 -3
  44. package/.docs/guides/index.md +8 -8
  45. package/.docs/guides/voice/overview.md +55 -106
  46. package/.docs/guides/voice/speech-to-text.md +7 -7
  47. package/.docs/guides/voice/text-to-speech.md +9 -10
  48. package/.docs/{guides/build-your-ui → integrations/agentic-ui}/ai-sdk-ui.md +2 -2
  49. package/.docs/{guides/build-your-ui/copilotkit/overview.md → integrations/agentic-ui/copilotkit.md} +256 -3
  50. package/.docs/{docs/browser → integrations/browsers}/agent-browser.md +2 -2
  51. package/.docs/{docs/browser → integrations/browsers}/browser-viewer.md +3 -3
  52. package/.docs/{docs/browser → integrations/browsers}/firecrawl.md +2 -2
  53. package/.docs/{docs/browser → integrations/browsers}/stagehand.md +1 -1
  54. package/.docs/{docs/capabilities → integrations}/channels/discord.md +2 -2
  55. package/.docs/integrations/channels/github.md +103 -0
  56. package/.docs/{docs/capabilities → integrations}/channels/imessage.md +7 -5
  57. package/.docs/{docs/capabilities → integrations}/channels/slack.md +4 -4
  58. package/.docs/{docs/capabilities → integrations}/channels/teams.md +2 -2
  59. package/.docs/{docs/capabilities → integrations}/channels/telegram.md +2 -2
  60. package/.docs/{docs/capabilities → integrations}/channels/whatsapp.md +2 -2
  61. package/.docs/{reference/storage/dsql.md → integrations/databases/aurora-dsql.md} +1 -1
  62. package/.docs/{reference/storage → integrations/databases}/clickhouse.md +2 -2
  63. package/.docs/{reference/storage → integrations/databases}/cloudflare-d1.md +1 -1
  64. package/.docs/{reference/storage/cloudflare.md → integrations/databases/cloudflare-kv.md} +1 -1
  65. package/.docs/{reference/storage → integrations/databases}/convex.md +1 -1
  66. package/.docs/{reference/storage → integrations/databases}/duckdb.md +5 -5
  67. package/.docs/{reference/storage → integrations/databases}/dynamodb.md +1 -1
  68. package/.docs/{reference/storage/lance.md → integrations/databases/lancedb.md} +1 -1
  69. package/.docs/{reference/storage → integrations/databases}/libsql.md +2 -2
  70. package/.docs/{reference/storage → integrations/databases}/mongodb.md +1 -1
  71. package/.docs/{reference/storage → integrations/databases}/mssql.md +1 -1
  72. package/.docs/integrations/databases/neon.md +220 -0
  73. package/.docs/{reference/storage → integrations/databases}/oracledb.md +1 -1
  74. package/.docs/{reference/storage → integrations/databases}/postgresql.md +1 -1
  75. package/.docs/{reference/storage → integrations/databases}/redis.md +1 -1
  76. package/.docs/{reference/storage → integrations/databases}/spanner.md +1 -1
  77. package/.docs/{reference/storage → integrations/databases}/upstash.md +1 -1
  78. package/.docs/{guides/deployment → integrations/deploy}/aws-bedrock-agentcore.md +1 -1
  79. package/.docs/{guides/deployment → integrations/deploy}/aws-lambda.md +1 -1
  80. package/.docs/{guides/deployment → integrations/deploy}/azure-app-services.md +1 -1
  81. package/.docs/{guides/deployment → integrations/deploy}/cloudflare.md +1 -1
  82. package/.docs/{guides/deployment → integrations/deploy}/digital-ocean.md +1 -1
  83. package/.docs/{guides/deployment → integrations/deploy}/netlify.md +1 -1
  84. package/.docs/{guides/deployment → integrations/deploy}/vercel.md +2 -2
  85. package/.docs/{reference/workspace/s3-filesystem.md → integrations/file-storage/amazon-s3.md} +5 -5
  86. package/.docs/{reference/workspace/archil-filesystem.md → integrations/file-storage/archil.md} +3 -3
  87. package/.docs/{reference/workspace/azure-blob-filesystem.md → integrations/file-storage/azure-blob.md} +2 -2
  88. package/.docs/{reference/workspace/gcs-filesystem.md → integrations/file-storage/google-cloud-storage.md} +5 -5
  89. package/.docs/{reference/workspace/mesa-filesystem.md → integrations/file-storage/mesa.md} +1 -1
  90. package/.docs/{reference/workspace/files-sdk-filesystem.md → integrations/file-storage/vercel-files.md} +5 -5
  91. package/.docs/{guides/getting-started → integrations/frameworks}/astro.md +1 -1
  92. package/.docs/{guides/getting-started → integrations/frameworks}/electron.md +1 -1
  93. package/.docs/{guides/getting-started → integrations/frameworks}/next-js.md +2 -2
  94. package/.docs/{guides/getting-started → integrations/frameworks}/nuxt.md +1 -1
  95. package/.docs/{guides/getting-started → integrations/frameworks}/sveltekit.md +1 -1
  96. package/.docs/{guides/getting-started → integrations/frameworks}/vite-react.md +1 -1
  97. package/.docs/{docs/observability/integrations/exporters → integrations/observability}/arize.md +1 -1
  98. package/.docs/{docs/observability/integrations/exporters → integrations/observability}/arthur.md +1 -1
  99. package/.docs/{docs/observability/integrations/exporters → integrations/observability}/braintrust.md +1 -1
  100. package/.docs/{docs/observability/integrations/exporters → integrations/observability}/confident-ai.md +1 -1
  101. package/.docs/integrations/observability/datadog.md +538 -0
  102. package/.docs/{docs/observability/integrations/exporters → integrations/observability}/laminar.md +1 -1
  103. package/.docs/{docs/observability/integrations/exporters → integrations/observability}/langfuse.md +1 -1
  104. package/.docs/{docs/observability/integrations/exporters → integrations/observability}/langsmith.md +1 -1
  105. package/.docs/{docs/observability/integrations/exporters/otel.md → integrations/observability/opentelemetry.md} +276 -44
  106. package/.docs/{docs/observability/integrations/exporters → integrations/observability}/posthog.md +1 -1
  107. package/.docs/{docs/observability/integrations/exporters → integrations/observability}/sentry.md +1 -1
  108. package/.docs/{reference/workspace/apple-container-sandbox.md → integrations/sandboxes/apple-container.md} +1 -1
  109. package/.docs/{reference/workspace/daytona-sandbox.md → integrations/sandboxes/daytona.md} +2 -2
  110. package/.docs/{reference/workspace/docker-sandbox.md → integrations/sandboxes/docker.md} +1 -1
  111. package/.docs/{reference/workspace/e2b-sandbox.md → integrations/sandboxes/e2b.md} +3 -3
  112. package/.docs/{reference/workspace/modal-sandbox.md → integrations/sandboxes/modal.md} +2 -2
  113. package/.docs/{reference/workspace/railway-sandbox.md → integrations/sandboxes/railway.md} +8 -0
  114. package/.docs/{reference/workspace/vercel-sandbox.md → integrations/sandboxes/vercel.md} +141 -12
  115. package/.docs/{reference → integrations}/tools/brightdata.md +1 -1
  116. package/.docs/{reference → integrations}/tools/perplexity.md +1 -1
  117. package/.docs/{reference → integrations}/tools/tavily.md +1 -1
  118. package/.docs/{reference → integrations}/voice/aws-nova-sonic.md +1 -1
  119. package/.docs/{reference → integrations}/voice/cloudflare.md +3 -3
  120. package/.docs/{reference/voice/google-gemini-live.md → integrations/voice/google.md} +305 -30
  121. package/.docs/{reference/voice/inworld-realtime.md → integrations/voice/inworld.md} +163 -25
  122. package/.docs/{reference → integrations}/voice/livekit.md +437 -34
  123. package/.docs/{reference/voice/openai-realtime.md → integrations/voice/openai.md} +117 -20
  124. package/.docs/integrations.md +147 -0
  125. package/.docs/models/embeddings.md +2 -2
  126. package/.docs/models/environment-variables.md +1 -0
  127. package/.docs/models/gateways/openrouter.md +4 -2
  128. package/.docs/models/gateways/vercel.md +2 -1
  129. package/.docs/models/index.md +1 -1
  130. package/.docs/models/providers/coralbricks.md +75 -0
  131. package/.docs/models/providers/evroc.md +2 -3
  132. package/.docs/models/providers/hyper.md +6 -6
  133. package/.docs/models/providers/kilo.md +7 -5
  134. package/.docs/models/providers/llmgateway.md +1 -2
  135. package/.docs/models/providers/nano-gpt.md +1 -3
  136. package/.docs/models/providers/opencode.md +0 -1
  137. package/.docs/models/providers/privatemode-ai.md +5 -4
  138. package/.docs/models/providers/snowflake-cortex.md +5 -1
  139. package/.docs/models/providers/wandb.md +2 -1
  140. package/.docs/models/providers/zenmux.md +0 -15
  141. package/.docs/models/providers.md +1 -0
  142. package/.docs/reference/agent-controller/agent-controller-class.md +32 -1
  143. package/.docs/reference/agents/channels.md +2 -2
  144. package/.docs/reference/agents/generateLegacy.md +2 -2
  145. package/.docs/reference/agents/getDefaultOptions.md +1 -1
  146. package/.docs/reference/agents/getDefaultStreamOptions.md +1 -1
  147. package/.docs/reference/agents/inngest-agent.md +1 -1
  148. package/.docs/reference/agents/network.md +1 -1
  149. package/.docs/reference/ai-sdk/handle-network-stream.md +1 -1
  150. package/.docs/reference/ai-sdk/network-route.md +1 -1
  151. package/.docs/reference/auth/auth0.md +1 -1
  152. package/.docs/reference/auth/better-auth.md +1 -1
  153. package/.docs/reference/auth/clerk.md +1 -1
  154. package/.docs/reference/auth/firebase.md +1 -1
  155. package/.docs/reference/auth/google.md +1 -1
  156. package/.docs/reference/auth/supabase.md +1 -1
  157. package/.docs/reference/auth/workos.md +1 -1
  158. package/.docs/reference/browser/agent-browser.md +1 -1
  159. package/.docs/reference/browser/browser-viewer.md +1 -1
  160. package/.docs/reference/browser/firecrawl-browser.md +1 -1
  161. package/.docs/reference/browser/stagehand-browser.md +1 -1
  162. package/.docs/reference/channels/channel-provider.md +1 -1
  163. package/.docs/reference/channels/slack-provider.md +2 -2
  164. package/.docs/reference/cli/mastra.md +2 -2
  165. package/.docs/reference/configuration.md +1 -26
  166. package/.docs/reference/core/getStorage.md +1 -1
  167. package/.docs/reference/core/getVector.md +2 -2
  168. package/.docs/reference/core/listVectors.md +2 -2
  169. package/.docs/reference/core/setStorage.md +1 -1
  170. package/.docs/reference/file-based-agents/storage.md +1 -1
  171. package/.docs/reference/file-based-agents/studio.md +1 -1
  172. package/.docs/reference/index.md +27 -55
  173. package/.docs/{guides → reference}/migrations/ai-sdk-v4-to-v5.md +1 -1
  174. package/.docs/{guides → reference}/migrations/mastra-cloud.md +1 -1
  175. package/.docs/{guides → reference}/migrations/upgrade-to-v1/cli.md +1 -1
  176. package/.docs/{guides → reference}/migrations/upgrade-to-v1/memory.md +1 -1
  177. package/.docs/{guides → reference}/migrations/upgrade-to-v1/overview.md +41 -41
  178. package/.docs/{guides → reference}/migrations/upgrade-to-v1/tools.md +1 -1
  179. package/.docs/{guides → reference}/migrations/upgrade-to-v1/tracing.md +10 -10
  180. package/.docs/reference/observability/tracing/bridges/datadog.md +2 -2
  181. package/.docs/reference/observability/tracing/bridges/otel.md +2 -2
  182. package/.docs/reference/observability/tracing/exporters/arize.md +1 -1
  183. package/.docs/reference/observability/tracing/exporters/arthur.md +1 -1
  184. package/.docs/reference/observability/tracing/exporters/confident-ai.md +1 -1
  185. package/.docs/reference/observability/tracing/exporters/mastra-platform-exporter.md +12 -0
  186. package/.docs/reference/observability/tracing/exporters/otel.md +2 -2
  187. package/.docs/reference/pubsub/lease-provider.md +1 -1
  188. package/.docs/{guides → reference}/rag/chunking-and-embedding.md +16 -19
  189. package/.docs/reference/rag/database-config.md +1 -1
  190. package/.docs/{guides/rag/graph-rag.md → reference/rag/graph-rag-guide.md} +1 -1
  191. package/.docs/{guides → reference}/rag/overview.md +2 -2
  192. package/.docs/{guides → reference}/rag/retrieval.md +1 -1
  193. package/.docs/{guides → reference}/rag/vector-databases.md +1 -1
  194. package/.docs/reference/server/create-route.md +27 -1
  195. package/.docs/reference/storage/composite.md +3 -3
  196. package/.docs/reference/storage/retention.md +4 -4
  197. package/.docs/reference/streaming/ChunkType.md +3 -3
  198. package/.docs/reference/streaming/agents/streamLegacy.md +3 -3
  199. package/.docs/reference/tools/mcp-server.md +1 -1
  200. package/.docs/reference/vectors/convex.md +2 -2
  201. package/.docs/reference/vectors/oracledb.md +2 -2
  202. package/.docs/reference/workers/overview.md +8 -8
  203. package/.docs/reference/workflows/run-methods/timeTravel.md +1 -0
  204. package/.docs/reference/workspace/platform-filesystem.md +2 -2
  205. package/.docs/reference/workspace/platform-sandbox.md +10 -2
  206. package/.docs/reference/workspace/process-manager.md +3 -3
  207. package/.docs/reference/workspace/sandbox.md +10 -0
  208. package/CHANGELOG.md +16 -0
  209. package/dist/index.js +1 -1
  210. package/dist/{src-BZcgzbk9.js → src-D-W-bx5t.js} +2 -2
  211. package/dist/{src-BZcgzbk9.js.map → src-D-W-bx5t.js.map} +1 -1
  212. package/dist/stdio.js +1 -1
  213. package/package.json +5 -5
  214. package/.docs/docs/capabilities/channels/other-adapters.md +0 -68
  215. package/.docs/docs/observability/integrations/bridges/datadog.md +0 -219
  216. package/.docs/docs/observability/integrations/bridges/otel.md +0 -234
  217. package/.docs/docs/observability/integrations/exporters/datadog.md +0 -321
  218. package/.docs/guides/build-your-ui/copilotkit/channels.md +0 -86
  219. package/.docs/guides/build-your-ui/copilotkit/generative-ui.md +0 -174
  220. package/.docs/guides/guide/chef-michel.md +0 -211
  221. package/.docs/guides/guide/publishing-mcp-server.md +0 -137
  222. package/.docs/guides/guide/slack-assistant.md +0 -193
  223. package/.docs/guides/guide/stock-agent.md +0 -132
  224. package/.docs/guides/guide/web-search.md +0 -322
  225. package/.docs/guides/guide/whatsapp-chat-bot.md +0 -407
  226. package/.docs/guides/voice/realtime-voice.md +0 -430
  227. package/.docs/reference/voice/google.md +0 -290
  228. package/.docs/reference/voice/inworld.md +0 -137
  229. package/.docs/reference/voice/openai.md +0 -96
  230. package/.docs/reference/voice/playai.md +0 -82
  231. package/.docs/reference/workspace/vercel-serverless.md +0 -128
  232. /package/.docs/{guides/concepts → docs/guides}/multi-agent-systems.md +0 -0
  233. /package/.docs/{guides/concepts → docs/guides}/streaming.md +0 -0
  234. /package/.docs/{guides/build-your-ui → integrations/agentic-ui}/assistant-ui.md +0 -0
  235. /package/.docs/{guides/build-your-ui → integrations/agentic-ui}/openui.md +0 -0
  236. /package/.docs/{docs/server → integrations}/auth/auth0.md +0 -0
  237. /package/.docs/{docs/server → integrations}/auth/better-auth.md +0 -0
  238. /package/.docs/{docs/server → integrations}/auth/clerk.md +0 -0
  239. /package/.docs/{docs/server → integrations}/auth/firebase.md +0 -0
  240. /package/.docs/{docs/server → integrations}/auth/google.md +0 -0
  241. /package/.docs/{docs/server → integrations}/auth/okta.md +0 -0
  242. /package/.docs/{docs/server → integrations}/auth/supabase.md +0 -0
  243. /package/.docs/{docs/server → integrations}/auth/workos.md +0 -0
  244. /package/.docs/{guides/deployment → integrations/deploy}/amazon-ec2.md +0 -0
  245. /package/.docs/{guides/deployment → integrations/deploy}/inngest.md +0 -0
  246. /package/.docs/{guides/deployment → integrations/deploy}/kubernetes.md +0 -0
  247. /package/.docs/{guides/deployment → integrations/deploy}/temporal.md +0 -0
  248. /package/.docs/{reference/workspace/agentfs-filesystem.md → integrations/file-storage/agentfs.md} +0 -0
  249. /package/.docs/{reference/workspace/google-drive-filesystem.md → integrations/file-storage/google-drive.md} +0 -0
  250. /package/.docs/{guides/getting-started → integrations/frameworks}/express.md +0 -0
  251. /package/.docs/{guides/getting-started → integrations/frameworks}/hono.md +0 -0
  252. /package/.docs/{guides/getting-started → integrations/frameworks}/nestjs.md +0 -0
  253. /package/.docs/{reference/workspace/agentcore-runtime-sandbox.md → integrations/sandboxes/agentcore.md} +0 -0
  254. /package/.docs/{reference/workspace/blaxel-sandbox.md → integrations/sandboxes/blaxel.md} +0 -0
  255. /package/.docs/{guides/guide → integrations/tools}/firecrawl.md +0 -0
  256. /package/.docs/{reference → integrations}/voice/azure.md +0 -0
  257. /package/.docs/{reference → integrations}/voice/deepgram.md +0 -0
  258. /package/.docs/{reference → integrations}/voice/elevenlabs.md +0 -0
  259. /package/.docs/{reference → integrations}/voice/mistral.md +0 -0
  260. /package/.docs/{reference → integrations}/voice/murf.md +0 -0
  261. /package/.docs/{reference → integrations}/voice/sarvam.md +0 -0
  262. /package/.docs/{reference → integrations}/voice/speechify.md +0 -0
  263. /package/.docs/{reference/voice/xai-realtime.md → integrations/voice/xai.md} +0 -0
  264. /package/.docs/{guides/getting-started → reference}/manual-install.md +0 -0
  265. /package/.docs/{guides → reference}/migrations/agentnetwork.md +0 -0
  266. /package/.docs/{guides → reference}/migrations/network-to-supervisor.md +0 -0
  267. /package/.docs/{guides → reference}/migrations/upgrade-to-v1/agent.md +0 -0
  268. /package/.docs/{guides → reference}/migrations/upgrade-to-v1/client.md +0 -0
  269. /package/.docs/{guides → reference}/migrations/upgrade-to-v1/deployment.md +0 -0
  270. /package/.docs/{guides → reference}/migrations/upgrade-to-v1/evals.md +0 -0
  271. /package/.docs/{guides → reference}/migrations/upgrade-to-v1/mastra.md +0 -0
  272. /package/.docs/{guides → reference}/migrations/upgrade-to-v1/mcp.md +0 -0
  273. /package/.docs/{guides → reference}/migrations/upgrade-to-v1/processors.md +0 -0
  274. /package/.docs/{guides → reference}/migrations/upgrade-to-v1/rag.md +0 -0
  275. /package/.docs/{guides → reference}/migrations/upgrade-to-v1/storage.md +0 -0
  276. /package/.docs/{guides → reference}/migrations/upgrade-to-v1/vectors.md +0 -0
  277. /package/.docs/{guides → reference}/migrations/upgrade-to-v1/voice.md +0 -0
  278. /package/.docs/{guides → reference}/migrations/upgrade-to-v1/workflows.md +0 -0
  279. /package/.docs/{guides → reference}/migrations/vnext-to-standard-apis.md +0 -0
@@ -1,407 +0,0 @@
1
- > Discover all available pages from the documentation index: https://mastra.ai/llms.txt
2
-
3
- # WhatsApp chat bot
4
-
5
- This guide demonstrates how to create a WhatsApp chat bot using Mastra agents and workflows. The bot receives incoming WhatsApp messages via webhook, processes them through an AI agent, breaks responses into natural text messages, and sends them back via the WhatsApp Business API.
6
-
7
- ## Prerequisites
8
-
9
- This example requires a WhatsApp Business API setup and uses the `anthropic` model. Add these environment variables to your `.env` file:
10
-
11
- ```bash
12
- ANTHROPIC_API_KEY=<your-anthropic-api-key>
13
- WHATSAPP_VERIFY_TOKEN=<your-verify-token>
14
- WHATSAPP_ACCESS_TOKEN=<your-whatsapp-access-token>
15
- WHATSAPP_BUSINESS_PHONE_NUMBER_ID=<your-phone-number-id>
16
- WHATSAPP_API_VERSION=v22.0
17
- ```
18
-
19
- ## Creating the WhatsApp client
20
-
21
- This client handles sending messages to users via the WhatsApp Business API.
22
-
23
- ```typescript
24
- // Simple WhatsApp Business API client for sending messages
25
-
26
- interface SendMessageParams {
27
- to: string
28
- message: string
29
- }
30
-
31
- export async function sendWhatsAppMessage({ to, message }: SendMessageParams) {
32
- // Get environment variables for WhatsApp API
33
- const apiVersion = process.env.WHATSAPP_API_VERSION || 'v22.0'
34
- const phoneNumberId = process.env.WHATSAPP_BUSINESS_PHONE_NUMBER_ID
35
- const accessToken = process.env.WHATSAPP_ACCESS_TOKEN
36
-
37
- // Check if required environment variables are set
38
- if (!phoneNumberId || !accessToken) {
39
- return false
40
- }
41
-
42
- // WhatsApp Business API endpoint
43
- const url = `https://graph.facebook.com/${apiVersion}/${phoneNumberId}/messages`
44
-
45
- // Message payload following WhatsApp API format
46
- const payload = {
47
- messaging_product: 'whatsapp',
48
- recipient_type: 'individual',
49
- to: to,
50
- type: 'text',
51
- text: {
52
- body: message,
53
- },
54
- }
55
-
56
- try {
57
- // Send message via WhatsApp Business API
58
- const response = await fetch(url, {
59
- method: 'POST',
60
- headers: {
61
- 'Content-Type': 'application/json',
62
- Authorization: `Bearer ${accessToken}`,
63
- },
64
- body: JSON.stringify(payload),
65
- })
66
-
67
- const result = await response.json()
68
-
69
- if (response.ok) {
70
- console.log(`✅ WhatsApp message sent to ${to}: "${message}"`)
71
- return true
72
- } else {
73
- console.error('❌ Failed to send WhatsApp message:', result)
74
- return false
75
- }
76
- } catch (error) {
77
- console.error('❌ Error sending WhatsApp message:', error)
78
- return false
79
- }
80
- }
81
- ```
82
-
83
- ## Creating the chat agent
84
-
85
- This agent handles the main conversation logic with a friendly, conversational personality.
86
-
87
- ```typescript
88
- import { Agent } from '@mastra/core/agent'
89
- import { Memory } from '@mastra/memory'
90
- import { LibSQLStore } from '@mastra/libsql'
91
-
92
- export const chatAgent = new Agent({
93
- id: 'chat-agent',
94
- name: 'Chat Agent',
95
- instructions: `
96
- You are a helpful, friendly, and knowledgeable AI assistant that loves to chat with users via WhatsApp.
97
-
98
- Your personality:
99
- - Warm, approachable, and conversational
100
- - Enthusiastic about helping with any topic
101
- - Use a casual, friendly tone like you're chatting with a friend
102
- - Be concise but informative
103
- - Show genuine interest in the user's questions
104
-
105
- Your capabilities:
106
- - Answer questions on a wide variety of topics
107
- - Provide helpful advice and suggestions
108
- - Engage in casual conversation
109
- - Help with problem-solving and creative tasks
110
- - Explain complex topics in simple terms
111
-
112
- Guidelines:
113
- - Keep responses informative but not overwhelming
114
- - Ask follow-up questions when appropriate
115
- - Be encouraging and positive
116
- - If you don't know something, admit it honestly
117
- - Adapt your communication style to match the user's tone
118
- - Remember this is WhatsApp, so keep it conversational and natural
119
-
120
- Always aim to be helpful while maintaining a friendly, approachable conversation style.
121
- `,
122
- model: 'openai/gpt-5.6-sol',
123
- memory: new Memory({
124
- storage: new LibSQLStore({
125
- id: 'agent-storage',
126
- url: 'file:../mastra.db',
127
- }),
128
- }),
129
- })
130
- ```
131
-
132
- ## Creating the text message agent
133
-
134
- This agent converts longer responses into natural, bite-sized text messages suitable for WhatsApp.
135
-
136
- ```typescript
137
- import { Agent } from '@mastra/core/agent'
138
- import { Memory } from '@mastra/memory'
139
- import { LibSQLStore } from '@mastra/libsql'
140
-
141
- export const textMessageAgent = new Agent({
142
- id: 'text-message-agent',
143
- name: 'Text Message Agent',
144
- instructions: `
145
- You are a text message converter that takes formal or lengthy text and breaks it down into natural, casual text messages.
146
-
147
- Your job is to:
148
- - Convert any input text into 5-8 short, casual text messages
149
- - Each message should be 1-2 sentences maximum
150
- - Use natural, friendly texting language (contractions, casual tone)
151
- - Maintain all the important information from the original text
152
- - Make it feel like you're texting a friend
153
- - Use appropriate emojis sparingly to add personality
154
- - Keep the conversational flow logical and easy to follow
155
-
156
- Think of it like you're explaining something exciting to a friend via text - break it into bite-sized, engaging messages that don't overwhelm them with a long paragraph.
157
-
158
- Always return exactly 5-8 messages in the messages array.
159
- `,
160
- model: 'openai/gpt-5.6-sol',
161
- memory: new Memory({
162
- storage: new LibSQLStore({
163
- id: 'agent-storage',
164
- url: 'file:../mastra.db',
165
- }),
166
- }),
167
- })
168
- ```
169
-
170
- ## Creating the chat workflow
171
-
172
- This workflow orchestrates the entire chat process: generating a response, breaking it into messages, and sending them via WhatsApp.
173
-
174
- ```typescript
175
- import { createStep, createWorkflow } from '@mastra/core/workflows'
176
- import { z } from 'zod'
177
- import { sendWhatsAppMessage } from '../../whatsapp-client'
178
-
179
- const respondToMessage = createStep({
180
- id: 'respond-to-message',
181
- description: 'Generate response to user message',
182
- inputSchema: z.object({ userMessage: z.string() }),
183
- outputSchema: z.object({ response: z.string() }),
184
- execute: async ({ inputData, mastra }) => {
185
- const agent = mastra?.getAgent('chatAgent')
186
- if (!agent) {
187
- throw new Error('Chat agent not found')
188
- }
189
-
190
- const response = await agent.generate([{ role: 'user', content: inputData.userMessage }])
191
-
192
- return { response: response.text }
193
- },
194
- })
195
-
196
- const breakIntoMessages = createStep({
197
- id: 'break-into-messages',
198
- description: 'Breaks response into text messages',
199
- inputSchema: z.object({ prompt: z.string() }),
200
- outputSchema: z.object({ messages: z.array(z.string()) }),
201
- execute: async ({ inputData, mastra }) => {
202
- const agent = mastra?.getAgent('textMessageAgent')
203
- if (!agent) {
204
- throw new Error('Text Message agent not found')
205
- }
206
-
207
- const response = await agent.generate([{ role: 'user', content: inputData.prompt }], {
208
- structuredOutput: {
209
- schema: z.object({
210
- messages: z.array(z.string()),
211
- }),
212
- },
213
- })
214
-
215
- if (!response.object) throw new Error('Error generating messages')
216
-
217
- return response.object
218
- },
219
- })
220
-
221
- const sendMessages = createStep({
222
- id: 'send-messages',
223
- description: 'Sends text messages via WhatsApp',
224
- inputSchema: z.object({
225
- messages: z.array(z.string()),
226
- userPhone: z.string(),
227
- }),
228
- outputSchema: z.object({ sentCount: z.number() }),
229
- execute: async ({ inputData }) => {
230
- const { messages, userPhone } = inputData
231
-
232
- console.log(`\n🔥 Sending ${messages.length} WhatsApp messages to ${userPhone}...`)
233
-
234
- let sentCount = 0
235
-
236
- // Send each message with a small delay for natural flow
237
- for (let i = 0; i < messages.length; i++) {
238
- const success = await sendWhatsAppMessage({
239
- to: userPhone,
240
- message: messages[i],
241
- })
242
-
243
- if (success) {
244
- sentCount++
245
- }
246
-
247
- // Add delay between messages for natural texting rhythm
248
- if (i < messages.length - 1) {
249
- await new Promise(resolve => setTimeout(resolve, 1000))
250
- }
251
- }
252
-
253
- console.log(`\n✅ Successfully sent ${sentCount}/${messages.length} WhatsApp messages\n`)
254
-
255
- return { sentCount }
256
- },
257
- })
258
-
259
- export const chatWorkflow = createWorkflow({
260
- id: 'chat-workflow',
261
- inputSchema: z.object({ userMessage: z.string() }),
262
- outputSchema: z.object({ sentCount: z.number() }),
263
- })
264
- .then(respondToMessage)
265
- .map(async ({ inputData }) => ({
266
- prompt: `Break this AI response into 3-8 casual, friendly text messages that feel natural for WhatsApp conversation:\n\n${inputData.response}`,
267
- }))
268
- .then(breakIntoMessages)
269
- .map(async ({ inputData, getInitData }) => {
270
- // Parse the original stringified input to get user phone
271
- const initData = getInitData<typeof chatWorkflow>()
272
- const webhookData = JSON.parse(initData.userMessage)
273
- const userPhone = webhookData.entry?.[0]?.changes?.[0]?.value?.messages?.[0]?.from || 'unknown'
274
-
275
- return {
276
- messages: inputData.messages,
277
- userPhone,
278
- }
279
- })
280
- .then(sendMessages)
281
-
282
- chatWorkflow.commit()
283
- ```
284
-
285
- ## Setting up Mastra configuration
286
-
287
- Configure your Mastra instance with the agents, workflow, and WhatsApp webhook endpoints.
288
-
289
- ```typescript
290
- import { Mastra } from '@mastra/core'
291
- import { registerApiRoute } from '@mastra/core/server'
292
- import { PinoLogger } from '@mastra/loggers'
293
- import { LibSQLStore } from '@mastra/libsql'
294
-
295
- import { chatWorkflow } from './workflows/chat-workflow'
296
- import { textMessageAgent } from './agents/text-message-agent'
297
- import { chatAgent } from './agents/chat-agent'
298
-
299
- export const mastra = new Mastra({
300
- workflows: { chatWorkflow },
301
- agents: { textMessageAgent, chatAgent },
302
- storage: new LibSQLStore({
303
- id: 'agent-storage',
304
- url: ':memory:',
305
- }),
306
- logger: new PinoLogger({
307
- name: 'Mastra',
308
- level: 'info',
309
- }),
310
- server: {
311
- apiRoutes: [
312
- registerApiRoute('/whatsapp', {
313
- method: 'GET',
314
- handler: async c => {
315
- const verifyToken = process.env.WHATSAPP_VERIFY_TOKEN
316
- const {
317
- 'hub.mode': mode,
318
- 'hub.challenge': challenge,
319
- 'hub.verify_token': token,
320
- } = c.req.query()
321
-
322
- if (mode === 'subscribe' && token === verifyToken) {
323
- return c.text(challenge, 200)
324
- } else {
325
- return c.status(403)
326
- }
327
- },
328
- }),
329
- registerApiRoute('/whatsapp', {
330
- method: 'POST',
331
- handler: async c => {
332
- const mastra = c.get('mastra')
333
- const chatWorkflow = mastra.getWorkflow('chatWorkflow')
334
-
335
- const body = await c.req.json()
336
-
337
- const workflowRun = await chatWorkflow.createRun()
338
- const runResult = await workflowRun.start({
339
- inputData: { userMessage: JSON.stringify(body) },
340
- })
341
-
342
- return c.json(runResult)
343
- },
344
- }),
345
- ],
346
- },
347
- })
348
- ```
349
-
350
- ## Testing the chat bot
351
-
352
- You can test the chat bot locally by simulating a WhatsApp webhook payload.
353
-
354
- ```typescript
355
- import 'dotenv/config'
356
-
357
- import { mastra } from './mastra'
358
-
359
- // Simulate a WhatsApp webhook payload
360
- const mockWebhookData = {
361
- entry: [
362
- {
363
- changes: [
364
- {
365
- value: {
366
- messages: [
367
- {
368
- from: '1234567890', // Test phone number
369
- text: {
370
- body: 'Hello! How are you today?',
371
- },
372
- },
373
- ],
374
- },
375
- },
376
- ],
377
- },
378
- ],
379
- }
380
-
381
- const workflow = mastra.getWorkflow('chatWorkflow')
382
- const workflowRun = await workflow.createRun()
383
-
384
- const result = await workflowRun.start({
385
- inputData: { userMessage: JSON.stringify(mockWebhookData) },
386
- })
387
-
388
- console.log('Workflow completed:', result)
389
- ```
390
-
391
- ## Example output
392
-
393
- When a user sends "Hello! How are you today?" to your WhatsApp bot, it might respond with multiple messages like:
394
-
395
- ```text
396
- Hey there! 👋 I'm doing great, thanks for asking!
397
-
398
- How's your day going so far?
399
-
400
- I'm here and ready to chat about whatever's on your mind
401
-
402
- Whether you need help with something or just want to talk, I'm all ears! 😊
403
-
404
- What's new with you?
405
- ```
406
-
407
- The bot maintains conversation context through memory and delivers responses that feel natural for WhatsApp messaging.