# Log Export Source: https://docs.trysiren.io/docs/06 - Notification Logs/Log Export Users now have the ability to export logs as **.csv files**. This functionality is accessible by clicking on the export button, positioned after the search field. Log Export ## Export Process 1. **Access Logs Page:** Navigate to the Logs section within Siren. 2. **Click Export:** Users can click on the export button located next to the search field. 3. **Apply Filters:** Users can apply filters such as Date Range, Channel, Provider, Template, Account Name, Workflow, and Status to refine the logs. 4. **Initiate Export:** Users can initiate the export process by clicking the submit button. 5. **Email Notification:** Users will receive an email containing the link to download the exported file, which is valid for 30 days. 6. **Download File:** Upon clicking the download link in the email, the file will automatically download to the user's system. This streamlined process allows users to easily export logs as .csv files and access them conveniently via email with a downloadable link. # Notification Lifecycle Source: https://docs.trysiren.io/docs/06 - Notification Logs/Notification Lifecycle Understanding the lifecycle of notifications is crucial for interpreting event analytics and dashboard details. Let's explore each stage: ## Notification Status Overview | **Channel** | **Submitted** | **Delivered** | **Read/Open** | **Clicked** | | ----------- | ------------- | ------------- | ------------- | ----------- | | SMS | ✓ | ✓ | ✗ | ✗ | | WhatsApp | ✓ | ✓ | ✓ (Read) | ✗ | | Email | ✓ | ✓ | ✓ (Open) | ✓ | | Slack | ✓ | ✗ | ✗ | ✗ | | Teams | ✓ | ✗ | ✗ | ✗ | | Discord | ✓ | ✗ | ✗ | ✗ | | InApp | ✓ | ✓ | ✓ (Read) | ✗ | | Push (SDK) | ✓ | ✓ | ✗ | ✓ | ### Status Definitions * **Submitted:** The notification has been submitted for delivery. * **Delivered:** The notification has been successfully delivered to the recipient's device. * **Read/Open:** The notification has been opened or read by the recipient. * **Clicked:** The recipient has clicked on the notification. WhatsApp will show "Read" only if the recipient has "Read Receipts" turned on. # Overview Source: https://docs.trysiren.io/docs/AI-Agent-Toolkit/AI Agent Toolkit Integrate Siren with AI agents like OpenAI, LangChain, and Vercel using function-calling tools. # What Is an AI Agent? An **AI agent** is a software-based entity powered by large language models (LLMs), designed to understand intent, reason through context, and autonomously perform actions. Unlike traditional rule-based bots, AI agents can dynamically interact with systems, adapt to real-time data, and make contextual decisions. This makes them highly effective in use cases such as: * Intelligent customer support * Automated internal workflows * Context-aware decision-making engines # What is an AI Agent Toolkit? While AI agents bring intelligence, they require tools to take meaningful actions in real-world systems. An **AI Agent Toolkit** serves as the operational interface — a bridge between the agent's reasoning capabilities and the infrastructure it needs to interact with. With such a toolkit, agents can: * Automatically notify users (e.g., failed transactions, policy changes) * Escalate tickets or trigger workflows without human input * Send proactive alerts, reminders, or updates using real-time logic In essence, a toolkit transforms the agent from a passive responder into an active operator. ## AI Agent Toolkit in Siren The **Siren Agent Toolkit** is a lightweight SDK that equips AI agents to integrate with the Siren platform through the **Model Context Protocol (MCP)**. This toolkit empowers AI agents to perform secure, systematic operations across messaging, templates, users, workflows, and webhooks — all within a few lines of code. ### Key Capabilities * **Send Messages**: Dispatch across channels like Email, SMS, WhatsApp, Slack, In-App, and more using predefined templates or ad-hoc messages. * **Manage Templates**: Create, edit, and version multi-channel templates with variable support. * **Control Users**: Add, update, or deactivate users and configure their channel preferences. * **Trigger Workflows**: Launch workflows on demand or schedule them dynamically with structured payloads. * **Configure Webhooks**: Handle delivery callbacks and inbound message parsing. # Getting Started Choose your preferred language for integration: ## Python Integration For Python developers, we provide a comprehensive SDK that makes it easy to integrate AI agents with Siren: * [Python Integration Guide](./Python-Integration) - Complete documentation for the Python SDK * [GitHub Repository](https://github.com/KeyValueSoftwareSystems/siren-agent-toolkit/tree/main/python) - Source code and examples ## TypeScript Integration For JavaScript/TypeScript developers, we offer a fully typed SDK with Node.js and browser support: * [TypeScript Integration Guide](./TypeScript-Integration) - Complete documentation for the TypeScript SDK * [npm Package](https://www.npmjs.com/package/@trysiren/agent-toolkit) - Install via npm or yarn # Support Need help? Check out our resources: * [Documentation](https://docs.trysiren.io) - Complete API reference and guides * [Community Forum](https://discordapp.com/channels/1284049167026487317/1284065584560209951) - Get help from other developers # Amazon Q CLI Source: https://docs.trysiren.io/docs/AI-Agent-Toolkit/MCP/Amazon-Q Set up Siren MCP with Amazon Q CLI for AI-powered command line workflows # Using Siren MCP with Amazon Q CLI Configure Amazon Q CLI to use the Siren MCP server: ```bash theme={null} q configure mcp add-server siren \ --command "npx" \ --args "-y,@trysiren/mcp,--tools=all,--api-key=YOUR_SIREN_API_KEY" ``` ## Configuration Options * Replace `YOUR_SIREN_API_KEY` with your actual Siren API key * The `--tools` flag specifies which Siren tools to enable (use `all` for all available tools) * The server will be registered with the name "siren" in your Amazon Q CLI configuration ## Verifying the Setup 1. List configured MCP servers: ```bash theme={null} q configure mcp list-servers ``` 2. Test the connection: ```bash theme={null} q mcp execute siren messaging.send --help ``` ## Usage Example Send a test message: ```bash theme={null} q mcp execute siren messaging.send \ --channel email \ --to user@example.com \ --subject "Test from Amazon Q CLI" \ --body "This is a test message sent via Amazon Q CLI" ``` ## Troubleshooting * Ensure Node.js and npm are installed and in your PATH * Verify your API key has the necessary permissions * Check the Amazon Q CLI logs for any error messages * Make sure your network allows connections to the Siren API ## Security Notes * Never hardcode API keys in scripts or command history * Consider using environment variables for sensitive information * Regularly rotate your API keys for enhanced security ## Security Best Practices * Never commit API keys to version control * Use IAM roles and policies for AWS access * Set appropriate file permissions on config files * Regularly rotate your API keys # Claude Desktop Source: https://docs.trysiren.io/docs/AI-Agent-Toolkit/MCP/Claude-Desktop Set up Siren MCP with Claude Desktop for seamless AI agent integration # Using Siren MCP with Claude Desktop Add the following to your `claude_desktop_config.json`. See [Claude MCP documentation](https://modelcontextprotocol.io/quickstart/user) for more details. ```json theme={null} { "mcpServers": { "siren": { "command": "npx", "args": [ "-y", "@trysiren/mcp", "--tools=all", "--api-key=YOUR_SIREN_API_KEY" ] } } } ``` **Or if you are using Docker:** ```json theme={null} { "mcpServers": { "siren": { "command": "docker", "args": [ "run", "--rm", "-i", "trysiren/mcp", "--tools=all", "--api-key=YOUR_SIREN_API_KEY" ] } } } ``` ## Configuration Options * Replace `YOUR_SIREN_API_KEY` with your actual Siren API key * Adjust the `--tools` flag to enable only the tools you need * For production use, consider using environment variables for the API key ## Verifying the Setup 1. Restart Claude Desktop after making these changes 2. Start a new conversation with Claude 3. Try asking Claude to send a test message ## Troubleshooting * Ensure the Claude Desktop app is up to date * Check the console logs for any error messages * Verify your API key has the necessary permissions * Make sure Docker is running if using the Docker configuration # Cursor Source: https://docs.trysiren.io/docs/AI-Agent-Toolkit/MCP/Cursor Set up Siren MCP with Cursor for AI-powered development # Using Siren MCP with Cursor Cursor uses the same configuration format as VS Code. Add this to your settings: ```json theme={null} { "mcp.servers": { "siren": { "command": "npx", "args": [ "-y", "@trysiren/mcp", "--tools=all", "--api-key=YOUR_SIREN_API_KEY" ] } } } ``` ## Configuration Options * Replace `YOUR_SIREN_API_KEY` with your actual Siren API key * Adjust the `--tools` flag to enable only the tools you need * The configuration is similar to VS Code but might have slight differences in how settings are applied ## Verifying the Setup 1. Restart Cursor after making these changes 2. Open the command palette (Ctrl+Shift+P or Cmd+Shift+P) 3. Look for MCP-related commands to verify the connection ## Troubleshooting * Ensure Node.js and npm are installed if using the npx method * Check the Cursor logs for any error messages * Verify your API key has the necessary permissions * Make sure your network allows connections to the Siren API ## Advanced Configuration ### Keyboard Shortcuts Add custom keyboard shortcuts for frequently used tools in `keybindings.json`: ```json theme={null} [ { "command": "mcp.executeTool", "key": "ctrl+alt+s", "args": { "server": "Siren", "tool": "messaging.send" } } ] ``` ## Troubleshooting * **Connection Issues**: * Verify your API key and network connectivity * Check that the MCP server URL is correct * **Tool Not Found**: * Ensure the tool names in your config match exactly * Check that the tools are included in your API key's permissions * **Permission Errors**: * Verify your API key has the necessary permissions * Check the Siren dashboard for any rate limits or restrictions ## Security Best Practices * Never commit API keys to version control * Use environment variables or secure credential storage * Regularly rotate your API keys * Follow the principle of least privilege when assigning permissions # Debugging Source: https://docs.trysiren.io/docs/AI-Agent-Toolkit/MCP/Debugging-MCP ## **Debug Mode** Enable verbose logging with the `--debug` flag: ```bash theme={null} npx @trysiren/mcp --tools=all --api-key=YOUR_API_KEY --debug ``` ## **Using MCP Inspector** The [**MCP Inspector**](https://modelcontextprotocol.io/docs/tools/inspector) provides a visual interface for debugging your MCP server. ```bash theme={null} npm run build ``` ```bash theme={null} # Start MCP Inspector and server with all tools npx @modelcontextprotocol/inspector node dist/index.js --tools=all --api-key=YOUR_SIREN_API_KEY ``` ECHO is off. ## **Docker Debugging** For Docker-based debugging: ```bash theme={null} docker build -t trysiren/mcp . ``` ```bash theme={null} docker run -p 3000:3000 -p 5173:5173 -v /var/run/docker.sock:/var/run/docker.sock \ mcp/inspector docker run --rm -i trysiren/mcp --tools=all --api-key=YOUR_SIREN_API_KEY ``` ## **Health Check** * Verify your configuration with a simple health check: ```bash theme={null} npx @trysiren/mcp --tools=messaging.send --api-key=YOUR_SIREN_API_KEY ``` * If the server starts successfully, you will see: ```bash theme={null} ✅ Siren MCP Server running on stdio ``` * You can also check the version: ```bash theme={null} npx @trysiren/mcp --version ``` # Troubleshooting Some of the common issues and solutions are stated below. **Possible Causes** * Incorrect format * Expired key * Key not set properly **Solutions** * Ensure key starts with `sk_siren_`, `sk_test_`, or `sk_live_` * Check your environment variables or CLI argument * Generate a new API key from the Siren dashboard if needed **Possible Causes** * Typo in tool name * Tool not enabled * Outdated MCP package **Solutions** * Verify tool name (case-sensitive) * Add the tool to the `--tools` list in the command * Update to the latest MCP version **Possible Causes** * Network problems * Firewall blocking * API endpoint down **Solutions** * Check your internet connection * Configure firewall exceptions for outbound calls * Verify Siren API availability at [status.trysiren.io](https://status.trysiren.io) **Possible Causes** * Insufficient API key permissions * Workspace-specific access restrictions **Solutions** * Ensure your API key has required scopes * Check your workspace access level * Contact [Siren Support](mailto:support@trysiren.io) if the issue persists **Possible Causes** * Too many requests in a short time * Plan quota exceeded **Solutions** * Implement retry logic or request throttling * Upgrade your Siren plan if you are consistently hitting limits # Examples ## Basic Messaging ```bash theme={null} # Configure for basic messaging npx @siren/mcp --tools=messaging.send,messaging.getStatus --api-key=YOUR_API_KEY ``` ## Template Management ```bash theme={null} # Configure for template operations npx @siren/mcp --tools=templates.list,templates.create,templates.update --api-key=YOUR_API_KEY ``` ## Workflow Automation ```bash theme={null} # Configure for workflow automation npx @siren/mcp --tools=workflows.trigger,workflows.schedule --api-key=YOUR_API_KEY ``` ## Full Access ```bash theme={null} # Configure all available tools npx @siren/mcp --tools=all --api-key=YOUR_API_KEY ``` # Other MCP Clients Source: https://docs.trysiren.io/docs/AI-Agent-Toolkit/MCP/Other-Clients Set up Siren MCP with other MCP-compatible clients # Using Siren MCP with Other Clients The Siren MCP server is compatible with any client that supports the Model Context Protocol standard. Here are configuration examples for popular MCP-compatible platforms: ## 5ire Desktop Configure in 5ire's MCP settings: ```json theme={null} { "servers": { "siren": { "command": "npx", "args": ["-y", "@trysiren/mcp", "--tools=all", "--api-key=YOUR_SIREN_API_KEY"] } } } ``` ## FLUJO Add to FLUJO's workflow configuration: ```json theme={null} { "mcp_servers": { "siren": { "command": "npx -y @trysiren/mcp --tools=all --api-key=YOUR_SIREN_API_KEY" } } } ``` ## Zed Editor Configure in Zed's assistant settings: ```json theme={null} { "assistant": { "mcp_servers": { "siren": { "command": "npx", "args": ["-y", "@trysiren/mcp", "--tools=all", "--api-key=YOUR_SIREN_API_KEY"] } } } } func=lambda x: siren_mcp("messaging.send", **x), description="Send messages via Siren" ) # Initialize the agent llm = ChatOpenAI(temperature=0) tools = [siren_tool] agent = initialize_agent(tools, llm, agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION, verbose=True) # Use the agent agent.run("Send a test email to test@example.com") ``` ### 3. Custom Implementation Here's a basic example of how to implement an MCP client in Python: ```python theme={null} import requests import json class SirenMCPClient: def __init__(self, api_key: str, base_url: str = "https://api.trysiren.io/v1/mcp"): self.base_url = base_url self.headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } def call_tool(self, tool_name: str, **params): response = requests.post( f"{self.base_url}/tools/{tool_name}", headers=self.headers, json=params ) response.raise_for_status() return response.json() # Example usage client = SirenMCPClient(api_key="YOUR_SIREN_API_KEY") result = client.call_tool( "messaging.send", channel="email", to="user@example.com", subject="Hello", body="This is a test message" ) print(result) ``` ## Authentication Siren MCP uses API key authentication. Include your API key in the `Authorization` header: ``` Authorization: Bearer YOUR_SIREN_API_KEY ``` ## Rate Limiting * Default rate limit: 60 requests per minute * Response headers include rate limit information: * `X-RateLimit-Limit`: Maximum requests allowed * `X-RateLimit-Remaining`: Remaining requests in the window * `X-RateLimit-Reset`: Time when the limit resets (UTC timestamp) ## Error Handling Handle these common HTTP status codes: * `200 OK`: Request successful * `400 Bad Request`: Invalid request parameters * `401 Unauthorized`: Invalid or missing API key * `403 Forbidden`: Insufficient permissions * `404 Not Found`: Resource not found * `429 Too Many Requests`: Rate limit exceeded * `500 Internal Server Error`: Server error ## Best Practices 1. **Error Handling**: Implement retry logic for transient failures 2. **Timeouts**: Set appropriate timeouts for API calls 3. **Logging**: Log all API interactions for debugging 4. **Security**: Never expose API keys in client-side code 5. **Monitoring**: Track API usage and error rates # Overview Source: https://docs.trysiren.io/docs/AI-Agent-Toolkit/MCP/Overview Integrate Siren with LLMs and AI agents using the Model Context Protocol The Siren Model Context Protocol server enables seamless integration with Siren APIs through function calling. This protocol provides a comprehensive suite of tools for interacting with Siren's messaging, templates, users, workflows, and webhooks systems. ## What is MCP? **Model Context Protocol (MCP)** is a framework that allows external systems to pass structured, real-time information to large language models (LLMs) like GPT during each interaction. It bridges the gap between stateless systems such as REST APIs or command-line tools and the varying contextual needs of modern applications. By supplying this additional context, MCP enables the model to produce more accurate, relevant, and consistent responses. At a technical level, MCP works by attaching a structured JSON payload to the user's prompt at runtime. This payload carries background details such as the user's identity, recent actions, task-specific instructions, or relevant domain knowledge. This is referred to as **runtime context** — data that helps the model understand the situation in which it is being used, without needing to ask for that information in the prompt itself. While invisible in the model's final response, this context directly influences how the model interprets the prompt and generates output. ## What is the Siren MCP Server? When it comes to Siren, the **Model Context Protocol (MCP) Server** serves as the integration layer that enables LLM-powered environments to interact with the Siren platform using standardized function calls. It acts as a communication bridge, allowing language models to trigger messaging workflows and retrieve delivery insights in real time. Rather than manually composing HTTP requests or managing channel-specific logic, AI agents can call predefined functions like `messaging.send`, `users.add`, or `workflows.schedule`. These are optimized for channels including **Email, Slack, SMS, WhatsApp**, and others, making it easy to embed messaging actions into intelligent, event-driven workflows. By abstracting the messaging infrastructure behind clean, callable interfaces, the Siren MCP Server allows developers to build smarter, more responsive AI agents that can operate autonomously across user-facing communication channels. ## Quick Start ### Requirements * A Siren API key (get one from [Siren Dashboard](https://app.trysiren.io)) ### Installation ```bash theme={null} # Install globally npm install -g @trysiren/mcp # Or use with npx without installation npx -y @trysiren/mcp ``` ### Basic Usage To run the Siren MCP server: ```bash theme={null} # To set up all available tools npx -y @trysiren/mcp --tools=all --api-key=YOUR_SIREN_API_KEY # To set up specific tools npx -y @trysiren/mcp --tools=messaging.send,templates.list,workflows.trigger --api-key=YOUR_SIREN_API_KEY ``` > **Important:** Replace `YOUR_SIREN_API_KEY` with your actual Siren API key. You can also set the `SIREN_API_KEY` environment variable instead. ## Available MCP Clients Siren MCP supports various AI assistants and development environments. Choose your preferred client for setup instructions: * [Claude Desktop](./Claude-Desktop) * [VS Code](./VS-Code) * [Cursor](./Cursor) * [Amazon Q CLI](./Amazon-Q) * [Other MCP Clients](./Other-Clients) ## Available Tools The Siren MCP server provides the following tools for integration: ### Messaging Tools | Tool | Description | | ---------------------- | -------------------------------------------------- | | `messaging.send` | Send a message to a recipient via a chosen channel | | `messaging.getStatus` | Get the status of a sent message | | `messaging.getReplies` | Get replies to a sent message | ### Template Management Tools | Tool | Description | | ------------------- | ----------------------------------- | | `templates.list` | List available message templates | | `templates.create` | Create a new message template | | `templates.update` | Update an existing message template | | `templates.delete` | Delete a message template | | `templates.publish` | Publish a template for use | ### User Management Tools | Tool | Description | | -------------- | ---------------------------- | | `users.add` | Add a new user to the system | | `users.update` | Update an existing user | | `users.delete` | Delete a user | ### Workflow Tools | Tool | Description | | ----------------------- | ---------------------------------------- | | `workflows.trigger` | Trigger a workflow execution | | `workflows.triggerBulk` | Trigger multiple workflow executions | | `workflows.schedule` | Schedule a workflow for future execution | ### Webhook Configuration Tools | Tool | Description | | -------------------------------- | ------------------------------- | | `webhooks.configureNotification` | Configure notification webhooks | | `webhooks.configureInbound` | Configure inbound webhooks | ## Tool Categories For convenience, you can use predefined tool categories in your configuration: | Category | Included Tools | Usage Example | | ----------------------------------------------- | ------------------------------------------------------------------------------------------------- | ----------------------- | | `communication` | `messaging.send`, `messaging.getStatus`, `messaging.getReplies` | `--tools=communication` | | `content` | `templates.list`, `templates.create`, `templates.update`, `templates.delete`, `templates.publish` | `--tools=content` | | `identity` | `users.add`, `users.update`, `users.delete` | `--tools=identity` | | `automation` | `workflows.trigger`, `workflows.triggerBulk`, `workflows.schedule` | `--tools=automation` | | `integration` | `webhooks.configureNotification`, `webhooks.configureInbound` | `--tools=integration` | | You can combine categories with specific tools: | | | ```bash theme={null} npx @trysiren/mcp --tools=communication,templates.create,automation --api-key=YOUR_API_KEY ``` ## Configuration Options ### Command Line Arguments | Argument | Description | Default | Example | | ------------- | --------------------------------------- | ----------------- | --------------------------------------- | | `--tools` | Comma-separated list of tools to enable | none | `--tools=messaging.send,templates.list` | | `--api-key` | Your Siren API key | none | `--api-key=sk_siren_...` | | `--workspace` | Siren workspace ID | Default workspace | `--workspace=ws_abc123` | | `--port` | Port for HTTP server mode | 3000 | `--port=8080` | | `--debug` | Enable debug logging | false | `--debug` | ### API Key Format Siren supports multiple API key formats: | Format | Description | Use Case | | -------------- | -------------------------- | ----------------------- | | `sk_siren_...` | Standard Siren API key | General purpose | | `sk_test_...` | Test environment key | Development and testing | | `sk_live_...` | Production environment key | Production systems | ### Workspace Configuration If you are working with multiple Siren workspaces, specify the workspace ID: ```bash theme={null} npx @trysiren/mcp --tools=all --api-key=YOUR_API_KEY --workspace=ws_your_workspace_id ``` ### Environment Variables You can set environment variables instead of passing API keys as arguments: ```bash theme={null} # API key export SIREN_API_KEY=sk_siren_your_api_key # Workspace ID (optional) export SIREN_WORKSPACE=ws_your_workspace_id # Run with environment variables npx @trysiren/mcp --tools=all ``` ## Getting Started with Siren MCP Server Integrations To get started with the Siren MCP server, you will need an API key to authenticate your access. If you have already signed up, you may have received this key during onboarding. Otherwise, you can generate one from the Siren Dashboard under **Settings > Configuration > API Keys**. Once you have the API key, you can configure the Siren MCP server within any AI application that supports the Model Context Protocol (MCP). While we have included integration examples for specific tools, the same approach applies to any MCP-compatible environment. ### Available Platform Integrations Siren MCP is compatible with a variety of platforms and development environments. Here are the currently supported integrations: * [Claude Desktop](./Claude-Desktop) - Set up Siren MCP with Claude's desktop application * [VS Code](./VS-Code) - Configure Siren MCP in your VS Code environment * [Cursor](./Cursor) - Integrate Siren MCP with the Cursor editor * [Amazon Q CLI](./Amazon-Q) - Use Siren MCP with Amazon Q command-line interface * [Other MCP Clients](./Other-Clients) - Configuration examples for additional MCP-compatible platforms Each integration guide provides specific instructions for setting up and using Siren MCP within that environment. The core functionality remains consistent across platforms, but the configuration steps may vary slightly. # VS Code Source: https://docs.trysiren.io/docs/AI-Agent-Toolkit/MCP/VS-Code Set up Siren MCP with VS Code for AI-powered development workflows # Using Siren MCP with VS Code VS Code supports both workspace-specific and user-level MCP configurations. #### Workspace Configuration Add a `.vscode/mcp.json` file in your workspace: ```json theme={null} { "mcp": { "servers": { "siren": { "command": "npx", "args": [ "-y", "@trysiren/mcp", "--tools=messaging.send,templates.list,workflows.trigger", "--api-key=YOUR_SIREN_API_KEY" ] } } } } ``` #### User Settings Add to your VS Code user settings: ```json theme={null} { "mcp.servers": { "siren": { "command": "npx", "args": [ "-y", "@trysiren/mcp", "--tools=all", "--api-key=YOUR_SIREN_API_KEY" ] } } } ``` ### Keyboard Shortcuts Add custom keyboard shortcuts for frequently used tools in `keybindings.json`: ```json theme={null} [ { "command": "mcp.executeTool", "key": "ctrl+alt+s", "args": { "server": "Siren", "tool": "messaging.send" } } ] ``` ## Troubleshooting * **Connection Issues**: Verify your API key and network connectivity * **Tool Not Found**: Ensure the tool names in your config match exactly * **Permission Errors**: Check your API key permissions in the Siren dashboard ## Security Best Practices * Store your API key in environment variables or a secure credential store * Use the principle of least privilege when assigning API key permissions * Regularly rotate your API keys # Python Source: https://docs.trysiren.io/docs/AI-Agent-Toolkit/Python-Integration Integrate Siren with Python-based AI agents using our SDK # Python Integration for AI Agents ## Requirements * A Siren API key (get one from [Siren Dashboard](https://app.trysiren.io)) ## Installation ```bash theme={null} pip install siren-agent-toolkit ``` For local development: ```bash theme={null} # From the python/ directory pip install -e . ``` ## Usage ### Basic Example ```python theme={null} from siren_agent_toolkit.api import SirenAPI # Initialize with your API key api = SirenAPI(api_key="YOUR_API_KEY") # Send a simple email message result = api.run("send_message", { "recipient_value": "user@example.com", "channel": "EMAIL", "subject": "Important Update", "body": "Hello from Siren! This is an important notification." }) print(result) ``` ## Examples Complete working examples are available in the `examples/` directory: * `examples/langchain/main.py` — Using Siren tools with LangChain * `examples/openai/main.py` — Using Siren tools with OpenAI * `examples/crewai/main.py` — Using Siren tools with CrewAI ## Development ### Configuration The toolkit supports flexible configuration options: ```python theme={null} from siren_agent_toolkit.api import SirenAPI api = SirenAPI( api_key="YOUR_API_KEY", context={"env": "production"} # Optional environment configuration ) ``` ### Building Locally ```bash theme={null} # From the python/ directory pip install -e . # Install development dependencies pip install -r requirements.txt ``` ### Running Tests ```bash theme={null} pytest tests/ ``` ## License [MIT](https://github.com/trysiren/agent-toolkit/blob/main/LICENSE) # TypeScript Source: https://docs.trysiren.io/docs/AI-Agent-Toolkit/TypeScript-Integration Integrate Siren with TypeScript/JavaScript-based AI agents using our SDK # TypeScript Integration for AI Agents ## Installation ```bash theme={null} # Using npm npm install @trysiren/agent-toolkit # Using yarn yarn add @trysiren/agent-toolkit ``` ## Framework Integration The toolkit is designed to work with any AI framework that supports function calling. ### Framework-Specific Examples Refer to our [examples directory](https://github.com/KeyValueSoftwareSystems/siren-agent-toolkit/tree/main/typescript/examples) for detailed integration guides: | Framework | Example | Description | | ------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------- | | OpenAI | [View Example](https://github.com/KeyValueSoftwareSystems/siren-agent-toolkit/tree/main/typescript/examples/openai) | Complete OpenAI Assistant integration | | LangChain | [View Example](https://github.com/KeyValueSoftwareSystems/siren-agent-toolkit/tree/main/typescript/examples/langchain) | Agent with LangChain tools | | Vercel AI SDK | [View Example](https://github.com/KeyValueSoftwareSystems/siren-agent-toolkit/tree/main/typescript/examples/ai-sdk) | Next.js and Vercel AI SDK integration | | Mastra | [View Example](https://github.com/KeyValueSoftwareSystems/siren-agent-toolkit/tree/main/typescript/examples/mastra) | Mastra integration | ## Requirements * Node.js v16 or higher * Siren API key (get one from [Siren Dashboard](https://app.trysiren.io)) * Compatible AI framework with function calling support ## Configuration The toolkit uses a permission-based configuration system to control which Siren tools are available to your AI agents. ### Basic Setup ```typescript theme={null} import { SirenToolkit } from '@trysiren/agent-toolkit'; // Initialize with your API key const toolkit = new SirenToolkit({ apiKey: 'YOUR_SIREN_API_KEY', // Optional configuration actions: { messaging: { create: true, read: true }, templates: { read: true } } }); // Get tools for your AI framework const tools = toolkit.getTools(); ``` ### Configuration Options The toolkit uses a TypeScript interface for strongly-typed configuration: ```typescript theme={null} interface Configuration { actions?: { messaging?: { create?: boolean; // Send messages read?: boolean; // Get message status and replies }; templates?: { create?: boolean; // Create templates read?: boolean; // List templates update?: boolean; // Update templates delete?: boolean; // Delete templates }; // ... other action types }; // Other configuration options } ``` ## Available Tools ### Messaging Tools | Tool | Description | Example Use Case | | -------------------- | ---------------------------------- | --------------------------------------- | | `send_message` | Send a message through any channel | "Send an email to the user" | | `get_message_status` | Check delivery status | "Did my last message get delivered?" | | `list_messages` | List sent messages with filters | "Show me all failed SMS from yesterday" | ### Template Tools | Tool | Description | Example Use Case | | ----------------- | ----------------------------- | --------------------------------------------------- | | `create_template` | Create a new message template | "Create an email template for order confirmations" | | `get_template` | Get template details | "Show me the welcome email template" | | `list_templates` | List available templates | "What templates do we have?" | | `update_template` | Update an existing template | "Add a new variable to the password reset template" | | `delete_template` | Remove a template | "Delete the old holiday promotion template" | ### Workflow Tools | Tool | Description | Example Use Case | | --------------------- | --------------------------------------- | -------------------------------------------- | | `trigger_workflow` | Start a workflow execution | "Send the abandoned cart sequence" | | `get_workflow_status` | Check workflow status | "Is the onboarding workflow complete?" | | `schedule_workflow` | Schedule workflows for future execution | "Schedule a follow-up message for next week" | ### Webhook Configuration | Tool | Description | Example Use Case | | ---------------- | --------------------------- | ----------------------------------------------- | | `setup_webhook` | Configure webhook endpoints | "Forward all message status updates to our CRM" | | `list_webhooks` | View configured webhooks | "What webhooks do we have set up?" | | `delete_webhook` | Remove a webhook | "Remove the old test webhook" | ## License [MIT](https://github.com/trysiren/agent-toolkit/blob/main/LICENSE) # API Reference Source: https://docs.trysiren.io/docs/API-Reference/API References # API Key API (Application Programming Interface) key is a unique token key used to identify and authenticate applications or users. Once generated, it is important to save this key because this API key will be used to authenticate the end user whenever an API request comes from the user side. #### Generate API Key To generate an API key in Siren, follow these steps: * **Log in** to your Siren account. * In the left navigation pane, go to **Settings** > **Configurations**. * Select **API Key** from the dashboard. * Click on the **Add API Key** button on the top-left. * In the modal that appears: * Enter a name for your API key. * Click **Save**. * Once saved, your API key will be generated and displayed **only once**. Make sure to **copy and store it securely**. You can edit the API key name later, but you will **not be able to view the actual key again**. Ensure you copy the API key immediately after it is generated. It will not be retrievable later. *** # Bulk Trigger Source: https://docs.trysiren.io/docs/API-Reference/BulkTriggerAPI POST https://api.trysiren.io/api/v2/workflows/trigger/bulk Bulk Trigger in Workflow The same API endpoint is used to trigger scheduled workflows. ## Header Bearer token for API authentication. Format: `Bearer {{apiToken}}` ```json Request Body theme={null} { "workflowName": "", "data": { "": "" }, "notify": [ { "": "" } ] } ``` ## Body Parameters Data that is being used in the workflow Dynamic key-value pairs for common data. In Bulk trigger, this attribute is an array of objects. Bulk trigger is used when multiple recipients are there. The type of notification (e.g., `email`, `sms`). The recipient of the notification (e.g., email address, phone number). ```json Request Example theme={null} { "workflowName": "otp", "data": { "subject": "otp verification" }, "notify": [ { "notificationType": "email", "recipient": "example@example.com" }, { "notificationType": "sms", "recipient": "+1234567890" } ] } ``` ## Response UUID — identifier for the bulk request. Array of UUIDs — each corresponding to an individual workflow execution. The error code (e.g., `BAD_REQUEST`). A human-readable error message. ```json success (200) theme={null} { "data": { "requestId": UUID, //id of the request "workflowExecutionIds": [UUID] // list of workflow execution ids }, "error": null, "errors": null, "meta": null } ``` ```json bad request (400) theme={null} { "data": null, "error": { "errorCode": "BAD_REQUEST", "message": "Bad request" }, "errors": [ { "errorCode": "BAD_REQUEST", "message": "Bad request" } ], "meta": null } ``` ```json unauthorised (401) theme={null} { "data": null, "error": { "errorCode": "UNAUTHORISED", "message": "Unauthorised" }, "errors": [ { "errorCode": "UNAUTHORISED", "message": "Unauthorised" } ], "meta": null } ``` ```json not found (404) theme={null} { "data": null, "error": { "errorCode": "NOT FOUND", "message": "Not found" }, "errors": [ { "errorCode": "NOT FOUND", "message": "Not found" } ], "meta": null } ``` ## Status Codes * `200` - OK * `400` - BAD REQUEST * `401` - UNAUTHORISED * `404` - NOT FOUND *** # Send Chat Message Source: https://docs.trysiren.io/docs/API-Reference/ChatNodeAPI POST /api/v1/chat/message Send an interactive message through chat node ## Header Bearer token for API authentication. Format: `Bearer {{apiToken}}` ## Request Body ```json Slack theme={null} { "chatNodeId": "", "workflowExecutionId": "", "body": "", "buttons": [ { "text": "", "value": "", "style": "" }, { "text": "", "value": "", "style": "" } ], "threadId": "" } ``` ```json Gmail theme={null} { "chatNodeId": "", "workflowExecutionId": "", "subject": "Customer Support - Order #12345", "body": ", "threadId": "" } ``` ```json Teams theme={null} { "chatNodeId": "", "workflowExecutionId": "", "body": ", "threadId": "" } ``` ```json Using Templates theme={null} { "chatNodeId": "", "workflowExecutionId": "", "templateId": "", "templateVariables": { // Variables to substitute in template "":", "":", }, "threadId": "" } ``` ## Body Parameters Template configuration for the message Key-value pairs to populate template placeholders Provider configuration Message subject (for EMAIL only) Message body (for SLACK, EMAIL, TEAMS) Interactive buttons (for SLACK only) ```json Request Example theme={null} { "chatNodeId": "chat_node_id_1", "workflowExecutionId": "123e4567-e89b-12d3-a456-426614174000", "subject": "Your Order Update", "body": "Hello! We have an update on your order #12345. Please reply with your preferred delivery time.", "threadId": "email_thread_id_1" } ``` ## Response Success Response (200 OK) * The API returns an empty response body with HTTP status 200 when the chat message is successfully queued for processing. ## Status Codes * `200` - OK * `400` - BAD REQUEST * `401` - UNAUTHORISED * `404` - NOT FOUND # Add Channel Template Source: https://docs.trysiren.io/docs/API-Reference/CreateChannelTemplate POST /api/v1/public//template/{id}/channel-templates Add or update channel templates to draft version of template ## Header Bearer token for API authentication. Format: `Bearer {{apiToken}}` ## Query Parameters The ID of the template. ```json Request Body theme={null} { "SMS": { "body": "", "channel": "SMS", "isFlash": false, "isUnicode": false, "dltTemplateId": "" }, "EMAIL": { "subject": "", "channel": "EMAIL", "body": "", "fromName": "", "fromEmail": "", "replyTo": "", "cc": [""], "bcc": [""], "attachments": [], "isRawHTML": true, "isPlainText": false }, "SLACK": { "channel": "SLACK", "body": "", "attachments": [], "buttons": [] }, "WHATSAPP": { "channel": "WHATSAPP", "type": "TEMPLATE", "template": { "name": "", "language": { "code": "EN" }, "components": [] } }, "PUSH": { "channel": "PUSH", "title": "", "body": "<message>", "imageUrl": "<image_url>", "deepLink": "<deeplink_url>", "timeToLive": 86400, "priority": "<high|normal|low>", "analyticsLabel": "<event_name>", "android": { "channelId": "<channel_id>", "icon": "<icon_name>", "color": "<hex_color>", "sound": "<sound_name>" }, "ios": { "sound": "<sound_name>", "badge": 1, "category": "<category_id>" }, "web": { "icon": "<icon_url>", "badge": "<badge_url>" } }, "IN_APP": { "channel": "IN_APP", "title": "<title>", "body": "<message>", "type": "<notification_type>", "priority": "<priority_level>", "expiry": 168, "actions": [ { "type": "<action_type>", "label": "<button_label>" } ] } } ``` <RequestExample> ```json Request Example theme={null} { "SMS": { "body": "Your verification code is 123456", "channel": "SMS", "isFlash": false, "isUnicode": false, "dltTemplateId": "TEMPLATE123" }, "EMAIL": { "subject": "Welcome to Our Service", "channel": "EMAIL", "body": "<p>Hello,</p><p>Thank you for signing up!</p>", "fromName": "Support Team", "fromEmail": "noreply@example.com", "replyTo": "support@example.com", "cc": ["team@example.com"], "isRawHTML": true }, "SLACK": { "channel": "SLACK", "body": "New user signup!\n*Name*: John Doe\n*Email*: john@example.com" }, "WHATSAPP": { "channel": "WHATSAPP", "type": "TEMPLATE", "template": { "name": "payment_request_template", "language": { "code": "EN" }, "components": [ { "type": "HEADER", "parameters": [ { "type": "DOCUMENT", "document": { "link": "{{doc}}", "filename": "{{fileName}}" }, "parameter_name": "document" } ] }, { "type": "BODY", "parameters": [ { "text": "{{name}}", "type": "TEXT", "parameter_name": "1" }, { "text": "{{event}}", "type": "TEXT", "parameter_name": "2" }, { "text": "{{amount}}", "type": "TEXT", "parameter_name": "3" } ] }, { "type": "BUTTON", "index": 0, "sub_type": "URL", "parameters": [ { "text": "https://www.mystore.com/", "type": "text", "parameter_name": "1" } ] } ] } }, "PUSH": { "channel": "PUSH", "title": "Welcome!", "body": "Thanks for installing our app.", "priority": "high" }, "IN_APP": { "channel": "IN_APP", "title": "Welcome Aboard!", "body": "Get started with our app by completing your profile.", "type": "WELCOME" } } ``` </RequestExample> ## Body Parameters <ParamField body="SMS" type="object"> Configuration for SMS channel. <ParamField type="string" required> Must be set to "SMS". </ParamField> <ParamField type="string" required> The message content for SMS. </ParamField> <ParamField type="boolean"> Set to `true` to send as a flash SMS. Default: `false`. </ParamField> <ParamField type="boolean"> Set to `true` for messages containing non-ASCII characters. Default: `false`. </ParamField> </ParamField> <ParamField body="EMAIL" type="object"> Configuration for Email channel. <ParamField type="string" required> Must be set to "EMAIL". </ParamField> <ParamField type="string" required> The email subject line. </ParamField> <ParamField type="string" required> The email body content. Can be HTML or plain text based on `isRawHTML` and `isPlainText` flags. </ParamField> <ParamField type="string"> The sender's email address. </ParamField> <ParamField type="string"> The reply-to email address. </ParamField> <ParamField type="array"> List of CC email addresses. </ParamField> <ParamField type="array"> List of BCC email addresses. </ParamField> <ParamField type="array"> Array of attachment objects. </ParamField> <ParamField type="boolean"> Set to `true` if `body` contains raw HTML. Default: `false`. </ParamField> <ParamField type="boolean"> Set to `true` if `body` is plain text. Default: `false`. </ParamField> </ParamField> <ParamField body="SLACK" type="object"> Configuration for Slack channel. <ParamField type="string" required> Must be set to "SLACK". </ParamField> <ParamField type="string" required> The message content for Slack. </ParamField> <ParamField type="array"> Array of Slack attachment objects. </ParamField> <ParamField type="array"> Array of interactive button objects. <ParamField type="object"> <ParamField type="string"> The button's display text. </ParamField> <ParamField type="string"> A unique identifier for the button's action. </ParamField> <ParamField type="string"> The value sent when the button is clicked. </ParamField> <ParamField type="string"> The button style (e.g., "primary", "danger"). </ParamField> </ParamField> </ParamField> </ParamField> <ParamField body="WHATSAPP" type="object"> Configuration for WhatsApp channel. <ParamField type="string" required> Must be set to "WHATSAPP". </ParamField> <ParamField type="string" required> The name of the WhatsApp template. </ParamField> <ParamField type="string" required> The language code for the template (e.g., "en"). </ParamField> <ParamField type="string"> The namespace for the WhatsApp template. </ParamField> <ParamField type="array"> Array of message components (headers, body, buttons). <ParamField type="object"> <ParamField type="string"> Component type (e.g., "header", "body", "button"). </ParamField> <ParamField type="array"> Array of parameter objects for the component. <ParamField type="object"> <ParamField type="string"> Parameter type (e.g., "text", "image"). </ParamField> <ParamField type="string"> Text content (for text parameters). </ParamField> </ParamField> </ParamField> </ParamField> </ParamField> </ParamField> <ParamField body="PUSH" type="object"> Configuration for Push Notifications. <ParamField type="string" required> Must be set to "PUSH". </ParamField> <ParamField type="string" required> The title of the push notification. </ParamField> <ParamField type="string" required> The message content of the push notification. </ParamField> <ParamField type="string"> URL of an image to include in the push notification. </ParamField> <ParamField type="string"> URL to open when the notification is clicked. </ParamField> </ParamField> <ParamField body="IN_APP" type="object"> Configuration for In-App Notifications. <ParamField type="string" required> Must be set to "IN\_APP". </ParamField> <ParamField type="string" required> The title of the in-app notification. </ParamField> <ParamField type="string" required> The message content of the in-app notification. </ParamField> <ParamField type="string"> The type of in-app notification. </ParamField> <ParamField type="string"> The priority level of the notification. </ParamField> <ParamField type="integer"> Time in hours after which the notification expires. </ParamField> <ParamField type="array"> Array of action buttons for the notification. <ParamField type="object"> <ParamField type="string"> The type of action. </ParamField> <ParamField type="string"> The display text for the action button. </ParamField> </ParamField> </ParamField> </ParamField> <ParamField body="PUSH.android" type="object"> Android-specific push notification settings. <ParamField type="string"> The Android notification channel ID. </ParamField> <ParamField type="string"> The name of the icon to display. </ParamField> <ParamField type="string"> The color of the notification (hex format). </ParamField> <ParamField type="string"> The sound to play when the notification arrives. </ParamField> </ParamField> <ParamField body="PUSH.ios" type="object"> iOS-specific push notification settings. <ParamField type="string"> The sound to play when the notification arrives. </ParamField> <ParamField type="integer"> The number to display as the app's icon badge. </ParamField> <ParamField type="string"> The category identifier for custom actions. </ParamField> </ParamField> <ParamField body="PUSH.web" type="object"> Web push notification settings. <ParamField type="string"> URL of the icon to display. </ParamField> <ParamField type="string"> URL of the badge to display. </ParamField> </ParamField> <ParamField body="PUSH.deepLink" type="string"> The deep link URL to open when the notification is clicked. </ParamField> <ParamField body="PUSH.timeToLive" type="integer"> Time in seconds that the push notification should be kept if the device is offline. </ParamField> <ParamField body="PUSH.priority" type="string"> The priority of the push notification. Can be 'high', 'normal', or 'low'. </ParamField> <ParamField body="PUSH.analyticsLabel" type="string"> A label for analytics tracking of the notification. </ParamField> # Create Provider Integration Source: https://docs.trysiren.io/docs/API-Reference/CreateProviderIntegrationAPI POST /api/v1/public/provider-integrations API to create a new provider integration in Siren ## Header <ParamField header="Authorization" type="string" required="true" /> <ParamField header="Content-Type" type="string" required="true" /> ## Request Body <ParamField path="providerCode" type="string" required="true" /> <ParamField path="name" type="string" required="true" /> <ParamField path="configuration" type="object" required="true" /> ### ## Request Example <RequestExample> ```json Request Example theme={null} { "providerCode": "SLACK", "name": "provider-integrations-name", "configuration": { "botAuthToken": "your-auth-token", "appId": "your-app-id" }, "isPrimary": false } ``` </RequestExample> ## Response <ResponseExample> ```json theme={null} { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "providerCode": "SLACK", "name": "provider-integrations-name", "status": "ACTIVE", "configuration": { "botAuthToken": "your-auth-token", "appId": "your-app-id" }, "isPrimary": false, "createdAt": "2025-07-29T12:00:00Z", "updatedAt": "2025-07-29T12:00:00Z" } ``` </ResponseExample> ## Status Codes `201` - Created: Provider integration created successfully\ `400` - Bad Request: Invalid input data\ `401` - Unauthorized: Invalid or missing authentication\ `409` - Conflict: Provider integration with this name already exists\ `500` - Internal Server Error: Failed to create provider integration ## cURL Example ```bash theme={null} curl --location 'https://api.trysiren.io/api/v1/public/provider-integrations' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer bd9d07a8073a41eca003e5f0a841db7c' \ --data '{ "providerCode": "SLACK", "name": "provider-integrations-name", "configuration": { "botAuthToken": "your-auth-token", "appId": "your-app-id" }, "isPrimary": false }' ``` # Create Template Source: https://docs.trysiren.io/docs/API-Reference/CreateTemplateAPI POST https://api.trysiren.io/api/v1/public/template Create a new template with channel-specific configurations ## Header <ParamField header="Authorization" type="string" required> Bearer token for API authentication. Format: `Bearer {{apiToken}}` </ParamField> ```json Request Body theme={null} { "name": <template_name>, "description": <description>, "tagNames": [ <tagName> ], "variables": [ { "name": <variable_name>, "defaultValue": <default_value> } ], "configurations": { "SMS": { "body": <body>, "channel": "SMS", "isFlash": <boolean_value>, "isUnicode": <boolean_value> }, "EMAIL": { "subject": <subject>, "channel": "EMAIL", "body": <body>, "attachments": [], "isRawHTML": <boolean_value>, "isPlainText": <boolean_value> } } } ``` ## Body Parameters <ParamField body="name" type="string" required> Specifies the name of the template. </ParamField> <ParamField body="description" type="string"> A brief description of the template. </ParamField> <ParamField body="tagNames" type="array"> A list of tag names associated with the template. </ParamField> <ParamField body="variables" type="array"> A list of variables used in the template. <ParamField type="object"> <ParamField type="string"> The name of the variable. </ParamField> <ParamField type="string"> The default value for the variable. </ParamField> </ParamField> </ParamField> <ParamField body="configurations" type="object" required> Channel-specific configurations for the template. <ParamField type="object"> <ParamField type="string"> SMS message body text. </ParamField> <ParamField type="string"> "SMS" — channel type. </ParamField> <ParamField type="boolean"> Flash SMS flag. </ParamField> <ParamField type="boolean"> Unicode support flag. </ParamField> </ParamField> <ParamField type="object"> <ParamField type="string"> Email subject line. </ParamField> <ParamField type="string"> "EMAIL" — channel type. </ParamField> <ParamField type="string"> Email body (HTML or plain text). </ParamField> <ParamField type="array"> List of attachment references. </ParamField> <ParamField type="boolean"> `true` if `body` contains raw HTML. </ParamField> <ParamField type="boolean"> `true` if `body` is plain text. </ParamField> </ParamField> </ParamField> <RequestExample> ```json Request Example theme={null} { "name": "Sample_Template1", "description": "sample template description", "tagNames": [ "sample_tag_1", "sample_tag_2" ], "variables": [ { "name": "var1", "defaultValue": "var1 value" } ], "configurations": { "SMS": { "body": "sample message body", "channel": "SMS", "isFlash": false, "isUnicode": false }, "WHATSAPP": { "channel": "WHATSAPP", "type": "TEMPLATE", "template": { "name": "payment_request_template", "language": { "code": "EN" }, "components": [ { "type": "HEADER", "parameters": [ { "type": "DOCUMENT", "document": { "link": "{{doc}}", "filename": "{{fileName}}" }, "parameter_name": "document" } ] }, { "type": "BODY", "parameters": [ { "text": "{{name}}", "type": "TEXT", "parameter_name": "1" }, { "text": "{{event}}", "type": "TEXT", "parameter_name": "2" }, { "text": "{{amount}}", "type": "TEXT", "parameter_name": "3" } ] }, { "type": "BUTTON", "index": 0, "sub_type": "URL", "parameters": [ { "text": "https://www.mystore.com/", "type": "text", "parameter_name": "1" } ] } ] } }, "EMAIL": { "subject": "test email subject", "channel": "EMAIL", "body": "<p>test body</p>", "attachments": [], "isRawHTML": false, "isPlainText": false } } } ``` </RequestExample> ## Response <ResponseField name="data" type="object"> <ResponseField name="templateId" type="UUID"> Template ID. </ResponseField> <ResponseField name="templateName" type="string"> Template name. </ResponseField> <ResponseField name="draftVersionId" type="UUID"> Draft version ID. </ResponseField> <ResponseField name="channelTemplateList" type="array"> List of channel-specific template metadata. <ResponseField type="object"> <ResponseField name="id" type="UUID"> Channel template ID. </ResponseField> <ResponseField name="channel" type="string"> Channel name (e.g., `"SMS"`, `"EMAIL"`). </ResponseField> <ResponseField name="configuration" type="object"> Embedded configuration object. <ResponseField name="channel" type="string"> Channel name. </ResponseField> </ResponseField> <ResponseField name="templateVersionId" type="UUID"> Template version ID. </ResponseField> </ResponseField> </ResponseField> </ResponseField> <ResponseField name="error" type="object"> <ResponseField name="errorCode" type="string"> The error code (e.g., `BAD_REQUEST`). </ResponseField> <ResponseField name="message" type="string"> A human-readable error message. </ResponseField> </ResponseField> <ResponseExample> ```json success (200) theme={null} { "data": { "templateId": "UUID", // Template ID "templateName": "string", // Template name "draftVersionId": "UUID", // Draft version ID "channelTemplateList": [ { "id": "UUID", // Channel template ID "channel": "string", // Channel type "configuration": { "channel": "string" // Channel type }, "templateVersionId": "UUID" // Template version ID }, { "id": "UUID", "channel": "string", "configuration": { "channel": "string" }, "templateVersionId": "UUID" } ] }, "error": null, "errors": null, "meta": null } ``` ```json Bad Request (400) theme={null} { "data": null, "error": { "errorCode": "BAD_REQUEST", "message": "Bad request" }, "errors": [ { "errorCode": "BAD_REQUEST", "message": "Bad request" } ], "meta": null } ``` </ResponseExample> # Delete Provider Integration Source: https://docs.trysiren.io/docs/API-Reference/DeleteProviderIntegrationAPI DELETE /api/v1/public/provider-integrations/{providerId} API to delete an existing provider integration from Siren ## Header <ParamField header="Authorization" type="string" required={true} description="Bearer token for API authentication. Format: `Bearer {{apiToken}}" /> <ParamField header="Content-Type" type="string" required={true} description="Must be set to `application/json`" /> ## Path Parameters <ParamField name="providerId" path="providerId" type="string" required={true} description="Unique identifier of the provider integration to delete" /> ## Response <ResponseExample> ```json theme={null} { "success": true, "message": "Provider integration deleted successfully", "data": { "id": "a8f39791-60ec-45a6-beb9-ead8f8d859af", "name": "provider-integrations-name", "providerCode": "SLACK" } } ``` </ResponseExample> ## Status Codes `200` - OK: Provider integration deleted successfully\ `401` - Unauthorized: Invalid or missing authentication\ `404` - Not Found: Provider integration not found\ `500` - Internal Server Error: Failed to delete provider integration ## cURL Example ```bash theme={null} curl --location --request DELETE 'https://api.trysiren.io/api/v1/public/provider-integrations/a8f39791-60ec-45a6-beb9-ead8f8d859af' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer bd9d07a8073a41eca003e5f0a841db7c' ``` # Delete Template Source: https://docs.trysiren.io/docs/API-Reference/DeleteTemplateAPI DELETE https://api.trysiren.io/api/v1/public/template/{{template_id}} Delete an existing template ## Header <ParamField header="Authorization" type="string" required> Bearer token for API authentication. Format: `Bearer {{apiToken}}` </ParamField> ## Query Parameters <ParamField query="template_id" type="UUID" required> The ID of the template to delete. </ParamField> ## Response <ParamField name="data" type="object"> <ParamField name="templateId" type="UUID"> Template ID that was deleted. </ParamField> </ParamField> <ParamField name="error" type="object"> <ParamField name="errorCode" type="string"> The error code (e.g., `BAD_REQUEST`). </ParamField> <ParamField name="message" type="string"> A human-readable error message. </ParamField> </ParamField> <ResponseExample> ```json success (200) theme={null} { "data": { "templateId": "UUID" // Template ID that was deleted }, "error": null, "errors": null, "meta": null } ``` ```json bad request (400) theme={null} { "data": null, "error": { "errorCode": "BAD_REQUEST", "message": "Bad request" }, "errors": [ { "errorCode": "BAD_REQUEST", "message": "Bad request" } ], "meta": null } ``` ```json unauthorised (401) theme={null} { "data": null, "error": { "errorCode": "UNAUTHORISED", "message": "Unauthorised" }, "errors": [ { "errorCode": "UNAUTHORISED", "message": "Unauthorised" } ], "meta": null } ``` ```json not found (404) theme={null} { "data": null, "error": { "errorCode": "NOT FOUND", "message": "Not found" }, "errors": [ { "errorCode": "NOT FOUND", "message": "Not found" } ], "meta": null } ``` </ResponseExample> ## Status Codes * `200` - OK * `400` - BAD REQUEST * `401` - UNAUTHORISED * `404` - NOT FOUND # Delete User Source: https://docs.trysiren.io/docs/API-Reference/DeleteUserAPI DELETE /api/v1/public/users/{uniqueId} API to delete the user information ## Header <ParamField header="Authorization" type="string" required> Bearer token for API authentication. Format: `Bearer {{apiToken}}` </ParamField> ## Parameters <ParamField path="uniqueId" type="string" required> Unique identifier of the user to be deleted. </ParamField> <ParamField type="string" required /> ## Status Codes `200` - OK # End Chat Session Source: https://docs.trysiren.io/docs/API-Reference/EndChatSessionAPI POST /api/v1/chat/end End an active chat session and terminate the conversation ## Header <ParamField header="Authorization" type="string" required> Bearer token for API authentication. Format: `Bearer {{apiToken}}` </ParamField> <RequestExample> ```json Request Example theme={null} { "chatNodeId": "chat_node_id_1", "workflowExecutionId": "123e4567-e89b-12d3-a456-426614174000" } ``` </RequestExample> ## Request Body ```json theme={null} { "chatNodeId": "<chat_node_id>", "workflowExecutionId": "<workflow_execution_id>" } ``` ## Body Parameters <ParamField body="chatNodeId" type="string" required> The unique identifier of the chat node to end </ParamField> <ParamField body="workflowExecutionId" type="string" required> The UUID of the workflow execution </ParamField> ## Response Success Response (200 OK) * The API returns an empty response body with HTTP status 200 when the chat session has successfully ended. ## Status Codes * `200` - OK * `400` - BAD REQUEST * `401` - UNAUTHORISED * `404` - NOT FOUND # Get All Channel Templates Source: https://docs.trysiren.io/docs/API-Reference/GetAllChannelTemplatesAPI GET /api/v1/public/template/versions/{versionId}/channel-templates Get Channel Templates of a template version with filtering and pagination ## Header <ParamField header="Authorization" type="string" required> Bearer token for API authentication. Format: `Bearer {{apiToken}}` </ParamField> ## Query Parameters <ParamField query="versionId" type="uuid" required> The ID of the template version. </ParamField> ## Body Parameters <ParamField body="channel" type="string"> Filter channel templates by channel. </ParamField> <ParamField body="search" type="string"> Search channel templates by field. </ParamField> <ParamField body="sort" type="string"> Sort channel templates by field. </ParamField> <ParamField body="page" type="integer"> Page number for pagination. Default: 0. </ParamField> <ParamField body="size" type="integer"> Number of items per page. Default: 10. </ParamField> # Get Message Replies Source: https://docs.trysiren.io/docs/API-Reference/GetMessageRepliesAPI GET /get-reply/{notificationId} Fetches replies to a previously sent notification. Currently supported for Slack only. ## Header <ParamField header="Authorization" type="string" required> Bearer token for API authentication. Format: `Bearer {{apiToken}}` **Required:** API Key with full access </ParamField> ## Path Parameters <ParamField path type="string" required> Unique ID of the sent notification (UUID format) </ParamField> ## Response ### Success Response (200 OK) Returns an array of messages (including top-level and threaded replies). <ResponseField name="text" type="string" required> Message content </ResponseField> <ResponseField name="user" type="string" required> Slack user ID of the sender </ResponseField> <ResponseField name="ts" type="string" required> Slack message timestamp (used for threading and ordering) </ResponseField> <ResponseField name="thread_ts" type="string"> Timestamp of the parent message if this is a threaded reply </ResponseField> ## Response Examples <ResponseExample> ```json HTTP 200 - Success theme={null} [ { "text": "Main message content", "user": "U01ABC123", "ts": "1718690834.000100" }, { "text": "This is a threaded reply", "user": "U01XYZ456", "ts": "1718690845.000300", "thread_ts": "1718690834.000100" } ] ``` </ResponseExample> <Note> * This endpoint currently supports Slack only. * The `thread_ts` field is only present in threaded messages. * Message timestamps (`ts` and `thread_ts`) follow Slack's timestamp format. </Note> # Get Message Status Source: https://docs.trysiren.io/docs/API-Reference/GetMessageStatusAPI GET /message-status/{notificationId} Fetches the current delivery status of a previously sent notification message ## Header <ParamField header="Authorization" type="string" required> Bearer token for API authentication. Format: `Bearer {{apiToken}}` **Required:** API Key with full access </ParamField> ## Path Parameters <ParamField name="id" type="UUID" path required> Unique ID of the sent notification </ParamField> ## Response ### Success Response (200 OK) <ResponseField name="status" type="string" required> Current status of the message (enum value) </ResponseField> ## Response Examples ### Example: Successful Status Check ```json theme={null} { "status": "DELIVERED" } ``` ## Possible Status Values * `QUEUED`: Message is queued for sending * `SENT`: Message has been sent to the provider * `DELIVERED`: Message has been delivered to the recipient * `FAILED`: Message delivery failed * `READ`: Message has been read by the recipient (if supported by channel) # List Templates API Source: https://docs.trysiren.io/docs/API-Reference/ListTemplatesAPI GET https://api.trysiren.io/api/v1/public/template Fetch all templates with filtering and pagination ## Header <ParamField header="Authorization" type="string" required> Bearer token for API authentication. Format: `Bearer {{apiToken}}` </ParamField> ## Query Parameters <ParamField query="tagNames" type="string"> Filter templates by tag names. </ParamField> <ParamField query="search" type="string"> Search templates by field. </ParamField> <ParamField query="sort" type="string"> Sort templates by field. </ParamField> <ParamField query="page" type="integer"> Page number for pagination. Default: 0. </ParamField> <ParamField query="size" type="integer"> Number of items per page. Default: 10. </ParamField> ## Response <ResponseField name="data" type="object"> <ResponseField name="totalElements" type="integer"> Total number of templates. </ResponseField> <ResponseField name="totalPages" type="integer"> Total number of pages. </ResponseField> <ResponseField name="size" type="integer"> Page size. </ResponseField> <ResponseField name="content" type="array"> List of template objects. <ResponseField type="object"> <ResponseField name="id" type="UUID"> Template ID. </ResponseField> <ResponseField name="name" type="string"> Template name. </ResponseField> <ResponseField name="description" type="string"> Template description. </ResponseField> <ResponseField name="variables" type="array"> List of template variables. <ResponseField type="object"> <ResponseField name="name" type="string"> Variable name. </ResponseField> <ResponseField name="defaultValue" type="string"> Default value for the variable. </ResponseField> </ResponseField> </ResponseField> <ResponseField name="tags" type="array"> List of template tags. </ResponseField> <ResponseField name="draftVersion" type="object"> Draft version details. <ResponseField name="id" type="UUID"> Version ID. </ResponseField> <ResponseField name="version" type="integer"> Version number. </ResponseField> <ResponseField name="status" type="string"> Version status (e.g., "PUBLISHED\_LATEST"). </ResponseField> <ResponseField name="publishedAt" type="datetime"> Timestamp of when the version was published. </ResponseField> </ResponseField> <ResponseField name="publishedVersion" type="object"> Published version details. <ResponseField name="id" type="UUID"> Version ID. </ResponseField> <ResponseField name="version" type="integer"> Version number. </ResponseField> <ResponseField name="status" type="string"> Version status (e.g., "PUBLISHED\_LATEST"). </ResponseField> <ResponseField name="publishedAt" type="datetime"> Timestamp of when the version was published. </ResponseField> </ResponseField> <ResponseField name="templateVersions" type="array"> List of all template versions. <ResponseField type="object"> <ResponseField name="id" type="UUID"> Version ID. </ResponseField> <ResponseField name="version" type="integer"> Version number. </ResponseField> <ResponseField name="status" type="string"> Version status (e.g., "PUBLISHED\_LATEST"). </ResponseField> <ResponseField name="publishedAt" type="datetime"> Timestamp of when the version was published. </ResponseField> </ResponseField> </ResponseField> </ResponseField> </ResponseField> <ResponseField name="number" type="integer"> Current page number. </ResponseField> <ResponseField name="sort" type="object"> Sort information. <ResponseField name="empty" type="boolean"> Whether the sort is empty. </ResponseField> <ResponseField name="unsorted" type="boolean"> Whether the sort is unsorted. </ResponseField> <ResponseField name="sorted" type="boolean"> Whether the sort is sorted. </ResponseField> </ResponseField> <ResponseField name="numberOfElements" type="integer"> Number of elements on this page. </ResponseField> <ResponseField name="first" type="boolean"> Whether this is the first page. </ResponseField> <ResponseField name="last" type="boolean"> Whether this is the last page. </ResponseField> <ResponseField name="pageable" type="object"> Pageable information. <ResponseField name="offset" type="integer"> Page offset. </ResponseField> <ResponseField name="sort" type="object"> Sort information. <ResponseField name="empty" type="boolean"> Whether the sort is empty. </ResponseField> <ResponseField name="unsorted" type="boolean"> Whether the sort is unsorted. </ResponseField> <ResponseField name="sorted" type="boolean"> Whether the sort is sorted. </ResponseField> </ResponseField> <ResponseField name="pageNumber" type="integer"> Page number. </ResponseField> <ResponseField name="paged" type="boolean"> Whether pagination is enabled. </ResponseField> <ResponseField name="pageSize" type="integer"> Page size. </ResponseField> <ResponseField name="unpaged" type="boolean"> Whether pagination is disabled. </ResponseField> </ResponseField> <ResponseField name="empty" type="boolean"> Whether the result is empty. </ResponseField> </ResponseField> <ResponseField name="error" type="object"> <ResponseField name="errorCode" type="string"> The error code (e.g., `BAD_REQUEST`). </ResponseField> <ResponseField name="message" type="string"> A human-readable error message. </ResponseField> </ResponseField> <ResponseField name="errors" type="array"> List of error objects. <ResponseField type="object"> <ResponseField name="errorCode" type="string"> Error code. </ResponseField> <ResponseField name="message" type="string"> Error message. </ResponseField> </ResponseField> </ResponseField> <ResponseField name="meta" type="object"> Metadata object. </ResponseField> <ResponseExample> ```json success (200) theme={null} { "data": { "totalElements": 0, "totalPages": 0, "size": 0, "content": [ { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "name": "string", "description": "string", "variables": [ { "name": "string", "defaultValue": "string" } ], "tags": [ "string" ], "draftVersion": { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "version": 0, "status": "PUBLISHED_LATEST", "publishedAt": "2024-08-30T07:31:07.380Z" }, "publishedVersion": { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "version": 0, "status": "PUBLISHED_LATEST", "publishedAt": "2024-08-30T07:31:07.380Z" }, "templateVersions": [ { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "version": 0, "status": "PUBLISHED_LATEST", "publishedAt": "2024-08-30T07:31:07.380Z" } ] } ], "number": 0, "sort": { "empty": true, "unsorted": true, "sorted": true }, "numberOfElements": 0, "first": true, "last": true, "pageable": { "offset": 0, "sort": { "empty": true, "unsorted": true, "sorted": true }, "pageNumber": 0, "paged": true, "pageSize": 0, "unpaged": true }, "empty": true }, "error": null, "errors": null, "meta": null } ``` ```json bad request (400) theme={null} { "data": null, "error": { "errorCode": "BAD_REQUEST", "message": "Bad request" }, "errors": [ { "errorCode": "BAD_REQUEST", "message": "Bad request" } ], "meta": null } ``` ```json unauthorised (401) theme={null} { "data": null, "error": { "errorCode": "UNAUTHORISED", "message": "Unauthorised" }, "errors": [ { "errorCode": "UNAUTHORISED", "message": "Unauthorised" } ], "meta": null } ``` ```json not found (404) theme={null} { "data": null, "error": { "errorCode": "NOT FOUND", "message": "Not found" }, "errors": [ { "errorCode": "NOT FOUND", "message": "Not found" } ], "meta": null } ``` </ResponseExample> ## Status Codes * `200` - OK * `400` - BAD REQUEST * `401` - UNAUTHORISED * `404` - NOT FOUND # Update Webhook Configuration Source: https://docs.trysiren.io/docs/API-Reference/NotificationWebhookAPI PUT /api/v1/public/webhooks Configure webhook endpoints for receiving notification events from Siren ## Header <ParamField header="Authorization" type="string" required={true} description="Bearer token for API authentication. Format: `Bearer {{apiToken}}" /> ## Request Body ```json theme={null} { "webhookConfig": { "url": "https://your-webhook-url.com/notifications" }, "inboundWebhookConfig": { "url": "https://your-webhook-url.com/inbound" } } ``` ## Request Fields ### webhookConfig (Optional) <ParamField body="webhookConfig" type="object"> Configuration for notification webhook <ParamField body="url" type="string" required> The URL where notification events will be sent </ParamField> </ParamField> ### inboundWebhookConfig (Optional) <ParamField body="inboundWebhookConfig" type="object"> Configuration for inbound message webhook <ParamField body="url" type="string" required> The URL where inbound messages will be sent </ParamField> </ParamField> ## Example: cURL Request ```bash theme={null} curl --location --request PUT 'https://api.trysiren.io/api/v1/public/webhooks' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer your-access-token' \ --data-raw '{ "webhookConfig": { "url": "https://your-webhook-url.com/notifications" }, "inboundWebhookConfig": { "url": "https://your-webhook-url.com/inbound" } }' ``` ## Response ### Success Response (200 OK) ```json theme={null} { "id": "123e4567-e89b-12d3-a456-426614174000", "environment": "PRODUCTION", "webhookConfig": { "url": "https://your-webhook-url.com/notifications", "headers": [ { "name": "Custom-Header", "value": "custom-value" } ], "verificationKey": "webhook-secret-key" }, "inboundWebhookConfig": { "url": "https://your-webhook-url.com/inbound", "headers": [], "verificationKey": "inbound-secret-key" } } ``` ## Webhook Payloads ### Notification Webhook Payload When a notification event occurs, Siren will send a POST request to the configured webhook URL with the following payload structure: ```json theme={null} { "event": "notification.status.updated", "timestamp": "2023-01-01T12:00:00Z", "data": { "notificationId": "123e4567-e89b-12d3-a456-426614174000", "status": "delivered", "channel": "email", "recipient": "user@example.com", "metadata": { "workflowId": "w-1234567890", "templateId": "tpl-1234567890" } } } ``` ### Webhook Headers Each webhook request will include the following headers: * `x-siren-webhook-signature`: A signature you can use to verify the webhook's authenticity. * `Content-Type`: `application/json` (set by HTTP client) * Any custom headers configured in your webhook configuration. ## Error Responses ### 400 Bad Request ```json theme={null} { "success": false, "message": "Invalid request body", "errors": [ "At least one of webhookConfig or inboundWebhookConfig must be provided" ] } ``` ### 401 Unauthorized ```json theme={null} { "success": false, "message": "Unauthorized", "error": "Invalid or missing authentication token" } ``` ## Best Practices 1. Always verify the `X-Siren-Signature` header to ensure the webhook is from Siren. 2. Implement retry logic for handling failed webhook deliveries. 3. Set up appropriate rate limiting on your webhook endpoint. 4. Keep your webhook URL secure and never expose it in client-side code. 5. Handle duplicate events by checking the `X-Siren-Delivery` header. # Publish Template Source: https://docs.trysiren.io/docs/API-Reference/PublishTemplateAPI PATCH https://api.trysiren.io/api/v1/public/template/{{template_id}}/publish Publish draft version of a template ## Header <ParamField header="Authorization" type="string" required> Bearer token for API authentication. Format: `Bearer {{apiToken}}` </ParamField> ## Query Parameters <ParamField query="template_id" type="UUID" required> The ID of the template to publish. </ParamField> ## Response <ResponseField name="data" type="object"> <ResponseField name="id" type="UUID"> Template ID. </ResponseField> <ResponseField name="name" type="string"> Template name. </ResponseField> <ResponseField name="description" type="string"> Template description. </ResponseField> <ResponseField name="variables" type="array"> List of template variables. <ResponseField type="object"> <ResponseField name="name" type="string"> Variable name. </ResponseField> <ResponseField name="defaultValue" type="string"> Default value for the variable. </ResponseField> </ResponseField> </ResponseField> <ResponseField name="tags" type="array"> List of template tags. </ResponseField> <ResponseField name="draftVersion" type="object"> Draft version details. <ResponseField name="id" type="UUID"> Version ID. </ResponseField> <ResponseField name="version" type="integer"> Version number. </ResponseField> <ResponseField name="status" type="string"> Version status (e.g., "PUBLISHED\_LATEST"). </ResponseField> <ResponseField name="publishedAt" type="datetime"> Timestamp of when the version was published. </ResponseField> </ResponseField> <ResponseField name="publishedVersion" type="object"> Published version details. <ResponseField name="id" type="UUID"> Version ID. </ResponseField> <ResponseField name="version" type="integer"> Version number. </ResponseField> <ResponseField name="status" type="string"> Version status (e.g., "PUBLISHED\_LATEST"). </ResponseField> <ResponseField name="publishedAt" type="datetime"> Timestamp of when the version was published. </ResponseField> </ResponseField> <ResponseField name="templateVersions" type="array"> List of all template versions. <ResponseField type="object"> <ResponseField name="id" type="UUID"> Version ID. </ResponseField> <ResponseField name="version" type="integer"> Version number. </ResponseField> <ResponseField name="status" type="string"> Version status (e.g., "PUBLISHED\_LATEST"). </ResponseField> <ResponseField name="publishedAt" type="datetime"> Timestamp of when the version was published. </ResponseField> </ResponseField> </ResponseField> </ResponseField> <ResponseField name="error" type="object"> <ResponseField name="errorCode" type="string"> The error code (e.g., `BAD_REQUEST`). </ResponseField> <ResponseField name="message" type="string"> A human-readable error message. </ResponseField> </ResponseField> <ResponseExample> ```json success (200) theme={null} { "data": { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "name": "string", "description": "string", "variables": [ { "name": "string", "defaultValue": "string" } ], "tags": [ "string" ], "draftVersion": { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "version": 0, "status": "PUBLISHED_LATEST", "publishedAt": "2024-08-30T07:39:49.292Z" }, "publishedVersion": { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "version": 0, "status": "PUBLISHED_LATEST", "publishedAt": "2024-08-30T07:39:49.292Z" }, "templateVersions": [ { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "version": 0, "status": "PUBLISHED_LATEST", "publishedAt": "2024-08-30T07:39:49.292Z" } ] }, "error": null, "errors": null, "meta": null } ``` ```json bad request (400) theme={null} { "data": null, "error": { "errorCode": "BAD_REQUEST", "message": "Bad request" }, "errors": [ { "errorCode": "BAD_REQUEST", "message": "Bad request" } ], "meta": null } ``` </ResponseExample> ## Status Codes * `200` - OK * `400` - BAD REQUEST * `401` - UNAUTHORISED * `404` - NOT FOUND # Send Message Source: https://docs.trysiren.io/docs/API-Reference/SendMessageAPI POST /api/v1/messages/send Sends a message via a specified channel (Email, WhatsApp, Slack, etc.) to a recipient with support for templating ## Header <ParamField header="Authorization" type="string" required={true} description="Bearer token for API authentication. Format: `Bearer {{apiToken}}" /> ## Request Body ```json theme={null} { "channel": "EMAIL | SMS | WHATSAPP | SLACK | TEAMS | DISCORD | LINE | IN_APP | PUSH", "recipient": { "email": "user@example.com", "sms": "+911234567890", "whatsapp": "+911234567890", "pushToken": "push-token-123", "inApp": "internal-user-id", "slack": "U01XXXXXXX", "discord": "discord-user-id", "teams": "teams-user-id", "line": "line-user-id", "userId": "unified-user-id" }, "template": { "name": "welcome_template" }, "templateVariables": { "firstName": "John", "offerCode": "ABCD123" }, "providerIntegration": { "id": "provider-uuid-1234", "name": "Provider Name", "code": "SLACK | TWILIO | WATI | ..." }, "subject": "Welcome to our app!", "body": "Hello John, welcome onboard!", "buttons": [ { "text": "Visit Website", "value": "https://example.com" } ] } ``` ## Request Fields ### Required Fields <ParamField body="channel" type="string" required> The communication channel. One of: `EMAIL`, `SMS`, `WHATSAPP`, `SLACK`, `TEAMS`, `DISCORD`, `LINE`, `IN_APP`, `PUSH` </ParamField> <ParamField body="recipient" type="object" required> The destination for the message. Must include the field matching the selected channel. <ParamField type="string"> Recipient's email address (for EMAIL channel) </ParamField> <ParamField type="string"> Recipient's phone number (for SMS channel) </ParamField> <ParamField type="string"> Recipient's WhatsApp number (for WHATSAPP channel) </ParamField> <ParamField type="string"> Recipient's Slack user ID (for SLACK channel) </ParamField> <ParamField type="string"> Unified user ID if supported across channels </ParamField> </ParamField> ### Optional Fields <ParamField body="template" type="object"> Template configuration for the message <ParamField type="string"> Template name as registered in the system </ParamField> </ParamField> <ParamField body="templateVariables" type="object"> Key-value pairs to populate template placeholders </ParamField> <ParamField body="providerIntegration" type="object"> Provider configuration <ParamField type="UUID"> ID of the provider integration </ParamField> <ParamField type="string"> Name of the provider </ParamField> <ParamField type="string"> Provider code (e.g., `SLACK`, `TWILIO`) </ParamField> </ParamField> <ParamField body="subject" type="string"> Message subject (for EMAIL only) </ParamField> <ParamField body="body" type="string"> Message body (for SLACK, EMAIL, TEAMS) </ParamField> <ParamField body="buttons" type="array"> Interactive buttons (for SLACK only) <ParamField type="object"> <ParamField type="string"> Button display text </ParamField> <ParamField type="string"> Button action value or URL </ParamField> </ParamField> </ParamField> ## Response ### Success Response (200 OK) ```json theme={null} { "notificationId": "c1234567-89ab-4def-9012-3456789abcdef" } ``` ### Response Fields <ResponseField name="notificationId" type="UUID"> Unique identifier for the sent message </ResponseField> ## Error Responses * `400` - Bad Request (Invalid request format or missing required fields) * `401` - Unauthorized (Missing or invalid API key) * `403` - Forbidden (Insufficient permissions to send message) * `404` - Not Found (Template or provider not found) * `429` - Too Many Requests * `500` - Internal Server Error ## Examples <CodeGroup> ```json Send Slack Message with Buttons theme={null} { "channel": "SLACK", "recipient": { "slack": "U01ABCDEF" }, "body": "Hello from Slack!", "buttons": [ { "text": "Open App", "value": "open_app" } ], "providerIntegration": { "code": "SLACK", "name": "Slack Default" } } ``` ```json Send Email with Template theme={null} { "channel": "EMAIL", "recipient": { "email": "user@example.com" }, "template": { "name": "welcome_email" }, "templateVariables": { "firstName": "John", "expiryDate": "2023-12-31" }, "providerIntegration": { "code": "SENDGRID", "name": "Production Email" } } ``` ```json Send SMS with Raw Message theme={null} { "channel": "SMS", "recipient": { "sms": "+1234567890" }, "body": "Your verification code is 123456. Valid for 10 minutes.", "providerIntegration": { "code": "TWILIO", "name": "Twilio Production" } } ``` </CodeGroup> # Single Trigger Source: https://docs.trysiren.io/docs/API-Reference/TriggerWorkflowAPI POST https://api.trysiren.io/api/v2/workflows/trigger Single Trigger for Workflow ## Header <ParamField header="apiToken" type="string" required> Bearer token for API authentication. Format: `Bearer {{apiToken}}` </ParamField> ```json Request Body theme={null} { "workflowName": "<workflow_name>", "data": { "<key>": "<value>" }, "notify": { "<key>": "<value>" } } ``` ## Body Parameters <ParamField body="data" type="object"> data that is being used in the workflow <ParamField type="string"> Dynamic key-value pairs for common data. </ParamField> </ParamField> <ParamField body="notify" type="object" required> The recipient details <ParamField type="string"> The type of notification (e.g., `email`, `sms`). </ParamField> <ParamField type="string"> The recipient of the notification (e.g., email address, phone number). </ParamField> </ParamField> <RequestExample> ```json Request Example theme={null} { "workflowName": "otp", "data": { "subject": "otp verification" }, "notify": { "notificationType": "email", "recipient": "example@example.com" }, } ``` </RequestExample> ## Response <ResponseField name="data" type="object"> <ResponseField name="requestId" type="UUID"> UUID, id of the request. </ResponseField> <ResponseField name="workflowExecutionId" type="UUID"> UUID, id of the workflow execution. </ResponseField> </ResponseField> <ResponseField name="error" type="object"> <ResponseField name="errorCode" type="string"> The error code (e.g., `BAD_REQUEST`). </ResponseField> <ResponseField name="message" type="string"> A human-readable error message. </ResponseField> </ResponseField> <ResponseExample> ```json success (200) theme={null} { "data": { "requestId": UUID, // UUID, id of the request "workflowExecutionId": UUID // UUID, id of the workflow execution }, "error": null, "errors": null, "meta": null } ``` ```json bad request (400) theme={null} { "data": null, "error": { "errorCode": "BAD_REQUEST", "message": "Bad request" }, "errors": [ { "errorCode": "BAD_REQUEST", "message": "Bad request" } ], "meta": null } ``` ```json unauthorised (401) theme={null} { "data": null, "error": { "errorCode": "UNAUTHORISED", "message": "Unauthorised" }, "errors": [ { "errorCode": "UNAUTHORISED", "message": "Unauthorised" } ], "meta": null } ``` ```json not found (404) theme={null} { "data": null, "error": { "errorCode": "NOT FOUND", "message": "Not found" }, "errors": [ { "errorCode": "NOT FOUND", "message": "Not found" } ], "meta": null } ``` </ResponseExample> ## Status Codes * `200` - OK * `400` - BAD REQUEST * `401` - UNAUTHORISED * `404` - NOT FOUND *** # Update Provider Integration Source: https://docs.trysiren.io/docs/API-Reference/UpdateProviderIntegrationAPI PUT /api/v1/public/provider-integrations/{providerId} API to update an existing provider integration in Siren ## Header <ParamField header="Authorization" type="string" required="true" /> <ParamField type="string" required="true" /> ## Path Parameters <ParamField path="providerId" type="string" required="true" /> ## Request Body <ParamField path="providerCode" type="string" required="true" /> <ParamField path="name" type="string" required="true" /> <ParamField path="configuration" type="object" required="true" /> ## Request Example <RequestExample> ```json Request Example theme={null} { "providerCode": "SLACK", "name": "provider-integrations-name", "configuration": { "botAuthToken": "your-auth-token", "appId": "your-app-id" }, "isPrimary": false } ``` </RequestExample> ## Response <ResponseExample> ```json Response Example theme={null} { "id": "a8f39791-60ec-45a6-beb9-ead8f8d859af", "providerCode": "SLACK", "name": "provider-integrations-name", "status": "ACTIVE", "configuration": { "botAuthToken": "your-auth-token", "appId": "your-app-id" }, "isPrimary": false, "createdAt": "2025-07-29T12:00:00Z", "updatedAt": "2025-07-29T12:30:00Z" } ``` </ResponseExample> ## Status Codes `200` - OK: Provider integration updated successfully\ `400` - Bad Request: Invalid input data\ `401` - Unauthorized: Invalid or missing authentication\ `404` - Not Found: Provider integration not found\ `409` - Conflict: Provider integration with this name already exists\ `500` - Internal Server Error: Failed to update provider integration ## cURL Example ```bash theme={null} curl --location --request PUT 'https://api.trysiren.io/api/v1/public/provider-integrations/a8f39791-60ec-45a6-beb9-ead8f8d859af' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer bd9d07a8073a41eca003e5f0a841db7c' \ --data '{ "providerCode": "SLACK", "name": "provider-integrations-name", "configuration": { "botAuthToken": "your-auth-token", "appId": "your-app-id" }, "isPrimary": false }' ``` # Update Template Source: https://docs.trysiren.io/docs/API-Reference/UpdateTemplateAPI PUT https://api.trysiren.io/api/v1/public/template/{{template_id}} Update an existing template with channel-specific configurations ## Header <ParamField header="Authorization" type="string" required> Bearer token for API authentication. Format: `Bearer {{apiToken}}` </ParamField> ## Query Parameters <ParamField query="template_id" type="UUID" required> The ID of the template to update. </ParamField> ```json Request Body theme={null} { "name": <template_name>, "description": <description>, "tagNames": [ <tagName> ], "variables": [ { "name": <variable_name>, "defaultValue": <default_value> } ] } ``` ## Body Parameters <ParamField body="name" type="string" required> Specifies the name of the template. </ParamField> <ParamField body="description" type="string"> A brief description of the template. </ParamField> <ParamField body="tagNames" type="array"> A list of tag names associated with the template. </ParamField> <ParamField body="variables" type="array"> A list of variables used in the template. <ParamField type="object"> <ParamField name="name" type="string"> The name of the variable. </ParamField> <ParamField name="defaultValue" type="string"> The default value for the variable. </ParamField> </ParamField> </ParamField> <ParamField body="configurations" type="object" required> Channel-specific configurations for the template. <ParamField name="SMS" type="object"> <ParamField name="body" type="string"> SMS message body text. </ParamField> <ParamField name="channel" type="string"> "SMS" — channel type. </ParamField> <ParamField name="isFlash" type="boolean"> Flash SMS flag. </ParamField> <ParamField name="isUnicode" type="boolean"> Unicode support flag. </ParamField> </ParamField> <ParamField name="EMAIL" type="object"> <ParamField name="subject" type="string"> Email subject line. </ParamField> <ParamField name="channel" type="string"> "EMAIL" — channel type. </ParamField> <ParamField name="body" type="string"> Email body (HTML or plain text). </ParamField> <ParamField name="attachments" type="array"> List of attachment references. </ParamField> <ParamField name="isRawHTML" type="boolean"> `true` if `body` contains raw HTML. </ParamField> <ParamField name="isPlainText" type="boolean"> `true` if `body` is plain text. </ParamField> </ParamField> </ParamField> <RequestExample> ```json Request Example theme={null} { "name": "Sample_Template1", "description": "sample template description", "tagNames": [ "sample_tag_1", "sample_tag_2" ], "variables": [ { "name": "var1", "defaultValue": "var1 value" } ], "configurations": { "SMS": { "body": "sample message body", "channel": "SMS", "isFlash": false, "isUnicode": false }, "EMAIL": { "subject": "test email subject", "channel": "EMAIL", "body": "<p>test body</p>", "attachments": [], "isRawHTML": false, "isPlainText": false } } } ``` </RequestExample> ## Response <ResponseField name="data" type="object"> <ResponseField name="templateId" type="UUID"> Template ID. </ResponseField> <ResponseField name="templateName" type="string"> Template name. </ResponseField> <ResponseField name="draftVersionId" type="UUID"> Draft version ID. </ResponseField> <ResponseField name="channelTemplateList" type="array"> List of channel-specific template metadata. <ResponseField type="object"> <ResponseField name="id" type="UUID"> Channel template ID. </ResponseField> <ResponseField name="channel" type="string"> Channel name (e.g., "SMS", "EMAIL"). </ResponseField> <ResponseField name="configuration" type="object"> Embedded configuration object. <ResponseField name="channel" type="string"> Channel name. </ResponseField> </ResponseField> <ResponseField name="templateVersionId" type="UUID"> Template version ID. </ResponseField> </ResponseField> </ResponseField> </ResponseField> <ResponseField name="error" type="object"> <ResponseField name="errorCode" type="string"> The error code (e.g., `BAD_REQUEST`). </ResponseField> <ResponseField name="message" type="string"> A human-readable error message. </ResponseField> </ResponseField> <ResponseExample> ```json success (200) theme={null} { "data": { "templateId": "UUID", // Template ID "templateName": "string", // Template name "draftVersionId": "UUID", // Draft version ID "channelTemplateList": [ { "id": "UUID", // Channel template ID "channel": "string", // Channel type "configuration": { "channel": "string" // Channel type }, "templateVersionId": "UUID" // Template version ID }, { "id": "UUID", "channel": "string", "configuration": { "channel": "string" }, "templateVersionId": "UUID" } ] }, "error": null, "errors": null, "meta": null } ``` ```json bad request (400) theme={null} { "data": null, "error": { "errorCode": "BAD_REQUEST", "message": "Bad request" }, "errors": [ { "errorCode": "BAD_REQUEST", "message": "Bad request" } ], "meta": null } ``` </ResponseExample> ## Status Codes * `200` - OK * `400` - BAD REQUEST * `401` - UNAUTHORISED * `404` - NOT FOUND # Update User Source: https://docs.trysiren.io/docs/API-Reference/UpdateUserAPI PUT /api/v1/public/users/{uniqueId} API to Update the user information ## Header <ParamField header="Authorization" type="string" required={true} description="Bearer token for API authentication. Format: `Bearer {{apiToken}}" /> ## Query Parameters <ParamField query="uniqueId" type="string" required> The unique identifier of the user to update. </ParamField> <RequestExample> ```json Request Example theme={null} { "email": "xyz@mail.com", "sms": "+1234567890", "whatsapp": "+1234567890", "pushToken": null, "inApp": null, "slack": null, "discord": null, "teams": null, "line": null, "activeChannels": [ "sms", "whatsapp" ], "name": "qwert", "uniqueId": "qwert", "active": true, "customData": null } ``` </RequestExample> ## Request Body Parameters <ParamField body="email" type="string"> The email address of the user. </ParamField> <ParamField body="sms" type="string"> The SMS number of the user. </ParamField> <ParamField body="whatsapp" type="string"> The WhatsApp number of the user. </ParamField> <ParamField body="pushToken" type="string"> The Push Token of the user. </ParamField> <ParamField body="inApp" type="string"> The InApp id of the user. </ParamField> <ParamField body="slack" type="string"> The slack id of the user </ParamField> <ParamField body="discord" type="string"> The discord id of the user </ParamField> <ParamField body="teams" type="string"> The teams id of the user </ParamField> <ParamField body="line" type="string"> The line id of the user </ParamField> <ParamField body="activeChannels" type="array"> The active channels of the user </ParamField> <ParamField body="name" type="string"> The name of the user </ParamField> <ParamField body="uniqueId" type="uuid"> The unique identifier of the user </ParamField> <ParamField body="active" type="boolean"> The active status of the user </ParamField> <ParamField body="customData" type="object"> The custom data of the user </ParamField> <ResponseExample> ```json ResponseExample theme={null} { "email": "rj6EC02IyA3ZEd+6x@idS.Qfw0d8Esxsc8AJEuTF.cfVwSQrxjrkbmbwIIKvqhDpgnaKxXs", "sms": "+363186", "whatsapp": "+16552905891096103551438680282706", "pushToken": "string", "inApp": "string", "slack": "string", "discord": "string", "teams": "string", "line": "string", "activeChannels": ["SMS"], "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "firstName": "string", "lastName": "string", "uniqueId": "string", "active": true, "customData": { "additionalProp1": "string", "additionalProp2": "string", "additionalProp3": "string" }, "segments": [ { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "name": "string", "description": "string" } ] } ``` </ResponseExample> ## Status Codes `200` - OK: User updated successfully # Add User Source: https://docs.trysiren.io/docs/API-Reference/addUserAPI POST /api/v1/public/users Creates a new user in the system with their contact information and notification preferences ## Header <ParamField header="Authorization" type="string" required> Bearer token for API authentication. Format: `Bearer {{apiToken}}` </ParamField> <RequestExample> ```json Request Example theme={null} { "email": "xyz@mail.com", "sms": "+1234567890", "whatsapp": "+1234567890", "pushToken": null, "inApp": null, "slack": null, "discord": null, "teams": null, "line": null, "activeChannels": [ "sms", "whatsapp" ], "name": "qwert", "uniqueId": "qwert", "active": true, "customData": null } ``` </RequestExample> ## Request Body Parameters <ParamField name="email" type="string" required={true} description="Email address of the user" /> <ParamField name="sms" type="string" required={false} description="Phone number for SMS notifications (with country code)" /> <ParamField name="whatsapp" type="string" required={false} description="Phone number for WhatsApp notifications (with country code)" /> <ParamField name="pushToken" type="string" required={false} description="Push notification token for mobile devices" /> <ParamField name="inApp" type="string" required={false} description="Internal user identifier for in-app notifications" /> <ParamField name="slack" type="string" required={false} description="Slack user ID" /> <ParamField name="discord" type="string" required={false} description="Discord user ID" /> <ParamField name="teams" type="string" required={false} description="Microsoft Teams user ID" /> <ParamField name="line" type="string" required={false} description="LINE user ID" /> <ParamField name="activeChannels" type="string[]" required={true} description="Array of active notification channels for the user. Must be one of: email, sms, whatsapp, push, inApp, slack, discord, teams, line" /> <ParamField name="name" type="string" required={false} description="User's full name or display name" /> <ParamField name="uniqueId" type="string" required={false} description="Unique identifier from your system" /> <ParamField name="active" type="boolean" default={true} required={false} description="Whether the user is active and should receive notifications" /> <ParamField name="customData" type="object" required={false} description="Additional custom data to store with the user" /> <ResponseExample> ```json Success (200) theme={null} { "email": "rIVE_m0FaG3ikBfoQpMnrC.atkBoXynQ@OEBwlohW31Ktf-dfMGMxj3TgkbDwj1KH0IXnuEJV3w.604JEK8fobAVQQQbjpVl-KadR1TyB.fvVlFnjntPRpuEJcdrquhrLrwZoEbwGlfMBqjOYZOGSpqVNVkLNsyxMKtSOCSfVzRNqhwrpnPNWlYxYBKoWjwSjaUaIqkVZ", "sms": "+781817969885703301818880118342548237352630121682016136565576203879663434550944895978511058235126", "whatsapp": "+42882193721286909407218345676453787791306251278730681683781916327067494554276609690230711025009088109", "pushToken": "string", "inApp": "string", "slack": "string", "discord": "string", "teams": "string", "line": "string", "activeChannels": ["SMS"], "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "firstName": "string", "lastName": "string", "uniqueId": "string", "active": true, "customData": { "additionalProp1": "string", "additionalProp2": "string", "additionalProp3": "string" }, "segments": [ { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "name": "string", "description": "string" } ] } ``` </ResponseExample> ### Response Fields <ResponseField name="id" type="string"> Unique identifier for the user (UUID v4) </ResponseField> <ResponseField name="firstName" type="string"> User's first name </ResponseField> <ResponseField name="lastName" type="string"> User's last name </ResponseField> <ResponseField name="segments" type="array"> Array of user segments/groups <ResponseField name="id" type="string"> Segment ID </ResponseField> <ResponseField name="name" type="string"> Segment name </ResponseField> <ResponseField name="description" type="string"> Segment description </ResponseField> </ResponseField> ## Status Codes * `200` - OK * `400` - BAD REQUEST * `401` - UNAUTHORISED * `404` - NOT FOUND # Campaigns Overview Source: https://docs.trysiren.io/docs/Campaigns/Campaign Overview Campaigns in Siren allow you to schedule and automate notifications with precision, ensuring timely, relevant communication with your users. Whether it is daily updates, one-time alerts, monthly reminders, or messages tied to specific events, campaigns help you deliver the right message at the right time. With powerful features like datasource integration, flexible scheduling, and automated delivery, campaigns are built to support a wide range of use cases and audience segments. You can connect to platforms like PostgreSQL or Mixpanel to define your target users, set up recurring or one-time schedules, and monitor everything from a centralized dashboard. Backed by detailed analytics and reporting, campaigns give you end-to-end control over your notification strategy—helping you maximize engagement and minimize manual effort. <img src="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Campaigns/CampaignPage.PNG?fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=7516b70e3c4569f6091ee6beef9e2eb4" alt="Campaign Overview" data-og-width="1913" width="1913" data-og-height="903" height="903" data-path="docs/Images/Campaigns/CampaignPage.PNG" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Campaigns/CampaignPage.PNG?w=280&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=681fcee35ba83f4f8c6b34f93f2f95e9 280w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Campaigns/CampaignPage.PNG?w=560&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=4f13ba7e97a4d8791b4477b2c0766b52 560w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Campaigns/CampaignPage.PNG?w=840&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=93d076796d2110b27a8428d5d8bd5b61 840w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Campaigns/CampaignPage.PNG?w=1100&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=fa3323479ec54992e0200fb2c323c9ac 1100w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Campaigns/CampaignPage.PNG?w=1650&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=638884ad6b9b87938cc3362f2c95b720 1650w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Campaigns/CampaignPage.PNG?w=2500&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=23629a27c2c197d450b0ddadc0c410a6 2500w" /> ## Create a Campaign * Navigate to the **Campaigns** in the left navigation bar and click on **My Campaigns**. * List of all the campaigns will be displayed in the window. * An AI Chat window opens when you click on **Create Campaign** button. * Provide the purpose for creating your campaign in the chat window. * Siren bot will send you a list of existing cohorts to send the campaign or you can [create and add a new cohort](./Creating%20Cohort) there. * Then you need to select a template, if you do not have a template, you can [create a new template](../Templates/CreateTemplate) there. <img src="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Campaigns/CampaignAI.PNG?fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=b3cce087c10bd702d81fd75b267f53ae" alt="Campaign Create" data-og-width="1912" width="1912" data-og-height="913" height="913" data-path="docs/Images/Campaigns/CampaignAI.PNG" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Campaigns/CampaignAI.PNG?w=280&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=d1dc2ca58743906d52e9f6d6fb9d1d3a 280w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Campaigns/CampaignAI.PNG?w=560&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=1c7ba9ce0bc681c555090f9ead50701a 560w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Campaigns/CampaignAI.PNG?w=840&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=2c786675e31a9f2dc3bbec4ca9f02f8a 840w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Campaigns/CampaignAI.PNG?w=1100&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=dae8f220aa27ba0d3903b0d8333b80cf 1100w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Campaigns/CampaignAI.PNG?w=1650&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=6e54582b3fd4f891c2ef528a94839356 1650w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Campaigns/CampaignAI.PNG?w=2500&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=a78c99284e265c8b3352aeec0e51502b 2500w" /> # Cohorts and Users Source: https://docs.trysiren.io/docs/Campaigns/Cohort & users ## What is a Cohort? In Siren, a **cohort** refers to a specific group of users targeted with a common message. These users are grouped together based on shared attributes or behaviors, such as sign-up date, location, activity, or custom tags. A cohort represents a segment of users that share a defined context or intent for communication. For example: * Users who installed the app in the last 7 days * Premium users who haven’t logged in this month * All users in a specific region Cohorts enable personalized, context-aware messaging at scale allowing efficient delivery of relevant content to the right audience without repeated manual segmentation. *** ## Types of User Cohorts in Siren Siren supports multiple ways to define and manage user cohorts, giving teams flexibility to work with data from different sources. ### Manual or UI-Based Cohorts This is the simplest cohort type, suitable for one-off campaigns or when you are working with static user lists. Users can be: * Uploaded via CSV * Added manually through the Siren interface This approach is ideal for teams who don’t need dynamic cohort updates or who are working outside of automated data systems. ### Mixpanel Cohorts [Mixpanel](https://mixpanel.com) is a leading product analytics platform used to understand user interactions within applications. Siren integrates with Mixpanel to automatically import cohorts that have already been created there. This enables seamless targeting based on real-time behavioral data without duplication of effort. For example, a cohort like *“Users who added to cart but didn’t purchase”* in Mixpanel can be directly synced with Siren, allowing teams to send timely and relevant nudges or offers. ### Datasource-Driven Cohorts For teams that rely on internal databases or cloud data warehouses, Siren offers native integrations with common data systems including: * **Databases**: PostgreSQL, MySQL * **Warehouses**: Amazon Redshift, Google BigQuery, Snowflake These integrations allow you to define dynamic cohorts based on live production or analytical data, ensuring that your targeting is always up-to-date and reflective of real user behavior. *** # Create Cohort Source: https://docs.trysiren.io/docs/Campaigns/Creating Cohort > ***Prerequisites:*** Before creating a campaign, ensure that required providers are integrated and Data Sources are configured to fetch the campaign audience. * In the left navigation pane, under **Campaigns**, click on **Cohorts** and then click on **Create Cohort**. * In the **Choose your Data Source** modal, Add your database from which the cohort data should be fetched. * In the **My Integration Accounts** section, you can select cohorts added in integration accounts. * In the **Users** section, you can upload a CSV file containing user details to efficiently create a cohort. # Data Sources Source: https://docs.trysiren.io/docs/Campaigns/DataSource Guide to managing and configuring data sources and integrations in Siren # Data Sources Data sources are central to defining user cohorts for targeted notifications in Siren. They allow you to manage and organize user data effectively, ensuring precise targeting for your campaigns. ## Accessing Data Sources 1. In the left navigation panel, click on **Settings** 2. Select **Data Sources** from the dropdown menu ## Data Source Tabs The Data Sources page contains two main tabs: * **Database**: For connecting to your databases * **Integrations**: For connecting to external platforms like Mixpanel ## Managing Database Connections ### Adding a New Database <Steps> <Step title> In the **Database** tab, click **Add Database** </Step> <Step title> In the modal that appears, fill in the following details: * **Select Database Type**: Choose from the dropdown * PostgreSQL * Redshift * BigQuery * Snowflake * MySQL * **Name**: Give your data source a descriptive name * **Host**: Enter the database host address (e.g., `localhost` or `127.0.0.1`) * **Port**: Enter the database port number (e.g., `5432` for PostgreSQL) * **Username**: Database username * **Password**: Database password * **Database Name**: Name of the specific database to connect to </Step> <Step title> Click **Save** to create the connection </Step> </Steps> ### Managing Existing Databases In the Database tab, you can: * View all configured database connections. * Click **Edit** from three dots (⋮) to modify connection details. * Click **Delete** from three dots (⋮) to remove a database connection. ## Managing Integrations ### Adding Mixpanel Integration <Steps> <Step title=""> Go to the **Integrations** tab and click **Add Integration** </Step> <Step title=""> In the modal that appears: * **Select Integration**: Choose "Mixpanel" from the dropdown * **Name**: Give your integration a descriptive name * **Project ID**: Enter your Mixpanel Project ID * **Username**: Enter your Mixpanel service account username * **Secret**: Enter your Mixpanel service account secret key </Step> <Step title=""> Click **Save** to complete the setup </Step> </Steps> ### Managing Existing Integrations In the Integrations tab, you can: * View all configured integrations. * Click **Edit** from three dots (⋮) to modify integration settings. * Click **Delete** from three dots (⋮) to remove an integration. # User Management Source: https://docs.trysiren.io/docs/Campaigns/User Management Comprehensive guide to managing users and their communication preferences in Siren The User Management section allows you to manage user data for multi-channel communication, including adding users individually or in bulk. ## Users Overview <img src="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/users.png?fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=de3329d56631c2d81a91d21d3fac61da" alt="Users Overview" data-og-width="1927" width="1927" data-og-height="958" height="958" data-path="docs/Images/Users/users.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/users.png?w=280&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=f16d43209e78734896af44dddce92356 280w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/users.png?w=560&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=0584b06cdc0673b783e8b6dc9051defa 560w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/users.png?w=840&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=8480a0de18d212a15cf7d604d5a7be27 840w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/users.png?w=1100&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=d2ef097bd3640044f78fe2882697d828 1100w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/users.png?w=1650&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=f9bca2c2981ae324704c520783bb406a 1650w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/users.png?w=2500&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=c37fa999424a03057075f7954e375317 2500w" /> ### Overview * **Name**: The name of the user. * **Channels**: Icons represent the active communication channels (e.g., email, SMS, push notifications). * **Segments**: The user's segment for targeted communication. * **Status**: Toggle the user's activation status. * **Actions**: Edit or delete the user via the action buttons. ### Key Features * **Search & Filter**: Search users by name or apply filters. * **Add User**: Manually add a new user with customizable fields and channel options. * **Upload CSV**: Import multiple users at once using a CSV file. ## Managing Users ### Adding a User 1. Click the **Add User** button to open the user creation form. 2. Fill in the user's basic information: * First and Last Name * Reference ID * Active communication channels <img src="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/addUser.png?fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=37518dcfa3e30957d09fab97b9ba6871" alt="Add User Form" data-og-width="555" width="555" data-og-height="829" height="829" data-path="docs/Images/Users/addUser.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/addUser.png?w=280&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=7cf18debfaec4731f37f195b9507b986 280w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/addUser.png?w=560&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=827cb0bf3c6fecc599f7805a6f7439c1 560w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/addUser.png?w=840&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=e53cd31147af96d850ae51dc478be978 840w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/addUser.png?w=1100&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=4a6b885e078db798eb6272be2db3eaeb 1100w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/addUser.png?w=1650&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=386b0273f8f1af0d061847ccd9c45fc6 1650w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/addUser.png?w=2500&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=f52181a66e38a73ead250a7b7f010d01 2500w" /> 3. For each selected channel, provide the required information: * Email address for email notifications * Phone number for SMS * Push token for mobile notifications * Other channel-specific details 4. (Optional) Provide additional information: * Country * Language preference * VIP status * Custom fields <img src="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/addUserAdditionalFields.png?fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=f5e97e4ea3a5ce8d7eb8a3176191e903" alt="Additional User Details" data-og-width="556" width="556" data-og-height="588" height="588" data-path="docs/Images/Users/addUserAdditionalFields.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/addUserAdditionalFields.png?w=280&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=837b80a133881f9cf03baab15cb447f9 280w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/addUserAdditionalFields.png?w=560&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=1b36d67b13a7960e229eb09577d7f097 560w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/addUserAdditionalFields.png?w=840&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=007203c477bbdbf897034a394e5b83a9 840w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/addUserAdditionalFields.png?w=1100&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=378f8c79c354ac8d09c2c0e55927daf0 1100w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/addUserAdditionalFields.png?w=1650&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=9c9439aa7c013775eeefedf814abdbad 1650w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/addUserAdditionalFields.png?w=2500&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=885d2dc1bc2e9c320718876374999ce3 2500w" /> 5. Click **Submit** to add the user. ### Adding Custom Fields 1. Click the **Add More Fields** button in the user form. 2. Enter a custom field name (key) and its value. 3. Multiple custom fields can be added as needed. 4. Click **Submit** to save the user with custom fields. ### Bulk User Upload via CSV 1. Click the **Upload CSV** button. 2. Select a properly formatted CSV file containing user data. 3. Map the CSV columns to the appropriate user fields. 4. Click **Submit** to import multiple users at once. <img src="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/userUpload.png?fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=f2a60bd5c0f8bf1b66317c6f8c9cb921" alt="CSV Upload" data-og-width="481" width="481" data-og-height="264" height="264" data-path="docs/Images/Users/userUpload.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/userUpload.png?w=280&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=ade98e94ff42d3f18fe39df1d025b867 280w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/userUpload.png?w=560&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=b2e191737c51bd2550d84a561027894c 560w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/userUpload.png?w=840&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=bccce8d7c00f210ed1fb141b03c307db 840w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/userUpload.png?w=1100&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=77e43b7a58eb5d9c5a81b607de7008a5 1100w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/userUpload.png?w=1650&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=f1696b95e002cea94f6e714637f2d8ef 1650w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Users/userUpload.png?w=2500&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=b4789a13d7c3281cc1dae4ad8f0ff77a 2500w" /> > **Note**: Ensure your CSV file follows the required format. Download our [CSV template](#) for reference. ## User Settings ### Channel Preferences * View and modify which communication channels are active for each user * Update contact information for each channel * Set notification preferences ### User Segments * Assign users to segments for targeted communication * Create and manage custom segments * Filter users by segment for bulk actions # Channels & Provider Source: https://docs.trysiren.io/docs/ChannelsProviders/Channel-Provider-Overview Learn how to configure channels and providers in Siren Siren makes it easy for organizations to build smart, multi-channel notification systems by combining powerful channel support and flexible provider integrations. Whether you’re sending transactional alerts, promotional messages, or critical system updates, Siren helps you reach users exactly where they are securely, without adding engineering complexity. You can configure both channels and providers directly from the Siren dashboard under the **Settings** section, including providers in workflows with one click, giving you full control over how messages are routed and delivered across different environments and workflows. *** ## Channels Channels in Siren represent the medium through which a notification is delivered. Each channel supports distinct use cases and content formats, allowing teams to craft contextually appropriate messages, whether it’s an OTP sent via SMS, a promotional email campaign, or a push notification embedded directly in your mobile app. Siren allows you to configure channels, integrate each channel into broader workflows or campaigns. Templates are fully customizable and support channel-specific fields, ensuring that your messages are not only consistent but optimized for their destination platform. *** ## Providers While channels define *where* your messages are sent, **providers** define *how* they’re delivered. Siren integrates with over 20 third-party providers across email, SMS, WhatsApp, push, and more, offering the flexibility to choose the right delivery partner for your needs. Providers can be added and managed from **Settings > Providers**. Each integration allows you to input credentials, configure environment-specific keys (for staging vs production), and define fallback logic to ensure message delivery even if a primary provider fails. Multiple providers can be configured per channel. Given below is the list of all available providers in each channel. <AccordionGroup> <Accordion title="Email"> Siren supports email delivery through a variety of trusted providers, giving you the flexibility to choose the one that aligns best with your performance, pricing, and compliance requirements. **Supported Email Providers:** * Gmail * Mailchimp * Mailgun * Outlook * Postmark * Sample Email Provider * SendGrid * Amazon SES </Accordion> <Accordion title="SMS"> For SMS notifications, Siren integrates with globally recognized providers to ensure reliable, low-latency delivery—especially for time-critical use cases like OTPs and alerts. **Supported SMS Providers:** * Kaleyra.io * MessageBird * MSG91 * Plivo * Twilio </Accordion> <Accordion title="WhatsApp"> Siren’s WhatsApp channel is powered by a curated set of providers that support the WhatsApp Business API. You can select the one that matches your business region, approval speed, or feature set. **Supported WhatsApp Providers:** * Gupshup * Meta * MSG91 * Twilio * WATI </Accordion> <Accordion title="Push Notifications"> Push messages can be sent via mobile and web platforms using high-performance providers, offering native delivery and user engagement capabilities. **Supported Push Providers:** * Firebase Cloud Messaging (FCM) * OneSignal </Accordion> <Accordion title="Chat Platforms"> Siren supports several collaboration and messaging platforms, enabling internal alerts or user-facing communication within these ecosystems. **Supported Chat Providers:** * Discord * LINE * Microsoft Teams * Slack </Accordion> <Accordion title="In-App"> For in-app messaging, Siren provides a native integration that allows you to deliver messages directly within your product interface, without relying on third-party platforms. **In-App Provider:** * Siren </Accordion> </AccordionGroup> *** ## Pool Provider Pool in Siren enables you to group multiple providers of the same channel type for load balancing and high availability. It automatically distributes notifications across providers based on configured message limits and time durations. When a provider reaches its limit, the system seamlessly switches to the next available provider in the pool. This ensures reliable message delivery and helps manage rate limits across different service providers. See [Provider Pool](./Pool/Providerpool) for more details. ## Configuration and Management Managing your channels and providers is straightforward through Siren: * The **Templates** section allows you to design, preview, and test messages specific to each channel, including cross-channel templates. * The **Settings > Providers** section lets you add, edit, or remove provider accounts, add a webhook path, and set message limits. etc * You can **set a provider as your default provider**. go to the **Providers** section and click on the provider you want. You’ll see a list of accounts—click the **three-dot menu** next to the account name and choose **“Set as Default.”** That’s it! *** # null Source: https://docs.trysiren.io/docs/ChannelsProviders/Choose a channel Siren streamlines the integration process, ensuring a hassle-free setup experience through the following steps: <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/providersPage.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=ef033470d7cc061cd92b1459a355c9a1" alt="Channel & Provider" data-og-width="1848" width="1848" data-og-height="925" height="925" data-path="docs/Images/Providers/providersPage.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/providersPage.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=3731f703875aff646f9a4d643f60d090 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/providersPage.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=5595326d9f53c0ea33794ab23a971456 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/providersPage.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=ade3fa2f91fe3018e7406c0b0cd6840a 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/providersPage.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=255c1e1096622c507fde2e843b7ad780 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/providersPage.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=c3f1c8e0ba4df74f6c1a40f34eba829b 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/providersPage.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=8acadd9126aef9f1e9a5ca05b820e31b 2500w" /> *** ## Choose a Channel Not every audience engages the same way, and that is why Siren offers options. Whether it is Email, SMS, Push, or more, channels can be selected based on what works best for your target audience. The following sections walk through how to set up each channel. No complex setup — just clean, flexible integration that fits seamlessly into any product. *** ## Select a Provider Providers are the backbone of your communication infrastructure, offering essential services for sending messages and notifications. With Siren, you have the flexibility to work with multiple providers based on your business requirements and preferences. Our platform seamlessly integrates with various providers, allowing you to add them effortlessly to your account.\ Providers are categorized under their respective channels for easy access and management. Select your channel to explore the available providers and configuration options. Click on any card to configure that specific channel. <Tabs> <Tab title="Email"> * [Gmail](/docs/ChannelsProviders/email/Gmail) - Send emails using Gmail's SMTP server * [Mailchimp](/docs/ChannelsProviders/email/Mailchimp) - High-volume email delivery with Mailchimp * [Mailgun](/docs/ChannelsProviders/email/Mailgun) - Email API service with powerful analytics * [SendGrid](/docs/ChannelsProviders/email/SendGrid) - Reliable email delivery with detailed tracking * [Amazon SES](/docs/ChannelsProviders/email/Amazon-SES) - Scalable email sending service by AWS * [Outlook](/docs/ChannelsProviders/email/Outlook) - Send emails using Outlook's SMTP server * [Postmark](/docs/ChannelsProviders/email/Postmark) - Email API service with powerful analytics </Tab> <Tab title="SMS"> * [Twilio](/docs/ChannelsProviders/sms/Twilio) - Global SMS delivery with detailed reporting * [Kaleyra.io](/docs/ChannelsProviders/sms/Kaleyra) - Cloud communications platform for business messaging * [MessageBird](/docs/ChannelsProviders/sms/MessageBird) - Omnichannel communication platform * [MSG91](/docs/ChannelsProviders/sms/MSG91) - Bulk SMS and voice messaging service * [Plivo](/docs/ChannelsProviders/sms/Plivo) - Cloud communications platform for SMS and voice </Tab> <Tab title="WhatsApp"> * [Twilio for WhatsApp](/docs/ChannelsProviders/whatsapp/Twilio-WhatsApp) - Official WhatsApp Business API via Twilio * [Meta WhatsApp](/docs/ChannelsProviders/whatsapp/Meta-WhatsApp) - Direct WhatsApp Business API integration * [MSG91 WhatsApp](/docs/ChannelsProviders/whatsapp/MSG91-WhatsApp) - WhatsApp Business API via MSG91 * [Gupshup](/docs/ChannelsProviders/whatsapp/Gupshup) - WhatsApp Business API via Gupshup * [WATI](/docs/ChannelsProviders/whatsapp/WATI) - WhatsApp Business API via WATI </Tab> <Tab title="Push Notifications"> * [Firebase Cloud Messaging (FCM)](/docs/ChannelsProviders/push/Firebase-Cloud-Messaging) - Cross-platform push notifications by Google * [OneSignal](/docs/ChannelsProviders/push/OneSignal) - Customer engagement platform for push notifications </Tab> <Tab title="Chat Platforms"> * [Slack](/docs/ChannelsProviders/chat/Slack) - Team communication and collaboration * [Microsoft Teams](/docs/ChannelsProviders/chat/Teams) - Workplace chat and video meetings * [Discord](/docs/ChannelsProviders/chat/Discord) - Community and gaming chat platform * [LINE](/docs/ChannelsProviders/chat/LINE) - Popular messaging app in Asia </Tab> <Tab title="In-App"> * [Siren Native](/docs/ChannelsProviders/in-app/Siren-Native) - Native in-app notifications </Tab> </Tabs> # Provider Pool Source: https://docs.trysiren.io/docs/ChannelsProviders/Pool/Providerpool ## Accessing Provider Pool Navigate to the left navigation panel > Settings > Providers. Along with other channels, you will find the Pool option. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/PoolPage.PNG?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=60f923dbba9c46e230ed673cabeb1f65" alt="Provider Pool" data-og-width="1920" width="1920" data-og-height="912" height="912" data-path="docs/Images/Providers/PoolPage.PNG" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/PoolPage.PNG?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=5c36f6926cb2c45531e1c7194ca1ab11 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/PoolPage.PNG?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=8917f95c1eb258b7e8ded6d939c8b1a9 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/PoolPage.PNG?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=0beb7e10cae0ca6e29137a099f9da9c1 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/PoolPage.PNG?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=c2bd4e787a035c86a5e1cb8a5b120b6d 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/PoolPage.PNG?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=07bc171b2e0ece5cf2fab28cdd28c6bb 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/PoolPage.PNG?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=df82f6204d6b06b7ff554e02647aec5d 2500w" /> ## Creating a Provider Pool <Steps> <Step> Click on "Create Pool" to open the pool creation modal </Step> <Step> Select the channel type from the dropdown </Step> <Step> Add providers for that specific channel </Step> </Steps> <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/addPool.PNG?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=0849c03128a94c137f3b241151e0a0af" alt="Provider Pool" data-og-width="1909" width="1909" data-og-height="919" height="919" data-path="docs/Images/Providers/addPool.PNG" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/addPool.PNG?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=cc8a0adf60d0bd2b6b5a69b7ab37ebe3 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/addPool.PNG?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=4830ca42a59cb90b33562315be7ceb87 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/addPool.PNG?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=4fe3f8648b84c3b718a0a18711aec8b3 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/addPool.PNG?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=b7b8520fdc84a50ec24d9df4f78a851e 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/addPool.PNG?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=b78c075d872807fa5da77228d2de3fcd 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/addPool.PNG?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=834f330be3aa51de31109334454db974 2500w" /> ## Configuring Provider Pool In the right panel's Rules tab, you can configure: * **Message Limit**: Set the maximum number of messages * **Duration**: Set the time period for the message limit ## How Provider Pool Works When sending notifications: 1. The system uses the first provider in the pool 2. Once the message limit is reached within the set duration, it automatically switches to the next provider 3. The cycle continues through all providers in the pool ## Example If you set: * Message Limit: 1 * Duration: 1 hour Then: * The first notification will be sent from Provider 1 * The next 9 notifications (within that hour) will be sent from Provider 2 * After the hour resets, it will start again from Provider 1 ## Setting Limits You can configure these limits in two places: 1. During provider account setup in their respective sections 2. In the pool configuration under the Rules tab # Discord Source: https://docs.trysiren.io/docs/ChannelsProviders/chat/Discord Step-by-step guide to integrate Discord with Siren for sending messages to Discord channels and users ***Prerequisites:*** * A Discord account with server management permissions * Permission to create applications in the Discord Developer Portal <img src="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/discord.png?fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=c6159cf1cd2a7ce16cc7d8ca750f73aa" alt="Discord integration screenshot" data-og-width="1920" width="1920" data-og-height="1080" height="1080" data-path="docs/Images/Providers/Integrations/Chat/discord.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/discord.png?w=280&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=5f6c3bb19d1d833cf61dbd78179c8b52 280w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/discord.png?w=560&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=866ca308810be52cc5f975aeaae5950b 560w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/discord.png?w=840&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=af7a6906c1028259bcd49ff0a206da89 840w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/discord.png?w=1100&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=6558fe2475109a3da6f96ef03faeb889 1100w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/discord.png?w=1650&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=f016888f70cd9575ce43b20d4cfbb80f 1650w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/discord.png?w=2500&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=c1a3914dc6bd3cf08f7dc334a3d40f9b 2500w" /> ## Integration Setup To integrate Discord with Siren, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select Chat Platforms"> Choose the **Chat Platforms** channel from the available options. </Step> <Step title="Choose Discord"> Locate **Discord** in the list of providers and click on **Add Account**. </Step> <Step title="Get Discord Bot Token"> Before filling in the account details, you will need to get your bot token from Discord Developer Portal: 1. Go to the [Discord Developer Portal](https://discord.com/developers/applications) 2. Select your application or create a new one 3. In the left navigation panel, click on **Bot** 4. Under the **Bot** section: * For a new bot: Click **Reset Token** and confirm with your password * For an existing bot: Click **Copy** to copy the token <img src="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/DiscordNewBot.png?fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=706a950c141991770efb8c8b18ea1dc6" alt="Discord Bot Token" data-og-width="1920" width="1920" data-og-height="960" height="960" data-path="docs/Images/Providers/Integrations/Chat/DiscordNewBot.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/DiscordNewBot.png?w=280&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=1992294d6936673f63e06619877f4aee 280w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/DiscordNewBot.png?w=560&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=fe6f103a71829a9bbd2bf96c5cb29a95 560w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/DiscordNewBot.png?w=840&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=48eb932cc1aa8edc052485301ab8be11 840w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/DiscordNewBot.png?w=1100&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=286c8e433d67323e748f92e8779b2d76 1100w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/DiscordNewBot.png?w=1650&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=2822972d2624f397275558e4845fdd68 1650w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/DiscordNewBot.png?w=2500&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=bf9643d1a090ad28ee1b5901335081d5 2500w" /> **Important:** Keep this token secure and never share it publicly. </Step> <Step title="Enter Account Details"> In the pop-up window, enter the following details: * **Custom Name**: A name to identify this integration in Siren * **Bot Token**: Paste the Discord bot token you copied * **Default Channel ID**: (Optional) Default channel to send messages to </Step> <Step title="Save Configuration"> Click **Save** to complete the Discord integration setup in Siren. </Step> </Steps> # LINE Source: https://docs.trysiren.io/docs/ChannelsProviders/chat/LINE ***Prerequisites:*** * A LINE Developer account * A LINE channel (Messaging API) in the LINE Developers Console * Channel access token with appropriate permissions <img src="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/line.png?fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=c678c384f3671db3a0d78152e48c5fa2" alt="LINE integration screenshot" data-og-width="1850" width="1850" data-og-height="952" height="952" data-path="docs/Images/Providers/Integrations/Chat/line.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/line.png?w=280&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=3a9575a1f8eae02a5893cd9a96500a5c 280w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/line.png?w=560&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=ddc4c42c9f4b33d0139cccf2d82b83ee 560w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/line.png?w=840&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=71555a253ff53826ecf9abd4767bbaff 840w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/line.png?w=1100&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=c58399fa1109f960399afb3ac8c64190 1100w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/line.png?w=1650&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=c279b1506bca68f5487b0bb9e751c0cb 1650w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/line.png?w=2500&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=523e3c306cf37f87bfa237867c76d893 2500w" /> ## Integration Setup To integrate LINE with Siren, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select Chat Platforms"> Choose the **Chat Platforms** channel from the available options. </Step> <Step title="Choose LINE"> Locate **LINE** in the list of providers and click on **Add Account**. </Step> <Step title="Enter Account Details"> In the pop-up window, enter the following details: * **Custom Name**: A name to identify this integration in Siren * **Channel Access Token**: Your LINE Messaging API channel access token * **Channel Secret**: Your LINE channel secret * **Default User ID**: (Optional) Default recipient's LINE user ID </Step> <Step title="Save Configuration"> Click **Save** to complete the LINE integration setup in Siren. </Step> </Steps> # Slack Source: https://docs.trysiren.io/docs/ChannelsProviders/chat/Slack ***Prerequisite:*** Ensure you have an existing Slack account. <img src="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/slack.png?fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=5cae9bf2496dd5d811d2a691a6967a7c" alt="Slack integration" data-og-width="1920" width="1920" data-og-height="1080" height="1080" data-path="docs/Images/Providers/Integrations/Chat/slack.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/slack.png?w=280&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=c647e01fca97d7aa46279424e529e958 280w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/slack.png?w=560&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=9a173c8cc54c0824ac13909c8a3d1e87 560w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/slack.png?w=840&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=5c862c50988d6bfc8c9fe92d1cea1706 840w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/slack.png?w=1100&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=c725f8226371c28bf8f23bd50835729b 1100w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/slack.png?w=1650&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=514d2afdddbee7c0cca4b77627156433 1650w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/slack.png?w=2500&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=2288ce1f35b91d82b8f71360e15f8f99 2500w" /> ## Before You Begin Before proceeding with the Slack integration, you need to configure your Slack App with the required permissions and features. ### Create and Configure Your Slack App <Steps> <Step title="Create a New Slack App"> 1. Go to the [Slack API: Your Apps Dashboard](https://api.slack.com/apps). 2. Click **Create New App**. 3. Select **From scratch**. 4. Enter your app details: * **App Name** (e.g., `My Siren Integration`) * **Development Slack Workspace** (where the app will be installed) 5. Click **Create App**. </Step> <Step title="Configure OAuth & Permissions"> 1. In the left sidebar, click **OAuth & Permissions**. 2. Under **Scopes**, add the following Bot Token Scopes: | **OAuth Scope** | **Description** | | ------------------- | ---------------------------------------------------------------------------------------------- | | `app_mentions:read` | View messages that directly mention your app in conversations that the app is in | | `channels:history` | View messages and other content in public channels that your app has been added to | | `chat:write` | Send messages as your app | | `files:read` | View files shared in channels and conversations that your app has been added to | | `im:history` | View messages and other content in direct messages that your app has been added to | | `im:write` | Start direct messages with people | | `incoming-webhook` | Post messages to specific channels in Slack | | `mpim:write` | Start group direct messages with people | | `reactions:read` | View emoji reactions and their associated content in channels and conversations your app is in | | `users:read` | View people in a workspace | | `users:read.email` | View email addresses of people in a workspace | 3. Click **Save Changes**. </Step> <Step title="Install App to Workspace"> 1. In the left sidebar, click **OAuth & Permissions** 2. Click **Install to Workspace** 3. Authorize the app 4. Copy the **Bot User OAuth Token** (starts with `xoxb-`) 5. Copy App ID from **Basic Information** tab in left sidebar </Step> </Steps> ### Add Slack Account to Siren <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select Chat Channel"> Choose the **Chat** channel from the available options. </Step> <Step title="Choose Slack"> Locate **Slack** in the list of providers and click on **Add Account**. </Step> <Step title="Fill in Account Details"> In the pop-up window, enter the following details: * **Custom Name**: Provide a name for easy identification within Siren's interface. * **Slack Bot Token**: Enter the Bot User OAuth Token (starts with `xoxb-`) obtained from your Slack App configuration. * **App ID**: Enter the App ID obtained from your Slack App configuration. </Step> <Step title="Save Configuration"> Click **Save** to complete the Slack account configuration in Siren. </Step> </Steps> <Accordion title="Configure Slack App for Chat node (Optional)"> <Note> Chat Node is a Beta feature </Note> <Steps> <Step> * Navigate to **Providers** section in your Siren dashboard. * Select **Chat** channel. * Select **Slack** provider. * Open edit modal of the added provider, copy **Inbound Webhook Path**. </Step> <Step title="Slack App configuration"> * Navigate to Event Subscriptions and enable it. * Add the copied **Inbound Webhook Path** as **Request URL**. * Subscribe to relevant Bot Events, such as: * `message.channels` * `message.groups` * `message.im` * `message.added` * Navigate to Interactivity and Shortcuts tab from left sidebar. * Add the copied inbound webhook path as Request URL </Step> </Steps> </Accordion> # Microsoft Teams Source: https://docs.trysiren.io/docs/ChannelsProviders/chat/Teams ***Prerequisite:*** Ensure you have a Microsoft 365 account with access to Teams. <img src="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/teams.png?fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=ab302b16cc4cd46764915ffddc3c9d5b" alt="Teams modal" data-og-width="1915" width="1915" data-og-height="906" height="906" data-path="docs/Images/Providers/Integrations/Chat/teams.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/teams.png?w=280&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=0dc6c02dce0539c8e81cf260cdeff7bd 280w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/teams.png?w=560&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=03b45c48e18bcd4df0419f5f19dbac2c 560w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/teams.png?w=840&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=7d60ca89d86afc69475d225c6bbf321e 840w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/teams.png?w=1100&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=31fd729f0b67aeb183b492eadd5015f2 1100w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/teams.png?w=1650&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=7b05b5ba19c16360f5724bd59d7daeec 1650w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Chat/teams.png?w=2500&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=3342b50248a81c087988ec57a1a84f48 2500w" /> ## Integration Setup To integrate your Microsoft Teams account with Siren using Microsoft's OAuth authentication, follow these steps: <Steps> <Step title="Access Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select Chat Channel"> Choose the **Chat** channel from the list of available options. </Step> <Step title="Add Teams Account"> Locate **Microsoft Teams** in the list of providers and click on **Add Account**. </Step> <Step title="Authenticate with Microsoft"> In the modal that appears, click on the **Continue with Microsoft** button. You will be redirected to Microsoft's sign-in page. </Step> <Step title="Sign in to Microsoft"> * Click on the Microsoft account you want to connect to Siren * Review the permissions that Siren is requesting * Click **Accept** to grant Siren access to your Teams account </Step> <Step title="Complete Setup"> After successful authentication, you will be automatically redirected back to Siren. Your Microsoft Teams integration will be connected and ready to use with Siren's chat features. </Step> </Steps> <Note> * The integration uses OAuth for secure authentication, so you do not need to create or manage webhooks manually. * You can revoke Siren's access at any time through your Microsoft Account settings under "Security" > "App permissions". * You can connect multiple Teams channels by repeating the process. </Note> # Amazon SES Source: https://docs.trysiren.io/docs/ChannelsProviders/email/Amazon-SES ***Prerequisite:*** Ensure you have an account already set up in Amazon SES. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/ses.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=aef69e2cff88124faf5b72f00a8623a0" alt="Amazon SES" data-og-width="1848" width="1848" data-og-height="925" height="925" data-path="docs/Images/Providers/Integrations/Email/ses.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/ses.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=601d61f78114d44fbb155a98837c630c 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/ses.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=6e6b750e93048c381fb2362592e33a1d 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/ses.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=8e2c24c2c1222aee47475bb8c1c48261 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/ses.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=a2c0b4a13ed3897413d248f261b7cf0b 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/ses.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=cbae2a5d994f2f34c53ecf76b6f63b31 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/ses.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=5c50aef647802d0b386cdec2d57f4df5 2500w" /> ## Integration Setup To integrate your Amazon SES account with Siren, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select Email Channel"> Choose the **Email** channel from the available options. </Step> <Step title="Choose SES"> Locate **SES** in the list of providers and click on **Add Account**. </Step> <Step title="Fill in Account Details"> In the pop-up window, enter the following details: * **Custom Name**: Provide a name for easy identification within Siren's interface. * **Access Key**: Log into your Amazon AWS account and navigate to **Security Credentials** under your account menu. Find **Access Keys** and enter the details. * **Secret Key**: Retrieve this from the same location as the Access Key. * **Region**: Find the region in your Amazon AWS account, either in the browser URL or by selecting it from the drop-down next to your username in the AWS console. * **From Email**: Enter the email address from which emails will be sent. This must be an email ID with a domain registered with Amazon SES. * **From Name**: Enter the name to be displayed in the **From** line. * **Reply To** (Optional): Enter an alternate email ID for recipients to reply to. This can be different from the "From" email ID. * **Content Type**: Choose between **Text/Plain** or **Text/HTML** based on your email content format. </Step> <Step title="Save Configuration"> Click on **Save** to save your Amazon SES account configuration. </Step> </Steps> By following these steps, you can seamlessly integrate your Amazon SES account with Siren for effective email communication. # Gmail Source: https://docs.trysiren.io/docs/ChannelsProviders/email/Gmail ***Prerequisite:*** Ensure you have a Google account that you want to connect to Siren. <img src="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/gmail.png?fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=455c7bd9e17db3f0bb7df427c3e7d096" alt="gmail integration screenshot" data-og-width="1848" width="1848" data-og-height="925" height="925" data-path="docs/Images/Providers/Integrations/Email/gmail.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/gmail.png?w=280&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=ddcd0a8bbec0ff3b797f0c8c0bd80259 280w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/gmail.png?w=560&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=3dd8e2b20fa2d91857cfce5824e04450 560w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/gmail.png?w=840&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=f368feffef7a44701bcb2a1f36ebbf98 840w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/gmail.png?w=1100&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=5f6575761fdad3a6c5338ae18fdf6c06 1100w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/gmail.png?w=1650&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=1752ae5d8d772f8ece7ed05043701fe1 1650w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/gmail.png?w=2500&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=9859308d391cff6f62153559090efc0c 2500w" /> ## Integration Setup To integrate your Gmail account with Siren using Google's OAuth authentication, follow these steps: <Steps> <Step title="Access Providers"> Navigate to the **Providers** section in your Siren dashboard. </Step> <Step title="Select Email Channel"> Choose the **Email** channel from the list of available options. </Step> <Step title="Add Gmail Account"> Locate Gmail in the list of providers and click on **Add Account**. </Step> <Step title="Authenticate with Google"> In the modal that appears, click on the **Continue with Google** button. ECHO is off. you will be redirected to Google's sign-in page. </Step> <Step title="Sign in to Google"> * Click on the Gmail account you want to connect to Siren * Review the permissions that Siren is requesting * Click **Allow** to grant Siren access to your Gmail account [Gmail modal](/docs/Images/Providers/Integrations/Email/GmailIntegration.PNG) </Step> <Step title="Complete Setup"> After successful authentication, you will be automatically redirected back to Siren. ECHO is off. Your Gmail account will be connected and ready to use with Siren's email features. </Step> </Steps> <Note> * The integration uses OAuth for secure authentication, so you do not need to create or manage app passwords. * By default, Gmail does not provide message delivery status, and this feature is not configurable. * You can revoke Siren's access at any time through your Google Account settings under "Security" > "Third-party apps with account access". </Note> # Loops Source: https://docs.trysiren.io/docs/ChannelsProviders/email/Loops ***Prerequisite:*** Ensure you have an account already set up in Loops. <img src="https://mintcdn.com/siren/2_pzv1XWWCdKvIr5/docs/Images/Providers/Integrations/Email/Loops.png?fit=max&auto=format&n=2_pzv1XWWCdKvIr5&q=85&s=d3c6ed2645459dcc27d2a5173bf6553a" alt="loops" data-og-width="1912" width="1912" data-og-height="771" height="771" data-path="docs/Images/Providers/Integrations/Email/Loops.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/2_pzv1XWWCdKvIr5/docs/Images/Providers/Integrations/Email/Loops.png?w=280&fit=max&auto=format&n=2_pzv1XWWCdKvIr5&q=85&s=a36a9bfae748e68fd92169a7deded056 280w, https://mintcdn.com/siren/2_pzv1XWWCdKvIr5/docs/Images/Providers/Integrations/Email/Loops.png?w=560&fit=max&auto=format&n=2_pzv1XWWCdKvIr5&q=85&s=7baa794aa97810595ffa0f189834bd11 560w, https://mintcdn.com/siren/2_pzv1XWWCdKvIr5/docs/Images/Providers/Integrations/Email/Loops.png?w=840&fit=max&auto=format&n=2_pzv1XWWCdKvIr5&q=85&s=f45a79bb9b3901e36bf44015e87cf70a 840w, https://mintcdn.com/siren/2_pzv1XWWCdKvIr5/docs/Images/Providers/Integrations/Email/Loops.png?w=1100&fit=max&auto=format&n=2_pzv1XWWCdKvIr5&q=85&s=2b141f6f14a4355e1e0d92ca62351f99 1100w, https://mintcdn.com/siren/2_pzv1XWWCdKvIr5/docs/Images/Providers/Integrations/Email/Loops.png?w=1650&fit=max&auto=format&n=2_pzv1XWWCdKvIr5&q=85&s=41d2ed43bb9db135e05d7820b61b8e16 1650w, https://mintcdn.com/siren/2_pzv1XWWCdKvIr5/docs/Images/Providers/Integrations/Email/Loops.png?w=2500&fit=max&auto=format&n=2_pzv1XWWCdKvIr5&q=85&s=7dd9bee55acf91a807ed5b801521caea 2500w" /> ## Integration Setup To integrate your Loops account with Siren, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select Email Channel"> Choose the **Email** channel from the available options. </Step> <Step title="Choose Loops"> Locate **Loops** in the list of providers and click on **Add Account**. </Step> <Step title="Fill in Account Details"> In the pop-up window, fill in the following details: * **Customer Name**: Provide a name for easy identification within Siren's interface. * **API Key**: Generate an API Key in your Loops account. * **Webhook Signing Secret**: Enter your webhook signing secret for verification. * **Webhook Path**: The default webhook URL will be pre-filled. * **Tag**: Give a tag to your account for easy categorisation. </Step> <Step title="Configure Webhooks in Loops"> * In your Loops account, go to [settings](https://app.loops.so/settings). * Navigate to **Webhooks**. * Paste the webhook URL from Siren in Endpoint URL field and **Update URL**. * Enable the relavant events. </Step> <Step title="Save Configuration"> Click on **Save** to save your Loops account configuration. </Step> </Steps> # Mailchimp Source: https://docs.trysiren.io/docs/ChannelsProviders/email/Mailchimp ***Prerequisite:*** Ensure you have an account already set up in Mailchimp. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/mailChimp.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=8ea54f4fff7afb887a5184f27dceb72c" alt="mailchimp" data-og-width="1848" width="1848" data-og-height="925" height="925" data-path="docs/Images/Providers/Integrations/Email/mailChimp.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/mailChimp.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=201b16c527134d187c1f4bc073433496 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/mailChimp.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=fb644f8f88d50dd7a8420e702cd8cbc4 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/mailChimp.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=81567d5a68fd5191f358ebbe0a2ba812 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/mailChimp.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=314640c286db45816c3f7e438dc598f2 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/mailChimp.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=59d1761e0bcbbb39b4e7896437b09736 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/mailChimp.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=66818f9dcd5e17c481519f4a2922fbd0 2500w" /> ## Integration Setup To integrate your Mailchimp account with Siren, follow these steps: <Steps> <Step title="Access Providers"> Navigate to the **Providers** section in your Siren dashboard. </Step> <Step title="Select Email Channel"> Choose the **Email** channel from the list of available options. </Step> <Step title="Choose Mailchimp"> Locate **Mailchimp** in the list of providers and click on **Add Account**. </Step> <Step title="Enter Account Details"> In the pop-up window, fill in the required information: * **Custom Name**: Assign a name for easy identification within Siren's interface. * **API Key**: * Log in to your Mailchimp account and generate an API Key. * Navigate to the **Transactional email** tab and click on the **Launch App** button. * From the left navigation pane, click on **Settings**, then find the **API Keys** section and create a new API Key. * **From Email**: Enter the email address you want to use as the sender. * Ensure this email ID is whitelisted in the **Domains** section of Mailchimp. * **From Name**: Enter the name associated with the sender's signature entered in the "From Email" field. * **Content Type**: Choose between **Text/Plain** or **Text/HTML** based on your email content format. * **Webhook Verification Key**: Enter the webhook signing key for your configured webhook URL. </Step> <Step title="Save Configuration"> Click on **Save** to save your configuration. </Step> </Steps> By following these steps, you can seamlessly integrate your Mailchimp account with Siren for effective email communication. # Mailgun Source: https://docs.trysiren.io/docs/ChannelsProviders/email/Mailgun ***Prerequisite:*** * A Mailgun account * A verified sending domain in Mailgun * API Key with appropriate permissions <img src="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/MailgunConfig.PNG?fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=ff7d5e3f3bbdb5394a9dd0d3d1b76b68" alt="Mailgun Configuration" data-og-width="1920" width="1920" data-og-height="914" height="914" data-path="docs/Images/Providers/Integrations/Email/MailgunConfig.PNG" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/MailgunConfig.PNG?w=280&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=d9d79036df54dd7053cbe149e1cd4824 280w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/MailgunConfig.PNG?w=560&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=f535b4dcf2645b7ca1e07e16c4905ade 560w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/MailgunConfig.PNG?w=840&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=e054f0fca85c860027f1961905b53dfd 840w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/MailgunConfig.PNG?w=1100&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=b9dbd7acb5d2c3870be23b3d32b73351 1100w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/MailgunConfig.PNG?w=1650&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=70947be8a7516741cc0f323a4a582f91 1650w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/MailgunConfig.PNG?w=2500&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=0f92d0bfd53f9c1cac9b962c5d80a7b1 2500w" /> ## Integration Setup To integrate your Mailgun account with Siren, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select Email Channel"> Choose the **Email** channel from the available options. </Step> <Step title="Choose Mailgun"> Locate Mailgun in the list of providers and click on **Add Account**. </Step> <Step title="Enter Account Details"> In the pop-up window, fill in the required information: * **Custom Name**: A name to identify this integration in Siren * **API Key**: * Log in to your [Mailgun account](https://app.mailgun.com/) * Navigate to **Sending** > **API Keys** * Create a new API key or use an existing one * Make sure it has the necessary permissions * **Domain**: Your verified sending domain in Mailgun * **From Email**: The email address that will appear as the sender (must be from your verified domain) * **From Name**: The name that will appear as the sender * **Reply To**: (Optional) Email address for replies * **Content Type**: Choose between **Text/Plain** or **Text/HTML** </Step> <Step title="Save Configuration"> Click **Save** to complete the setup. </Step> </Steps> # SendGrid Source: https://docs.trysiren.io/docs/ChannelsProviders/email/SendGrid ***Prerequisite:*** Ensure you have an account already set up in SendGrid. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/sendGrid.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=fb19a2a685ffdeb82ca01c31897ac981" alt="sendgrid integration screenshot" data-og-width="1848" width="1848" data-og-height="925" height="925" data-path="docs/Images/Providers/Integrations/Email/sendGrid.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/sendGrid.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=1e837ca8c10196f7eafda242101062b2 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/sendGrid.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=c361e707bcd0f20c77a0b66df6981e2a 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/sendGrid.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=0fa1e05ec0a250edd476c79ebaea20c3 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/sendGrid.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=af04478d1a992950a60c2e87b5e9dc4b 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/sendGrid.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=226bed43ff13895f38a4ac2cdb9f66d0 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/sendGrid.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=71b33222d9355f17a885944edbf962ba 2500w" /> ## Integration Setup To integrate your SendGrid account with Siren, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select Email Channel"> Choose the **Email** channel from the available options. </Step> <Step title="Choose SendGrid"> Locate SendGrid in the list of providers and click on **Add Account**. </Step> <Step title="Fill in Account Details"> In the pop-up window, fill in the following details: * **Custom Name**: Provide a name for easy identification within Siren's interface. * **API Key**: Generate an API Key in your SendGrid account. * Navigate to the **Settings** tab in the left-hand navigation menu. * Click on **API Keys** in the sub-menu. * Create a new API Key or use a previously generated one. * **From Email**: Copy the Sender details from your [SendGrid account](https://sendgrid.com/en-us). * Alternatively, add a domain or a single user on SendGrid and enter it into the "From Email" field in Siren. * **From Name**: Enter the name associated with the sender's email provided in the "From Email" field. * **Content Type**: Choose between **Text/Plain** or **Text/HTML** based on your email content format. * **Reply To**: (Optional) Enter an alternate email ID for recipients to reply to. * **Webhook Verification Key**: Enter the webhook signing key for your configured webhook URL from **Event Webhook** in **Mail Settings** under **Settings** in SendGrid. * **Webhook URL**: Copy the webhook URL from Siren and paste it in the **Event Webhook** in **Mail Settings** under **Settings** in SendGrid. Ensure that all the events to track are checked. <img src="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/SendgridConfig.png?fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=a969f8d7b8ae4569e158b0decffe1ee9" alt="Sendgid Account configuration" data-og-width="1885" width="1885" data-og-height="958" height="958" data-path="docs/Images/Providers/Integrations/Email/SendgridConfig.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/SendgridConfig.png?w=280&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=5564b57030652135a9b01c9677f33854 280w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/SendgridConfig.png?w=560&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=1e23b3ddbca4b535a50446d8d66abf8e 560w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/SendgridConfig.png?w=840&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=8597fea6b0dcf82bd71088fc929cd582 840w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/SendgridConfig.png?w=1100&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=c3559a13cb1e107cf90ab30498fc6e3b 1100w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/SendgridConfig.png?w=1650&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=f77b193dd050855d38f0d8a65b90cb4b 1650w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Providers/Integrations/Email/SendgridConfig.png?w=2500&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=08c3f4c7d63cc3a8aee55860a87d1b2d 2500w" /> </Step> <Step title="Save Configuration"> Click on **Save** to save your SendGrid account configuration. Come back to Siren and **Save** your Provider configuration. </Step> </Steps> By following these steps, you can seamlessly integrate your SendGrid account with Siren for effective email communication. # Outlook Source: https://docs.trysiren.io/docs/ChannelsProviders/email/outlook ***Prerequisite:*** Ensure you have a Microsoft account that you want to connect to Siren. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/outlook.PNG?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=9c249c05db9594f5e2d2527faa9b3916" alt="outlook integration screenshot" data-og-width="1920" width="1920" data-og-height="916" height="916" data-path="docs/Images/Providers/Integrations/Email/outlook.PNG" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/outlook.PNG?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=d79d2ece86ab7443c348dd8b8f7a5ced 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/outlook.PNG?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=b65c2060331efbbb55de4ad399c389b4 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/outlook.PNG?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=2f6f997ba5bbd49ae7a0dde5a25c6215 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/outlook.PNG?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=5b9bfc1b5a9c257a915d13f66a598e3c 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/outlook.PNG?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=7136009d435753f606e069b2a7a8f2da 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/outlook.PNG?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=b21f76e85dd6917076213d1995b75bcc 2500w" /> ## Integration Setup To integrate your Outlook account with Siren using Microsoft's OAuth authentication, follow these steps: <Steps> <Step title="Access Providers"> Navigate to the **Providers** section in your Siren dashboard. </Step> <Step title="Select Email Channel"> Choose the **Email** channel from the list of available options. </Step> <Step title="Add Outlook Account"> Locate Outlook in the list of providers and click on **Add Account**. </Step> <Step title="Authenticate with Microsoft"> In the modal that appears, click on the **Continue with Microsoft** button. ECHO is off. you will be redirected to Microsoft's sign-in page. </Step> <Step title="Sign in to Microsoft"> * Click on the Microsoft account you want to connect to Siren * Review the permissions that Siren is requesting * Click **Accept** to grant Siren access to your Outlook account </Step> <Step title="Complete Setup"> After successful authentication, you will be automatically redirected back to Siren. ECHO is off. Your Outlook account will be connected and ready to use with Siren's email features. </Step> </Steps> <Note> * The integration uses OAuth for secure authentication, so you do not need to create or manage app passwords. * You can revoke Siren's access at any time through your Microsoft Account settings under "Security" > "App permissions". </Note> # Postmark Source: https://docs.trysiren.io/docs/ChannelsProviders/email/postmark ***Prerequisite:*** Ensure you have an account already set up in Postmark. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/postmark.PNG?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=95a8535728c6f54ac10bc95b78061fd2" alt="postmark modal" data-og-width="1918" width="1918" data-og-height="908" height="908" data-path="docs/Images/Providers/Integrations/Email/postmark.PNG" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/postmark.PNG?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=49b20f8edd871bb36eab3489080657a4 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/postmark.PNG?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=ca00f76038ff937584bca4e2ee1fd28a 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/postmark.PNG?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=ea7c41eedd90f7d6dda6653f71480f39 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/postmark.PNG?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=7627a2e8246fa2ba6e7dd3d5cef59729 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/postmark.PNG?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=d0a83a39d02d4c675e327798caca2e3c 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/postmark.PNG?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=8329a3b48aaf645cbb8486b236246346 2500w" /> ## Integration Setup To integrate your Postmark account with Siren, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select Email Channel"> Choose the **Email** channel from the available options. </Step> <Step title="Choose Postmark"> Locate Postmark in the list of providers and click on **Add Account**. </Step> <Step title="Fill in Account Details"> In the pop-up window, fill in the following details: * **Customer Name**: Provide a name for easy identification within Siren's interface. * **API Key**: Generate an API Key in your Postmark account. * Go to your server settings in Postmark. * Navigate to the **API Tokens** tab. * Click **Generate Token** and copy the generated token. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/postmarkAPI.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=fd67576e535449d634bdc5ee93c664da" alt="postmark API" data-og-width="1920" width="1920" data-og-height="960" height="960" data-path="docs/Images/Providers/Integrations/Email/postmarkAPI.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/postmarkAPI.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=97a3f877407eb8d8690ae7edafa54985 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/postmarkAPI.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=d88e6eeedbc88e6dce8f0e33334a57de 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/postmarkAPI.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=5734c3f278202120dd72b786aedc6a18 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/postmarkAPI.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=cfaf250354c7272583ccbdedc93f28ff 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/postmarkAPI.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=9e891563f98d62dbf668296a5a717121 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Email/postmarkAPI.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=0b3f1e7d0ee3781d334d00cea9a4ecd3 2500w" /> * **From Email**: Use the verified sender email from your Postmark account. * Go to **Sender Signatures** in Postmark. * Use the verified email address from your sender signature. * **From Name**: Enter the name associated with the sender's email. * **Reply To**: (Optional) Enter an alternate email ID for recipients to reply to. * **Webhook Path**: The default webhook URL will be pre-filled. </Step> <Step title="Configure Webhooks in Postmark"> * In your Postmark account, go to message streams. * Navigate to **Webhooks**. * Click **Add Webhook** and paste the webhook URL from Siren. * Select all the events to receive from Postmark. * Save the webhook configuration. </Step> <Step title="Save Configuration"> Click on **Save** to save your Postmark account configuration. </Step> </Steps> By following these steps, you can seamlessly integrate your Postmark account with Siren for effective email communication. # Siren In-App Source: https://docs.trysiren.io/docs/ChannelsProviders/in-app/Siren-Native ***Before You Begin:*** > **Note:**\ > You can only configure up to 5 account credentials within In-App. > <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/InApp/siren.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=e6b62a82850cf624afa6411aadde219f" alt="in-app screenshot" data-og-width="1848" width="1848" data-og-height="925" height="925" data-path="docs/Images/Providers/Integrations/InApp/siren.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/InApp/siren.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=ee9aef0b5d43cc6369ebc2c99f4ee8f6 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/InApp/siren.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=3b0ab1ee736cde8e1eed1c8d2c4740bf 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/InApp/siren.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=e1826a4feea808f986a9f38a3e61806f 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/InApp/siren.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=b4b052bd80749267e1e66caec091dbe7 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/InApp/siren.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=c8d3a77d696a1a362f89cd129c820926 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/InApp/siren.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=10838521780637f72fbefa63292ec367 2500w" /> ## Integration Setup To seamlessly integrate Siren with your In-App channel, follow these steps: <Steps> <Step title="Access Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Choose In-App Channel"> Select the **In-App** channel from the available options. </Step> <Step title="Select Siren"> From the list of providers, locate and click on **Siren**, then click **Add Account**. </Step> <Step title="Enter Account Details"> In the pop-up window, enter the following details: * **Custom Name**: Assign a distinctive name for easy identification within Siren's interface. </Step> <Step title="Save Configuration"> Click **Save** to confirm and store your configuration. </Step> <Step title="Connect Your System"> After saving, you will receive a token and Integration ID. Use these to establish the connection between your system and Siren: * **Token**: \[Your provided token will appear here] * **Integration ID**: \[Your integration ID will appear here] </Step> </Steps> ### Next Steps Once integrated, you can: * Send in-app notifications to your users * Track delivery and engagement metrics * Customize notification appearance and behavior # Firebase Cloud Messaging (FCM) Source: https://docs.trysiren.io/docs/ChannelsProviders/push/Firebase-Cloud-Messaging Step-by-step guide to integrate Firebase Cloud Messaging with Siren for push notifications ***Prerequisites:*** * A Firebase project * Firebase Admin SDK credentials (service account key) * Firebase Cloud Messaging API enabled <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Push/fcm.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=c2d3ab43e83c8bd8d18ace60aebf3398" alt="FCM integration screenshot" data-og-width="1848" width="1848" data-og-height="925" height="925" data-path="docs/Images/Providers/Integrations/Push/fcm.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Push/fcm.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=aeaddfb75f2c6608b900eddb4225bec3 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Push/fcm.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=d43f68430d433b34b6f124685e405d54 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Push/fcm.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=a96ac77a8c8c7e54a6ef739a880669da 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Push/fcm.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=479263d4a0e29133a17719a29f956306 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Push/fcm.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=32760ebdc4dff131513b61deb4debd26 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Push/fcm.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=26778ee18ed1b86729f152734bf1bcbb 2500w" /> ## Integration Setup To integrate FCM with Siren for push notifications, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select Push Notifications Channel"> Choose the **Push Notifications** channel from the available options. </Step> <Step title="Choose Firebase Cloud Messaging"> Locate **Firebase Cloud Messaging (FCM)** in the list of providers and click on **Add Account**. </Step> <Step title="Enter Account Details"> In the pop-up window, enter the following details: * **Custom Name**: A name to identify this integration in Siren * **Service Account Key**: * Go to [Firebase Console](https://console.firebase.google.com/) > Project Settings > Service Accounts * Click **Generate New Private Key** * Upload the downloaded JSON file or paste its contents * **Default Notification Icon**: (Android) Resource name of the icon to use for notifications * **Default Notification Color**: (Android) Hex color code for the notification icon </Step> <Step title="Save Configuration"> Click **Save** to complete the setup. </Step> </Steps> # OneSignal Source: https://docs.trysiren.io/docs/ChannelsProviders/push/OneSignal ***Prerequisite:*** Ensure you have an account already set up in **OneSignal** with an app built (SDK) within FCM. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Push/oneSignal.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=2ae1ab6e51b262ed381c700154d7647f" alt="OneSignal screenshot" data-og-width="1848" width="1848" data-og-height="925" height="925" data-path="docs/Images/Providers/Integrations/Push/oneSignal.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Push/oneSignal.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=75719b801ef58a45cf1e0fd01df2aa0e 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Push/oneSignal.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=7f764f27dee79c51f298e6169b4cc8cd 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Push/oneSignal.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=153a444c75b890b2e5e78b3ced46e641 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Push/oneSignal.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=77d26dc49c9cd900a4aabd20e265c003 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Push/oneSignal.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=04f93d9a38463d34aa385a03cdda519e 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Push/oneSignal.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=ba09fcc9bdf8b5281b288168b4263bda 2500w" /> ## Integration Setup To integrate your OneSignal account with Siren, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select Push Channel"> Choose the **Push** channel from the available options. </Step> <Step title="Choose OneSignal"> Locate **OneSignal** in the list of providers and click on **Add Account**. </Step> <Step title="Fill in Account Details"> In the pop-up window, enter the following details: * **Custom Name**: Provide a name for easy identification within Siren's interface. * **App ID**: From your OneSignal application: * Navigate to the **Settings** option in the ribbon menu * Find **Keys & IDs** in the secondary ribbon * Enter the **App ID** * **API Key**: From the same **Keys & IDs** section, enter the **REST API Key** </Step> <Step title="Save Configuration"> Click on **Save** to save your OneSignal account configuration. </Step> </Steps> By following these steps, you can seamlessly integrate your OneSignal account with Siren for effective push communication. # Kaleyra.io Source: https://docs.trysiren.io/docs/ChannelsProviders/sms/Kaleyra ***Prerequisites:***\ Ensure you have an active Kaleyra.io account set up, along with your Sender ID and Templates configured. [Kaleyra.io](../../Images/Providers/Integrations/SMS/kaleyra.png) ## Integration Setup To integrate your Kaleyra.io account with Siren, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select SMS Channel"> Choose the **SMS** channel from the available options. </Step> <Step title="Choose Kaleyra.io"> Locate **Kaleyra.io** in the list of providers and click on **Add Account**. </Step> <Step title="Get Kaleyra Credentials"> Before filling in the account details, you will need to gather your Kaleyra credentials: ECHO is off. 1. **API Key**: * Log in to your Kaleyra account * In the left navigation bar, click on **Developer** * Click on **Generate API Key** * Copy the generated API Key [Kaleyra API Key](/docs/Images/Providers/Integrations/SMS/KaleyraAPI.png) ECHO is off. 2. **Account SID**: * In the left navigation, click on **Developers** * Click on the three dots (⋮) next to your application * Select **Edit** * In the API Edit window, locate and copy the **SID** [Kaleyra SID](/docs/Images/Providers/Integrations/SMS/KaleyraSID.png) </Step> ECHO is off. <Step title="Fill in Account Details"> In the pop-up window, enter the following details: ECHO is off. * **Custom Name**: Provide a name for easy identification within Siren's interface * **SID (Security Identifier)**: Paste the SID you copied from the API Edit window * **API Key**: Paste the API Key you generated * **Sender**: Go to **Channels** tab in **Kaleyra** account and select **Manage**. Copy the **Sender ID** from there. * **Type of Route**: Select the appropriate route type based on your Kaleyra.io application configuration * **Webhook Path**: Copy this webhook path and set it in the **Kaleyra.io webhook URL** </Step> <Step title="Save Configuration"> Click on **Save** to save your Kaleyra.io account configuration. </Step> </Steps> By following these steps, you can seamlessly integrate your Kaleyra.io account with Siren for effective SMS communication. # MSG91 Source: https://docs.trysiren.io/docs/ChannelsProviders/sms/MSG91 ***Prerequisites:***\ Ensure you have an active MSG91 account set up, along with your Sender ID and Templates configured. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/msg91.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=f3b0bd2abc898ee42ca4fa2902a90758" alt="MSG91" data-og-width="1848" width="1848" data-og-height="925" height="925" data-path="docs/Images/Providers/Integrations/SMS/msg91.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/msg91.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=f6c2faaa9120a7d6a14dbdd9ef4ec8ef 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/msg91.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=f3665a2229a20581abd2187d88a55ac5 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/msg91.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=2007f641e2f6a358a1893810c096e06a 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/msg91.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=180c1d0baa19dca52bc80bbb1ad874c4 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/msg91.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=68c3245c103b219a04a7234273ab4ec1 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/msg91.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=acaa61e1e5731bfcf218fdb8a190d3fa 2500w" /> ## Integration Setup To integrate your MSG91 account with Siren, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select SMS Channel"> Choose the **SMS** channel from the available options. </Step> <Step title="Choose MSG91"> Locate **MSG91** in the list of providers and click on **Add Account**. </Step> <Step title="Find Your MSG91 Auth Key"> Before filling in the account details, you will need to get your Auth Key from MSG91: 1. Log in to your MSG91 dashboard 2. In the left navigation, click on **SMS** 3. Under the **Settings** section, click on **API Key** 4. Locate your Auth Key in the dashboard 5. Copy the Auth Key to your clipboard <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/MSG91API.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=ced854ba11ac2dae8642e257ab5f3bfe" alt="MSG91 Auth Key" data-og-width="1906" width="1906" data-og-height="960" height="960" data-path="docs/Images/Providers/Integrations/SMS/MSG91API.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/MSG91API.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=7ce97e5eac9c226e903cfce221f1be95 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/MSG91API.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=60def2d0041ca0150141a9da3dc271f7 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/MSG91API.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=43f862be463064b76ba522118984a05c 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/MSG91API.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=871ceac1217c7e9f6fa7e85cf09f87ca 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/MSG91API.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=91da621a555c89aa85de162b037fb4e4 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/MSG91API.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=2dedbe393b7f01f251ceaf1d15317d7c 2500w" /> </Step> <Step title="Fill in Account Details"> In the pop-up window, enter the following details: * **Custom Name**: Provide a name for easy identification within Siren's interface. * **Auth Key**: Paste the Auth Key you copied from MSG91 * **Sender**: Enter your Sender ID * In MSG91 dashboard, go to **SMS** section * Click on **Sender ID** in the left navigation * Copy your Sender ID * **Route**: Select the **route** from the drop-down depending on the message type — *Transactional* or *Promotional*. * **Webhook Path**: Copy the webhook URL from this field and set it up in MSG91 * In MSG91 dashboard, go to **Webhook (old)** in the left navigation * Paste the webhook URL in the placeholder field * Save the configuration </Step> <Step title="Save Configuration"> Click on **Save** to save your MSG91 account configuration. </Step> </Steps> By following these steps, you can seamlessly integrate your MSG91 account with Siren for effective SMS communication. # MessageBird Source: https://docs.trysiren.io/docs/ChannelsProviders/sms/MessageBird ***Prerequisites:***\ Ensure you have an active MessageBird account set up, along with your Sender ID and Templates configured. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/messageBird.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=ae5ef4288e220329c203c8701cf434c9" alt="MessageBird" data-og-width="1848" width="1848" data-og-height="925" height="925" data-path="docs/Images/Providers/Integrations/SMS/messageBird.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/messageBird.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=1dcc787719e05973d29758c4732a5bdc 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/messageBird.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=6283990fa4f48b680ec08dc0633d4556 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/messageBird.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=91e6336b827d1a79fd4f852292c2736d 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/messageBird.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=e86ed6de3acf1e20b480c98ad0a54dca 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/messageBird.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=f07194181405e63ddd74becf2170cd8d 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/messageBird.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=7bafa0cb51e0d6fe60fff8936b8f6449 2500w" /> ## Integration Setup To integrate your MessageBird account with Siren, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select SMS Channel"> Choose the **SMS** channel from the available options. </Step> <Step title="Choose MessageBird"> Locate **MessageBird** in the list of providers and click on **Add Account**. </Step> <Step title="Fill in Account Details"> In the pop-up window, enter the following details: * **Custom Name**: Provide a name for easy identification within Siren's interface. * **API Key**: Find your API Key by clicking on the **Developers** tab on the navigation bar on the left and selecting **API Access** in your MessageBird dashboard. * You can either create a new one or use an existing one. * **Originator**: Enter the **Sender ID** that you want to use. * **Webhook Path**: Copy this **webhook path** and set it in the **MessageBird webhook URL**. </Step> <Step title="Save Configuration"> Click on **Save** to save your MessageBird account configuration. </Step> </Steps> By following these steps, you can seamlessly integrate your MessageBird account with Siren for effective SMS communication. # Plivo Source: https://docs.trysiren.io/docs/ChannelsProviders/sms/Plivo ***Prerequisites:*** Ensure you have an active Plivo account set up, along with your SenderID and Templates configured. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/plivo.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=6e3b8430ec36193c54470405f20c8a47" alt="Plivo" data-og-width="1848" width="1848" data-og-height="925" height="925" data-path="docs/Images/Providers/Integrations/SMS/plivo.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/plivo.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=7a366de029eecd6dd39726f711774b1e 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/plivo.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=03475bc45b2b865d658bf836ddf73bdc 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/plivo.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=4c9e1ffd21185c6a4110f691a9623f0c 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/plivo.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=70a055b9fcf9ad269e3745ccba7ea95c 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/plivo.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=34a920eb316e151b4a4f24c7b727f0e6 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/plivo.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=7985a485c337706992e8ef6a57046941 2500w" /> ## Integration Setup To integrate your Plivo account with Siren, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select SMS Channel"> Choose the **SMS** channel from the available options. </Step> <Step title="Choose Plivo"> Locate **Plivo** in the list of providers and click on **Add Account**. </Step> <Step title="Fill in Account Details"> In the pop-up window, enter the following details: * **Custom Name**: Provide a name for easy identification within Siren's interface. * **Auth ID**: Log into your Plivo account and navigate to **Messaging**. * Under **Accounts and Payments**, find the **Auth ID**. * **Auth Token**: Log into your Plivo account and navigate to **Messaging**. * Under **Accounts and Payments**, find the **Auth Token**. * **Source Type**: Select one of the registered options: **Sender ID**, **Phone Number**, or **Powerpack UUID**. * **Source**: Enter the details of the selected source. * **Webhook Path**: Copy this **webhook path** and set it in the **Plivo webhook URL**. </Step> <Step title="Save Configuration"> Click on **Save** to save your Plivo account configuration. </Step> </Steps> By following these steps, you can seamlessly integrate your Plivo account with Siren for effective SMS communication. # Twilio Source: https://docs.trysiren.io/docs/ChannelsProviders/sms/Twilio Step-by-step guide to integrate Twilio with Siren for SMS notifications ***Prerequisites:*** * A Twilio account * A Twilio phone number with SMS capabilities * Account SID and Auth Token <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/twilio.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=de907011c9bb2f6cd2bc4e007b74ce31" alt="Twilio integration screenshot" data-og-width="1848" width="1848" data-og-height="925" height="925" data-path="docs/Images/Providers/Integrations/SMS/twilio.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/twilio.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=2a7659ce9354bb07629a46639a0b0375 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/twilio.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=aa5086627e5c4ec78fd0c7437f2fc361 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/twilio.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=04dcde10656e6bf9332a2340c68b19e5 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/twilio.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=19e1e683585ca427d73b432ab19c8e37 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/twilio.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=33b3a57852d2d66579fcc8b1c7d226a9 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/twilio.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=cf557e6e88a9d29eb5d41fa236a96f51 2500w" /> ## Integration Setup To integrate your Twilio account with Siren for SMS notifications, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select SMS Channel"> Choose the **SMS** channel from the available options. </Step> <Step title="Choose Twilio"> Locate Twilio in the list of providers and click on **Add Account**. </Step> <Step title="Get Twilio Credentials"> Before filling in the account details, you will need to gather your Twilio credentials: 1. **Auth Token**: * Go to the Twilio Console * Under the **Developer** tab, click on **Account** > **Account Info** * Copy the **Auth Token** <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioAuthToken.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=5da1935999ebabd882babcc5370bbc77" alt="Twilio Auth Token" data-og-width="1895" width="1895" data-og-height="956" height="956" data-path="docs/Images/Providers/Integrations/SMS/TwilioAuthToken.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioAuthToken.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=717e5be719501e423fcfd68e89b94a70 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioAuthToken.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=a0892dec91667d2cfa2ab1fc088d3dda 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioAuthToken.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=eb24910211ac697d448b322a423935c6 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioAuthToken.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=ad910165d0e5e994147aa754032f9bc5 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioAuthToken.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=71b4b2da70272fbe37c33218bd9613ea 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioAuthToken.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=1b931c3f0e5801d06da271c998faf9ae 2500w" /> 2. **Account SID**: * In the Twilio Console, go to the **Developer** tab * Click on **Services** * Select account SID 3. **Webhook Setup**: * Go to the **Monitor** tab * Click on **Logs** > **Webhooks** * Paste the Webhook URL from Siren here <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioWebhook.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=e1b2048b422537196c1b1a04e2bae440" alt="Twilio Webhook" data-og-width="1904" width="1904" data-og-height="957" height="957" data-path="docs/Images/Providers/Integrations/SMS/TwilioWebhook.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioWebhook.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=415e17dc70ca3de6e6107909abc8c285 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioWebhook.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=a3d6e971b9128343dc6bb4571455c219 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioWebhook.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=d66f9ff9560eeaba19bd9c126873e456 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioWebhook.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=1735b25050abdd3e2c5d636e74e475a1 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioWebhook.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=759e210686463599c0886cac4c5f3ccc 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioWebhook.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=4fdeee39184cbeed7292e1c3e55dc38b 2500w" /> </Step> <Step title="Enter Account Details"> In the pop-up window, fill in the required information: * **Custom Name**: A name to identify this integration in Siren * **Account SID**: Your Twilio Account SID (found in Account Info) * **Auth Token**: The Auth Token you copied from Account Info * **From Number**: Your Twilio phone number in E.164 format (e.g., +1234567890) </Step> <Step title="Save Configuration"> Click **Save** to complete the setup. </Step> </Steps> # Gupshup Source: https://docs.trysiren.io/docs/ChannelsProviders/whatsapp/Gupshup ***Prerequisites:*** * Active Gupshup account with API access * Valid Gupshup API credentials * Approved sender ID/number <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupConfig.PNG?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=c625e97f24a229cb8148ebce6c28639b" alt="Gupshup Configuration" data-og-width="1919" width="1919" data-og-height="916" height="916" data-path="docs/Images/Providers/Integrations/Whatsapp/gupshupConfig.PNG" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupConfig.PNG?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=3062cf4258765a578ec88e75b968b630 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupConfig.PNG?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=60bf99b10c970517c9b41d77050eaffb 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupConfig.PNG?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=3caa425141eff0231cc18b611e429de0 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupConfig.PNG?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=c88c45ab1c6123f46a91b6da807629b4 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupConfig.PNG?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=bbed0f550af7cfe52b9e1e868e717288 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupConfig.PNG?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=e2b7406d5624f64651b1792e0ee6ffcc 2500w" /> ## Integration Setup To integrate your Gupshup account with Siren, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select WhatsApp Channel"> Choose the **WhatsApp** channel from the available options. </Step> <Step title="Choose Gupshup"> Locate **Gupshup** in the list of providers and click on **Add Account**. </Step> <Step title="Get Gupshup Credentials"> Before filling in the account details, you will need to get your credentials from Gupshup: 1. Go to [Gupshup Dashboard](https://www.gupshup.io/developer/home) 2. Sign in to your account 3. Select your application or create a new one 4. In the app dashboard, click on the **Settings** tab 5. Find and copy your **API Key** and **App Name** 6. Note your **App ID** from the dashboard header or URL <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupAPI.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=140a6012057143c6c5ea640557ff2d53" alt="Gupshup App name" data-og-width="1920" width="1920" data-og-height="960" height="960" data-path="docs/Images/Providers/Integrations/Whatsapp/gupshupAPI.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupAPI.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=8b826cf11bbad7fd07889fa4c2d90e82 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupAPI.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=f40cec482a7be7541555346394bc8626 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupAPI.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=f3c13c5c6a1f77e6e37a07c600b645ca 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupAPI.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=1b2d24bf2bef3ffadd41bcd9f7b3d0dc 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupAPI.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=47b39a4a3c671d87c0f9de78ea1734bb 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupAPI.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=c337b6242615ffe6df91295e66cd8b71 2500w" /> </Step> <Step title="Fill in Account Details"> In the pop-up window, enter the following details: * **Custom Name**: Provide a name for easy identification within Siren's interface. * **Customer Name**: Your Gupshup customer/account name * **API Key**: The API key from your Gupshup app settings * **App Name**: The name of your Gupshup application * **Phone Number**: Copy the phone number from the **Account** tab in Gupshup account and paste it here. * **App ID**: Your Gupshup application ID * **Webhook Path**: Copy the webhook URL from Siren and paste it in the **Webhook** tab in Gupshup. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupWebhook.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=93b23e2c73ae25de61aaed8558915afa" alt="Gupshup Webhook" data-og-width="1920" width="1920" data-og-height="960" height="960" data-path="docs/Images/Providers/Integrations/Whatsapp/gupshupWebhook.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupWebhook.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=77939c1c449b144558fc7ae521df0eef 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupWebhook.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=5573cad26b7b835d8e216ddd721519b2 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupWebhook.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=4e59cae4f3310dac2b2543fa0e211d6f 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupWebhook.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=6bf24d3c8f4b0d9be100ca0e4d9d0cae 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupWebhook.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=cae8d2dcebc1b2765b9d68cfac60aa2b 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/gupshupWebhook.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=fc05bb71b2a6117642e9de03e598e7b1 2500w" /> </Step> <Step title="Webhook path setup"> * In the **Webhook** tab in Gupshup, click on **Add Webhook** * Paste the webhook URL from Siren * Check all the events to be tracked and click on **Save** </Step> <Step title="Save Configuration"> Click on **Save** to complete the Gupshup integration setup. </Step> </Steps> # MSG91 WhatsApp Source: https://docs.trysiren.io/docs/ChannelsProviders/whatsapp/MSG91-WhatsApp ***Prerequisites:***\ Ensure you have an active MSG91 account set up with WhatsApp Business API access, along with your Sender ID and Templates configured. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/msg91.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=f9efa073de82690581e10c85ecc4b47b" alt="MSG91 WhatsApp" data-og-width="1848" width="1848" data-og-height="925" height="925" data-path="docs/Images/Providers/Integrations/Whatsapp/msg91.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/msg91.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=1a989548a47d278566ee56e2e8c98512 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/msg91.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=21ae55c3a5635e73af2fe40434d9a988 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/msg91.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=989fa0db690633bdfa3720bdc73e811a 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/msg91.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=5948be136e1a7ff9bfc0bb5ee9d106b1 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/msg91.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=76ef9a72edfcac0a8744df84192299f6 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/msg91.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=ac47b72e7bd48c3113f06f41ea0c9559 2500w" /> ## Integration Setup To integrate your MSG91 WhatsApp account with Siren, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select WhatsApp Channel"> Choose the **WhatsApp** channel from the available options. </Step> <Step title="Choose MSG91"> Locate **MSG91** in the list of providers and click on **Add Account**. </Step> <Step title="Find Your MSG91 Auth Key"> Before filling in the account details, you will need to get your Auth Key from MSG91: 1. Log in to your MSG91 dashboard 2. From the top-left dropdown, select **WhatsApp** 3. In the left navigation, click on **API Key** under the **Settings** section 4. Locate your Auth Key in the dashboard 5. Click the copy icon to copy the Auth Key to your clipboard </Step> <Step title="Fill in Account Details"> In the pop-up window, enter the following details: * **Custom Name**: Provide a name for easy identification within Siren's interface. * **Auth Key**: Paste the Auth Key you copied from MSG91 * **Sender**: Enter your WhatsApp Sender ID * In MSG91 dashboard, go to **WhatsApp** section * Click on **Sender ID** in the left navigation * Copy your Sender ID * **Template ID**: (Optional) Default template ID to use for messages * **Webhook Path**: Copy the webhook URL from this field and set it up in MSG91 * In MSG91 dashboard, go to **Webhook (old)** in the left navigation * Paste the webhook URL in the placeholder field * Save the configuration </Step> <Step title="Save Configuration"> Click on **Save** to complete the MSG91 WhatsApp integration setup. </Step> </Steps> <Note> Ensure that your WhatsApp message templates are pre-approved in MSG91 before sending messages. Message delivery depends on template approval status. </Note> # Meta WhatsApp Source: https://docs.trysiren.io/docs/ChannelsProviders/whatsapp/Meta-WhatsApp ***Prerequisites:*** * Active Meta Developer account with WhatsApp Business API access * Verified business with Meta * Approved WhatsApp Business Account * Pre-configured message templates <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaConfig.PNG?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=5884b369d340ee235e205e7959cb01d8" alt="Meta WhatsApp integration screenshot" data-og-width="1918" width="1918" data-og-height="916" height="916" data-path="docs/Images/Providers/Integrations/Whatsapp/MetaConfig.PNG" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaConfig.PNG?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=304d65f699ec82ad821e9dbc4c6f48dc 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaConfig.PNG?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=173aed2ae7f755b3847486b91c01e171 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaConfig.PNG?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=2773b27461545b92697f007de5024193 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaConfig.PNG?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=c07cb8c29bc83afa7392387031bf7703 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaConfig.PNG?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=24cf51f4c453edc70776418790e1fd15 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaConfig.PNG?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=0fcfdef5112c87044e864a5fc3e2d236 2500w" /> ## Integration Setup To integrate your Meta account with Siren for WhatsApp messaging, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select WhatsApp Channel"> Choose the **WhatsApp** channel from the available options. </Step> <Step title="Choose Meta"> Locate **Meta** in the list of providers and click on **Add Account**. </Step> <Step title="Get Meta WhatsApp Credentials"> Before filling in the account details, gather these credentials from your Meta Developer account: 1. Log in to your [Meta Developer Account](https://developers.facebook.com/) 2. Select your WhatsApp Business App 3. In the left navigation panel, click on **App Settings** > **Basic** * Note down your **App ID** and **App Secret** 4. In the left navigation, go to **WhatsApp** > **API Setup** * Click **Generate Token** to get your **Access Token** * Note down your **Phone Number ID** and **Business Account ID** <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaAccessToken.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=1287bd268e354c26e7863d0e8b6567fb" alt="Meta Access Token" data-og-width="1890" width="1890" data-og-height="954" height="954" data-path="docs/Images/Providers/Integrations/Whatsapp/MetaAccessToken.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaAccessToken.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=f2fe9c714577f54248710ea402c23216 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaAccessToken.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=23bc529e035c4303fd8b76f56874f0f3 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaAccessToken.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=5c98384e33f1200caf5ba8467773145b 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaAccessToken.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=fd934c8b0e63c5b5d7f47bac45bdc8a9 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaAccessToken.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=11cf476fe8497a040a28665fed25bcb8 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaAccessToken.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=e9962e9e72a5c3ec7f8fa26eb05a08a8 2500w" /> <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaAppsecret.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=a5eb559992ab5d0105cdb8d6e55ac1e4" alt="Meta App Secret" data-og-width="1896" width="1896" data-og-height="710" height="710" data-path="docs/Images/Providers/Integrations/Whatsapp/MetaAppsecret.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaAppsecret.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=13e584f383636001b08bfd4c0680f624 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaAppsecret.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=f9b9c0839b432616e87f8af6b2bac27b 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaAppsecret.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=5c8b18ff8c885e9f3104e826d20ecb51 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaAppsecret.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=f4e770f3e1c010d1a904c8fde768ef45 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaAppsecret.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=4ad4b6e2e90499e829e71fb542e5cc2d 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/MetaAppsecret.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=906d39b0e30722321bedc94ac225422a 2500w" /> </Step> <Step title="Fill in Account Details"> In the pop-up window, enter the following details: * **Custom Name**: Provide a name for easy identification within Siren's interface * **App Secret**: The App Secret from Meta Developer Console * **Access Token**: The token generated in API Setup * **Business Account ID**: Your WhatsApp Business Account ID * **Phone Number ID**: The ID of your WhatsApp Business Number * **Webhook Path**: Copy the webhook URL from Siren </Step> <Step title="Configure Webhook in Meta"> 1. In your Meta Developer account, go to **WhatsApp** > **Configuration** 2. Under **Webhook**, click **Edit** 3. Paste the **Callback URL** from Siren 4. Enter the **Verification Token** from Siren 5. Select all the message events you want to receive 6. Click **Verify and Save** </Step> <Step title="Save Configuration"> Click on **Save** to complete the Meta WhatsApp integration setup. </Step> </Steps> <Note> * Keep your Access Token and App Secret confidential and never share them publicly. * Ensure your WhatsApp message templates are pre-approved before sending messages. </Note> # Twilio Source: https://docs.trysiren.io/docs/ChannelsProviders/whatsapp/Twilio-WhatsApp Step-by-step guide to integrate Twilio WhatsApp with Siren for WhatsApp Business messages ***Prerequisites:*** * A Twilio account * A Twilio phone number with WhatsApp capabilities * WhatsApp Business API access (request through Twilio) * Account SID and Auth Token <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/twilio.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=2d577955090947cf339045f8bae4bc91" alt="Twilio WhatsApp integration screenshot" data-og-width="1848" width="1848" data-og-height="925" height="925" data-path="docs/Images/Providers/Integrations/Whatsapp/twilio.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/twilio.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=122985bbf1da67bbb81ccbcddd39705c 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/twilio.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=f079bc645ddca51e77a6a80307f2a94f 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/twilio.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=afdc0956ce4513b3f7229a726b59f1f6 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/twilio.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=28b0b167ff32c7040c394e43c3601713 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/twilio.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=7236c50cef0561fdf66bc59b1c9bf131 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/twilio.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=fb800475733f500db9702885332e7d1b 2500w" /> ## Integration Setup To integrate Twilio WhatsApp with Siren, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select WhatsApp Channel"> Choose the **WhatsApp** channel from the available options. </Step> <Step title="Choose Twilio"> Locate **Twilio** in the list of providers and click on **Add Account**. </Step> <Step title="Get Twilio Credentials"> Before filling in the account details, you will need to gather your Twilio credentials: 1. **Auth Token**: * Go to the Twilio Console * Under the **Developer** tab, click on **Account** > **Account Info** * Copy the **Auth Token** <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioAuthToken.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=5da1935999ebabd882babcc5370bbc77" alt="Twilio Auth Token" data-og-width="1895" width="1895" data-og-height="956" height="956" data-path="docs/Images/Providers/Integrations/SMS/TwilioAuthToken.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioAuthToken.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=717e5be719501e423fcfd68e89b94a70 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioAuthToken.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=a0892dec91667d2cfa2ab1fc088d3dda 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioAuthToken.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=eb24910211ac697d448b322a423935c6 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioAuthToken.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=ad910165d0e5e994147aa754032f9bc5 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioAuthToken.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=71b4b2da70272fbe37c33218bd9613ea 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioAuthToken.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=1b931c3f0e5801d06da271c998faf9ae 2500w" /> 2. **Account SID**: * In the Twilio Console, go to the **Developer** tab * Click on **Services** * Select account SID 3. **Webhook Setup**: * Go to the **Monitor** tab * Click on **Logs** > **Webhooks** * Paste the Webhook URL from Siren here <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioWebhook.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=e1b2048b422537196c1b1a04e2bae440" alt="Twilio Webhook" data-og-width="1904" width="1904" data-og-height="957" height="957" data-path="docs/Images/Providers/Integrations/SMS/TwilioWebhook.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioWebhook.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=415e17dc70ca3de6e6107909abc8c285 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioWebhook.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=a3d6e971b9128343dc6bb4571455c219 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioWebhook.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=d66f9ff9560eeaba19bd9c126873e456 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioWebhook.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=1735b25050abdd3e2c5d636e74e475a1 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioWebhook.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=759e210686463599c0886cac4c5f3ccc 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/SMS/TwilioWebhook.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=4fdeee39184cbeed7292e1c3e55dc38b 2500w" /> </Step> <Step title="Enter Account Details"> In the pop-up window, enter the following details: * **Custom Name**: A name to identify this integration in Siren * **Account SID**: Your Twilio Account SID (from Developer > Services) * **Auth Token**: The Auth Token you copied from Account Info * **From Number**: Your Twilio WhatsApp number in E.164 format (e.g., +1234567890) </Step> <Step title="Save Configuration"> Click **Save** to complete the setup. </Step> </Steps> # WATI Source: https://docs.trysiren.io/docs/ChannelsProviders/whatsapp/WATI ***Prerequisites:*** * Active WATI account * Access to WATI dashboard * Admin permissions for API access <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/Wati.PNG?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=d00c3d178fbc7bb3491c1e3f3abd8a55" alt="WATI Configuration" data-og-width="1920" width="1920" data-og-height="916" height="916" data-path="docs/Images/Providers/Integrations/Whatsapp/Wati.PNG" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/Wati.PNG?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=de31d8b2c16f0e28c4707252fd95ea9b 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/Wati.PNG?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=47d2fc46d9bfc61cf828600a09b449e2 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/Wati.PNG?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=7df8ff6736fb97c71f2e2ca9fc060322 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/Wati.PNG?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=c7884af88616bcc308012d96abbed8fb 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/Wati.PNG?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=c40a2376e4dbcb72c46f2b91b2ead69d 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Providers/Integrations/Whatsapp/Wati.PNG?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=c84e42f8e4843c44fffc15e8bde33947 2500w" /> ## Integration Setup To integrate your WATI account with Siren, follow these steps: <Steps> <Step title="Navigate to Providers"> Go to the **Providers** section in your Siren dashboard. </Step> <Step title="Select WhatsApp Channel"> Choose the **WhatsApp** channel from the available options. </Step> <Step title="Choose WATI"> Locate **WATI** in the list of providers and click on **Add Account**. </Step> <Step title="Get WATI Credentials"> Before filling in the account details, gather these credentials from your WATI Dashboard: 1. Log in to your [WATI Dashboard](https://app.wati.io/) 2. Navigate to **API Settings** 3. Find your **Access Token** - This is a unique key for authentication 4. Locate your **API Endpoint** - Typically looks like `https://app.wati.io/api/v1` Keep these credentials secure as they'll be used to connect WATI with Siren. </Step> <Step title="Fill in Account Details"> In the pop-up window, enter the following details: * **Custom Name**: Provide a unique name to identify this integration in Siren * **Access Token**: The API token from your WATI account * **API Endpoint**: The base URL for WATI API * **Webhook Path**: Copy the webhook URL from Siren and paste it in the **Webhook URL** field in your WATI account settings </Step> <Step title="Configure Webhook in WATI"> 1. Go back to your WATI dashboard 2. Navigate to **API & Webhook** settings 3. Paste the webhook URL from Siren into the Webhook URL field 4. Select the events you want to receive notifications for 5. Save the settings </Step> <Step title="Save Configuration"> Click on **Save** to complete the WATI integration setup. </Step> </Steps> # API Keys Management Source: https://docs.trysiren.io/docs/Configurations/API-Keys API keys are essential for authenticating and authorizing API requests to Siren. This guide explains how to create, view, and manage your API keys. ## Generating a New API Key <Steps> <Step title> Navigate to **Settings** in the left navigation pane and click on **API Keys** under the Configurations section </Step> <Step title> On the API Keys page, click **Add API Key** in the top-right corner </Step> <Step title> In the modal that appears: * Enter a descriptive name for the API key * Click **Save** to generate the key </Step> </Steps> <Warning> Copy the generated API key immediately and store it securely. They key will not be shown again. </Warning> ## Managing Existing API Keys The API Keys page displays all your active API keys with the following information: * API Key Name * Date Created ### Available Actions For each API key, you can: * **Edit**: Click the three dots (⋮) and select **Edit** to update the key name * **Delete**: Click the three dots (⋮) and select **Delete** to revoke the key ## Best Practices * **Security**: Never share your API keys or commit them to version control * **Naming**: Use descriptive names that indicate the key's purpose ## Troubleshooting If you encounter any issues with your API keys: * Verify the key is correctly copied and pasted * Check if the key has been deleted or deactivated * Ensure your account has the necessary permissions * Contact support if issues persist # Webhook Configuration Source: https://docs.trysiren.io/docs/Configurations/Webhook Webhooks in Siren enable real-time communication between your application and external services by sending HTTP callbacks when specific events occur. Siren supports two types of webhooks: Notification Webhook and Inbound Message Webhook. ## Accessing Webhook Configuration To configure webhooks in Siren: <Steps> <Step title=""> Navigate to **Settings** in the left navigation pane </Step> <Step title=""> Click on **Configurations** under Settings </Step> <Step title=""> Select the **Webhook** tab </Step> </Steps> ## Notification Webhook Notification Webhooks allow you to receive real-time updates about notification events in your Siren account. ### Configuration Steps * **Webhook URL**: The endpoint URL where Siren will send notification events * **Header Key**: The header key to be used in the webhook request * **Header Value**: The header value to be used in the webhook request * **Verification Key**: The verification key to be used in the webhook request ### Notification Webhook Payload Notification webhooks follow this structure: ```json theme={null} { "event": "notification_event_type", "timestamp": "2023-01-01T00:00:00Z", "data": { // Notification event data } } ``` For a complete list of notification events and their payloads, see the [Notification Webhook API Reference](/docs/API-Reference/NotificationWebhookAPI). ## Inbound Message Webhook Inbound Message Webhooks allow external services to send messages to your Siren account, enabling two-way communication. ### Configuration Steps * **Webhook URL**: The endpoint URL where Siren will recieve notification events * **Header Key**: The header key to be used in the webhook request * **Header Value**: The header value to be used in the webhook request * **Verification Key**: The verification key to be used in the webhook request ### Inbound Message Webhook Payload Inbound message webhooks use this structure: ```json theme={null} { "event": "message_received", "timestamp": "2023-01-01T00:00:00Z", "data": { // Inbound message data } } ``` For detailed information about inbound message formats and handling, refer to the [Inbound Webhook API Reference](/docs/API-Reference/InboundMessageWebhookAPI). # Siren Overview Source: https://docs.trysiren.io/docs/Getting Started/Overview **Welcome to Siren** If you are building a product that needs to send notifications, whether Email, SMS, push alerts, or chat messages, you are in the right place. Siren is a flexible notification platform that helps teams design, automate, and send messages across multiple channels. And the best part? You do not need to spend weeks stitching together different tools, everything you need is in one place. Let's walk you through the basics so you can get up and running quickly. Siren is designed to adapt to your team’s workflow; whether you’re setting up onboarding emails, transactional alerts, or multi-step communication flows. With a UI designed for easy and seamless integration, Siren ensures that the right message reaches the right person through the right channel. ## **Why Choose Siren** * **AI agent-ready architecture:** Siren includes a dedicated AI agent toolkit that can learn from the documentation and automatically handle backend integrations into your systems. After one-time integration, the agent can perform a wide range of actions, from sending messages to configuring notification webhooks. * **Design and Send Without Writing Code:** Siren makes messaging effortless, whether you are sending a one-time update or building automated notification journeys. Use our intuitive no-code workflow builder or Instant Execution Tools like single-call APIs, SDKs, and the MCP protocol to perform actions instantly without configuring flows in the UI. No boilerplate. No complex schemas. Just a simple payload and you are live. * **Move fast with direct messaging:** When speed matters, Siren gives you the ability to send messages instantly using a single API call and other methods. Whether it is a critical update or a time-sensitive announcement, you can reach users across any channel without building a full notification logic. * **Monitor Everything, Stay in control:** Siren offers real-time dashboards, detailed logs, and actionable insights so you can track message delivery, channel performance, and system behavior. Troubleshooting is instant, and transparency is built in. * **Built-in visibility and reliability:** Siren helps you stay in control at all times. You have full visibility into your notifications, and built-in fallback logic ensures messages are rerouted through alternate channels if the primary one fails. That way, nothing important slips through. ## **What Siren Offers** Siren is made up of a few key parts that work together to help you send smart, scalable notifications without complexity. ### **Dashboard** The **Siren dashboard** gives you a quick snapshot of your notification system's performance. It shows metrics like total messages sent, delivery rates, channel performance, and workflow activity, all filterable by time range. You can also trigger workflows or campaigns directly from the dashboard, making it a central hub for monitoring and action. ### **Templates** Templates in Siren let you create consistent, reusable message formats that work across multiple channels, including Email, SMS, Push, WhatsApp, and more. Instead of writing a new message every time, you define a template once and personalize it with variables. Each template can support multiple channels within the same definition. For example, you can add an email version and a push notification version of the same message in a single template; each version will have its own channel-specific formatting and content. You can: * Create templates from the UI using the built-in editor * Add and edit content for different channels individually * Add variables to personalize messages, allowing a single template to serve multiple users * Manage templates via API if you prefer a backend-driven approach * Ask your AI agent to manage templates for you Templates are at the heart of message customisation in Siren. Once created, they can be attached to workflows. ### **Workflows** Workflows enable you to define and automate your notification logic. A workflow represents a series of steps that are executed when triggered by either an API call or a scheduled event. These steps determine how and when messages are sent, what content they contain, and through which providers they are delivered. Using Siren's no-code visual editor, you can build workflows that include: * **Connecting a provider**, which defines the external service (e.g., Twilio, SendGrid, Slack, Gmail) used for message delivery. * **Linking message templates** that determine the content and formatting for each channel. * **Configuring actions**, such as introducing delays before sending the message, branching based on conditions, or tracking responses from the recipient. This setup ensures that your notification system is both flexible and reliable, with full control over the flow and behaviour of every message sent. ### **Providers** Siren supports a wide range of communication channels like Email, SMS, WhatsApp, Push, Chat, In-App. You can send messages through any of these channels individually or combine them within the same workflow to create multi-channel notification experiences. Each channel is mapped to one or more **providers**, which are the third-party services responsible for delivering the actual messages. For example, you might use SendGrid for Email, MessageBird for SMS, or OneSignal for Push. Siren allows you to configure and manage these provider connections. Here is a list of providers that Siren gives: * **EMAIL**- Gmail, Mailchimp, Mailgun, Outlook, Postmark, SendGrid, SES * **SMS** - Kaleyra.io, MessageBird, MSG91, Plivo, Twilio * **WHATSAPP**- GUPSHUP, Meta, MSG91, Twilio, WATI * **PUSH** - FCM, OneSignal * **CHAT** - Discord, Line, Microsoft Teams, Slack ### **Campaign** Campaigns let you define and message a targeted group of users, whether you are sending a daily update, a special promotion, or an announcement. You can create your audience using an existing cohort or build a new one by importing user data from your database or a CSV file. Siren also offers a built-in Campaign AI that generates personalized campaigns for you. Just describe your goal in conversational language, and it will configure the campaign, all tailored to your use case. ### **Cohort** A **cohort** in Siren is a group of users who share common attributes or behaviors, such as signing up recently, using a specific feature, or coming from a certain region. Organizing users into cohorts helps you send more relevant, targeted messages. You can create cohorts in several ways: * **Manually**: Add users through the UI or upload a CSV file * **Mixpanel integration**: Import behavior-based cohorts you have already created * **Data source connection**: Sync cohorts directly from databases or warehouses like PostgreSQL, BigQuery, or Snowflake Whether you’re sending a reminder to users who abandoned checkout or announcing a feature to premium users in India, cohorts help ensure your messages reach the right audience with precision. ### **Workspace** A **workspace** in Siren is a dedicated environment where you manage your templates, workflows, users, and campaigns. Siren provides three built-in workspaces: * **Sandbox**: for early exploration and experiments * **Staging**: for testing workflows and templates before going live * **Production**: for sending live notifications to real users Each workspace is isolated from the others, allowing you to build, test, and deploy safely without impacting your production data or users. ### **Webhook** Siren uses webhooks to keep your systems in sync with what’s happening behind the scenes. You can add a provider’s webhook URL to receive real-time delivery updates directly from services like Twilio or SendGrid. Siren also supports two built-in webhooks: * The **Notifications Webhook** lets you instantly receive events like delivery or failure as they happen. * The **Inbound Message Webhook** captures replies or incoming messages from users and passes them to your system. With these in place, you stay updated on both outbound and inbound messages, without polling or manual checks. ### **Unified Logs** Logs give you a detailed view of every workflow event, including message delivery status, when the workflow was triggered, and what actions were taken. You’ll also find a summary of the workflow, response data from the provider, the message content, and other useful debug information. It’s your one-stop place to track, verify, and troubleshoot every notification run. ### **User** The **Users** section in Siren lets you manage the people who will receive your notifications. You can add users manually, upload them in bulk using a CSV file, or import data from connected sources. Each user profile can store multiple channel identifiers, such as email, phone number, push token, or Slack ID, so messages can be routed through the appropriate channel. You can also define custom properties for each user, which can later be used for personalization, targeting, or cohort segmentation. ## **Next step** With basics covered. let's move on to configuring Siren so you can start delivering your first message. # Quick Start Guide Source: https://docs.trysiren.io/docs/Getting Started/Quick-start-Guide Let us get you up and running in a few simple steps. Follow these four steps to get started with Siren: <Steps> <Step title="Create Your Siren Account"> Sign up at [Siren](https://app.trysiren.io/) using **Email & Password, Gmail account** or **GitHub**. </Step> <Step title="Generate Your API Key"> After logging in: * Go to the **left navigation bar** → **Settings** → **Configurations** * Click **"Add API Key"** in the top right corner * Enter a name for your API key * Your **API Token** will be generated <Warning> Copy and store this token securely. it is required to authenticate all API requests.\ → [View API Reference](/docs/API-Reference/API%20References) </Warning> </Step> <Step title="Set Up Your Providers"> To add or update providers: * Go to **Settings** → **Providers** from the left panel * Select a channel (SMS, Email, Push, etc.) * Choose a provider and click **"Add Account"** * Enter the required credentials and API key\ → [View Provider Setup Guide](/docs/ChannelsProviders/Channel-Provider-Overview) <Info> A default provider named **Sample Email Provider** is already configured under the Email channel. </Info> </Step> <Step title="Send Your First Message"> You can start sending messages in multiple ways, depending on how you want to integrate: #### • MCP Server Connect the MCP (Model Context Protocol) server to let tools interact with Siren through function calls for messaging and other actions.\ [Go to MCP](/docs/AI-Agent-Toolkit/MCP/Overview) to see the integration guide #### • AI Agent Toolkit The AI Agent Toolkit provides a set of predefined tools that let your agent perform different tasks within Siren. To learn more about the available tools and how to integrate them, go to the [AI Agent Toolkit Reference](/docs/AI-Agent-Toolkit/AI%20Agent%20Toolkit). #### • SDK Use the Siren Python SDK to call built-in functions for sending messages and triggering workflows directly from your backend. [Go to SDK Docs](/docs/SDK/backend/python-sdk) to see the integration guide #### • API Use Siren's flexible, lightweight APIs to send messages without creating a full workflow. You can trigger one-off notifications using APIs. [View API Reference](/docs/API-Reference/API%20References) to see how to send messages using APIs. </Step> </Steps> *** # QuickSend Source: https://docs.trysiren.io/docs/Getting Started/QuickSend To send notification directly without setting up a workflow. Need to send a critical update or one-off announcement? You can use Siren to send a notification without setting up a workflow. This lets you directly send messages to a user over your desired channel. To send a message, you just need to include the channel, recipient details (matching that channel), and optionally a template name with variables, as shown below. The request must be authorized using your API key. Once sent, Siren will return a `notificationId`, which you can use to check the message status or fetch replies Here's a simplified example: ```json theme={null} { "channel": "EMAIL", "recipient": { "email": "user@example.com" }, "template": { "name": "welcome_template" }, "templateVariables": { "firstName": "John", "offerCode": "ABCD123" } } ``` <Note> If you are not using the default provider configured in the Siren account, you can specify which provider to use by adding the `providerIntegration` field in the request. Please take a look at [API Reference](/docs/API-Reference/CreateProviderIntegrationAPI) for the details. </Note> Once a message is sent, you can use the following endpoints to track it: * `GET /message-status/{notificationId}` - Check whether the message was delivered, failed, or is still pending. * `GET /get-reply/{notificationId}` - Fetch replies to a message (currently supported for Slack only). This includes main messages and threaded responses from users. These endpoints help you build a full feedback loop between your system, the provider, and the user. For the complete details, refer to [API Reference](/docs/API-Reference/GetMessageRepliesAPI). You can also send notifications using **MCP**, **AI Agent Toolkit**, or **SDK**, depending on your system architecture. ### Using MCP (Model Context Protocol) If you are using MCP to send a notification quickly, follow these steps: <Steps> <Step title="Install or run the MCP server"> You can either install it globally using `npm install -g @trysiren/mcp`, or run it directly with `npx -y @trysiren/mcp`. </Step> <Step title="Start the server with messaging tool enabled"> Run the following command to enable the QuickSend tool:\ `npx -y @trysiren/mcp --tools=messaging.send --api-key=YOUR_SIREN_API_KEY` </Step> <Step title="Configure your development environment"> Connect your MCP-compatible environment (e.g., Claude, VS Code, Replit, Cursor) to the running MCP server.\ Refer to the [MCP documentation](/docs/AI-Agent-Toolkit/MCP/Overview) for environment-specific setup. </Step> <Step title="Call the `messaging.send` tool"> Once configured, use your assistant or client to trigger a notification using the `messaging.send` method — no workflow setup required. </Step> <Step title="Track message status"> Use tools like `messaging.getStatus` or the `/message-status/{id}` endpoint to monitor delivery. </Step> </Steps> ### Using AI Agent Toolkit If you are using AI Agent toolkit to send a notification quickly, follow these steps: <Steps> <Step title="Install the Agent Toolkit"> Install the SDK using your preferred package manager:\ `npm install @trysiren/agent-toolkit`\ or\ `yarn add @trysiren/agent-toolkit` </Step> <Step title="Initialize the toolkit with your API key"> Import `SirenToolkit` and pass your API key during initialization.\ You can optionally configure the messaging tool permissions. </Step> <Step title="Expose tools to your AI framework"> Use the `getTools()` method to expose Siren tools (like `send_message`) to frameworks like OpenAI, LangChain, or Vercel AI SDK. </Step> <Step title="Trigger messages using `send_message` tool"> The agent can now use function calls to send notifications on supported channel,— just like an API or MCP request. </Step> <Step title="Monitor delivery with `get_message_status` or logs"> Use status-checking tools within the agent environment, or fallback to Siren’s tracking endpoints and logs. </Step> </Steps> Refer to the [AI Agent Toolkit documentation](/docs/AI-Agent-Toolkit/AI%20Agent%20Toolkit) for full implementation details. ### Using SDK If you are using the Siren SDK to send a notification quickly, follow these steps: <Steps> <Step title="Install the SDK"> ```python theme={null} pip install trysiren ``` </Step> <Step title="Initialize the client"> ```python theme={null} from siren import SirenClient client = SirenClient() # Uses SIREN_API_KEY from environment ``` </Step> <Step title="Send a message"> ```python theme={null} client.message.send( recipient_value="user@example.com", channel="EMAIL", template_name="welcome_template", template_variables={ "firstName": "John", "offerCode": "ABCD123" } ) ``` </Step> <Step title="(Optional) Track delivery status"> ```python theme={null} client.message.get_status("notificationId") ``` </Step> </Steps> <Info> This example demonstrates usage with the Python SDK. Siren also provides a TypeScript SDK, and the same procedures can be followed using TypeScript as well. For details on the TypeScript SDK and complete SDK usage, refer to the [SDK Documentation](/docs/SDK/backend/python-sdk). </Info> For more complex orchestration, you can utilise the workflow editor and start designing your own [notification workflow](/docs/Workflow/CreatingWorkflow). # Account Management Source: https://docs.trysiren.io/docs/Managing user accounts/ManageAccount Access and manage your Siren account settings, profile information, and team members from the user menu. ## Accessing Account Settings * Click on your profile icon in the top-right corner of the dashboard * A dropdown menu will appear with the following options: * **Manage Account** * **Team** * **Logout** ## Manage Account ### Account Tab View and edit your personal information: * **Email**: Your registered email address (read-only) * **Name**: Your full name (editable) * **Organization**: Your organization name (editable) * **Change Password**: Option to update your account password ### Billing Tab View your subscription details: * Current plan information * Plan end date ## Team Management Access team settings to manage organization members: ### Team Members List View all team members with their: * Email addresses * Assigned roles (Admin, User, Finance) * Account status * Last active status ### Managing Team Members #### Adding New Members * Click **Invite Team Member** * In the modal that appears: * Enter the member's email address * Select a role from the dropdown: * **Admin**: Has full access to all features in Siren. * **User**: Has full access to templates, workflows, and dashboard. * **Finance**: Has access to billing and read-only access to templates, workflows, and dashboard. * Click **Send Invite** # Dashboard Overview Source: https://docs.trysiren.io/docs/Monitoring/02 - Dashboard/Dashboard Overview Welcome to Siren's Dashboard\ Our comprehensive tool provides a detailed analysis of your notification performance across various metrics, ensuring you are always in control of your communication strategy. # null Source: https://docs.trysiren.io/docs/Monitoring/02 - Dashboard/Dashboard UI Gain valuable insights into your notification performance with our intuitive dashboard. <img src="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/dashboard.png?fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=15caff60468f62341d9e94382140b490" alt="Dashboard UI" data-og-width="1845" width="1845" data-og-height="763" height="763" data-path="docs/Images/Dashboard/dashboard.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/dashboard.png?w=280&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=197d3f42782ab80aa016bef067b66752 280w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/dashboard.png?w=560&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=3433687ccd590026f21f8d0063d0626a 560w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/dashboard.png?w=840&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=08ebdb072dc40d54e48b28c11aaf5df9 840w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/dashboard.png?w=1100&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=bcb0a10751b9874a881768b1a541f35b 1100w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/dashboard.png?w=1650&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=ae2aae60536b2807f6b742840897fe6a 1650w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/dashboard.png?w=2500&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=1d49aff58dd80c688c9bf87ba93b5221 2500w" /> *** ## Filters * **Time Filter**:\ Select from predefined ranges like **Last 7 days**, **28 days**, or **customize the date range** to focus on specific periods relevant to your analysis. * **Version Filter**:\ Easily switch between **Live** and **Test** versions to view data specific to your current testing or production environment. ## Overview and Insights * Get a comprehensive overview of your account's performance in the Insights section. * Track essential metrics such as: * Total Notifications Sent * Workflows Processed * Channel Performance <img src="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/insights.png?fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=ef640643b624b36d49d80f8cbfd971a9" alt="Dashboard UI" data-og-width="976" width="976" data-og-height="599" height="599" data-path="docs/Images/Dashboard/insights.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/insights.png?w=280&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=34d60d1d2bdab5ccd3cd25d8ace63c6b 280w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/insights.png?w=560&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=d2a732abd28225f12f706d47faabc38f 560w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/insights.png?w=840&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=cf037e7642f28e3ff79f2df1de7843a3 840w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/insights.png?w=1100&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=27e6a11288592245ea278be4c945cb68 1100w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/insights.png?w=1650&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=991270ac435beed25fc45696b006593f 1650w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/insights.png?w=2500&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=2649a28ff43261b395f6bbeb04db15e0 2500w" /> ## Visualizations * Channel Engagement: Visualize engagement levels across different channels, offering insights into audience interaction. * Delivery Status: Monitor the overall delivery status of your notifications across various channels, ensuring effective message dissemination. * Provider Performance: Evaluate the performance of your providers in terms of delivery efficiency, facilitating informed decision-making. * Activity Trends: Track usage trends for channels or integrations over time, enabling you to identify patterns and optimize resource allocation. * Top Events: Identify the most frequently triggered Notification Events, enabling you to prioritize and optimize messaging strategies accordingly. <img src="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/graph.png?fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=c748e8769d5c5f0fcaedd70363b78ae5" alt="Dashboard UI" data-og-width="1329" width="1329" data-og-height="595" height="595" data-path="docs/Images/Dashboard/graph.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/graph.png?w=280&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=3c51cdc8181c30e240d3142d3fe650d9 280w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/graph.png?w=560&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=f151b9e249e045c6f2f6c3724e1df7dc 560w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/graph.png?w=840&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=c626c08d8e32100161b201213bbb0c18 840w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/graph.png?w=1100&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=cec90655ba1cc16a6caeb1845e78c405 1100w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/graph.png?w=1650&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=880ad72ba0be1733b1248a63f861331a 1650w, https://mintcdn.com/siren/q3XgL8jc8gQ9gho_/docs/Images/Dashboard/graph.png?w=2500&fit=max&auto=format&n=q3XgL8jc8gQ9gho_&q=85&s=680d60f5cd8ab49ce5bfb08d8689c48e 2500w" /> With Siren's Dashboard, monitoring and optimizing your notification performance has never been more efficient. Dive in and unlock the full potential of your communication strategy with ease! # Workspace Overview Source: https://docs.trysiren.io/docs/Monitoring/Workspace Overview **Workspaces** are isolated environments within Siren designed to keep disassociated communications contained and easier to manage. By default, Siren provides three Workspaces: * **Sandbox** * **Staging** * **Production** <img src="https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workspaces/workspaces.png?fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=83b2f2adc249504d06d6c7b97bc8c649" alt="Workspaces" data-og-width="1046" width="1046" data-og-height="399" height="399" data-path="docs/Images/Workspaces/workspaces.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workspaces/workspaces.png?w=280&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=4ec28aacc98047773570e182749eedbe 280w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workspaces/workspaces.png?w=560&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=b9ef43017127e5416cbb3becc9ba7988 560w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workspaces/workspaces.png?w=840&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=45406c8b58ce34be6ecdc2687985640a 840w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workspaces/workspaces.png?w=1100&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=1618d33aa6ba01b00efd647907f08a5b 1100w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workspaces/workspaces.png?w=1650&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=c0b65663e5dbe99a132892934cdc9b78 1650w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workspaces/workspaces.png?w=2500&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=66cbb835434bbdf4a25dbe045e738974 2500w" /> ## Key Characteristics of Workspaces * Each workspace has its own: * **Templates** * **Vendor settings** * **Workflows** * **Organization settings** are common across all workspaces. <Note> Each Workspace has its own **Workspace API Key**, which can be copied from the **API Keys** section in the **Configuration** page. </Note> # Python Source: https://docs.trysiren.io/docs/SDK/backend/python-sdk This is the official Python SDK for the Siren notification platform. ## Installation ```bash theme={null} pip install trysiren ``` ## Basic Usage ### Synchronous Client ```python theme={null} from siren import SirenClient # Uses SIREN_API_KEY and SIREN_ENV environment variables client = SirenClient() # Send a direct message without template message_id = client.message.send( recipient_value="alice@company.com", channel="EMAIL", body="Your account has been successfully verified. You can now access all features." ) # Send a message using a template message_id = client.message.send( recipient_value="U01UBCD06BB", channel="SLACK", template_name="welcome_template", template_variables={"user_name": "John"}, ) # Send a message with specific provider from siren.models.messaging import ProviderCode message_id = client.message.send( recipient_value="alice@company.com", channel="EMAIL", body="Your account has been successfully verified.", provider_name="email-provider", provider_code=ProviderCode.EMAIL_SENDGRID, ) # Send a message using awesome template message_id = client.message.send_awesome_template( recipient_value="U01UBCD06BB", channel="SLACK", template_identifier="awesome-templates/customer-support/escalation_required/official/casual.yaml", template_variables={ "ticket_id": "123456", "customer_name": "John", "issue_summary": "Payment processing issue", "ticket_url": "https://support.company.com/ticket/123456", "sender_name": "Support Team" }, provider_name="slack-provider", provider_code=ProviderCode.SLACK, ) # Alternative initialization client = SirenClient(api_key="YOUR_SIREN_API_KEY") # default env is "prod" # Or: client = SirenClient(api_key="YOUR_SIREN_API_KEY", env="dev") ``` ### Asynchronous Client ```python theme={null} from siren import AsyncSirenClient # Using async context manager (recommended) async with AsyncSirenClient() as client: message_id = await client.message.send( recipient_value="alice@company.com", channel="EMAIL", body="Your account has been successfully verified. You can now access all features." ) # Or manually managing the client client = AsyncSirenClient() try: message_id = await client.message.send( recipient_value="alice@company.com", channel="EMAIL", body="Your account has been successfully verified. You can now access all features." ) finally: await client.aclose() ``` All synchronous methods have a 1-to-1 asynchronous equivalent—just await them on the async client. ## SDK Methods The Siren Python SDK provides a clean, namespaced interface to interact with the Siren API. Below are the available methods organized by functionality. ### Templates | Method | Description | | --------------------------- | ------------------------------------------------------------------------------------------- | | `client.template.get()` | Retrieves a list of notification templates with optional filtering, sorting, and pagination | | `client.template.create()` | Creates a new notification template | | `client.template.update()` | Updates an existing notification template | | `client.template.delete()` | Deletes an existing notification template | | `client.template.publish()` | Publishes a template, making its latest draft version live | ### Channel Templates | Method | Description | | ---------------------------------- | ---------------------------------------------------------------- | | `client.channel_template.create()` | Creates or updates channel-specific templates (EMAIL, SMS, etc.) | | `client.channel_template.get()` | Retrieves channel templates for a specific template version | ### Messaging | Method | Description | | ---------------------------------------- | -------------------------------------------------------------------------------- | | `client.message.send()` | Sends a message (with or without a template) to a recipient via a chosen channel | | `client.message.send_awesome_template()` | Sends a message using a template path/identifier | | `client.message.get_replies()` | Retrieves replies for a specific message ID | | `client.message.get_status()` | Retrieves the status of a specific message (SENT, DELIVERED, FAILED, etc.) | ### Workflows | Method | Description | | -------------------------------- | ---------------------------------------------------------------- | | `client.workflow.trigger()` | Triggers a workflow with given data and notification payloads | | `client.workflow.trigger_bulk()` | Triggers a workflow in bulk for multiple recipients | | `client.workflow.schedule()` | Schedules a workflow to run at a future time (once or recurring) | ### Webhooks | Method | Description | | ------------------------------------------ | ----------------------------------------------------- | | `client.webhook.configure_notifications()` | Configures webhook URL for receiving status updates | | `client.webhook.configure_inbound()` | Configures webhook URL for receiving inbound messages | ### Users | Method | Description | | ---------------------- | ----------------------------------------------------------------- | | `client.user.add()` | Creates a new user or updates existing user with given unique\_id | | `client.user.update()` | Updates an existing user's information | | `client.user.delete()` | Deletes an existing user | ## For Package Developers ### Environment Configuration For testing the SDK, set these environment variables: * `SIREN_API_KEY`: Your API key from the Siren dashboard * `SIREN_ENV`: Set to `dev` for development/testing (defaults to `prod`) ### Prerequisites * Git * Python 3.8 or higher * uv (installed, see [uv installation guide](https://github.com/astral-sh/uv)) ### Setup Steps 1. **Clone the repository**: ```bash theme={null} git clone https://github.com/KeyValueSoftwareSystems/siren-py-sdk.git cd siren-py-sdk ``` 2. **Create a virtual environment using uv**: ```bash theme={null} uv venv ``` 3. **Activate the virtual environment**: ```bash theme={null} # On macOS/Linux source .venv/bin/activate # On Windows .venv\Scripts\activate ``` 4. **Install dependencies with uv**: ```bash theme={null} uv pip install -e ".[dev]" ``` 5. **Set up pre-commit hooks**: ```bash theme={null} uv run pre-commit install ``` You are now ready to contribute to the trysiren SDK! ### Code Style & Linting Code style is enforced by: * `ruff` (linting, formatting, import sorting) * `pyright` (type checking) These tools are automatically run via pre-commit hooks. ### Running Tests To run the test suite, use the following command from the project root directory: ```bash theme={null} uv run pytest ``` This will execute all tests defined in the `tests/` directory. ### Submitting Changes 1. Create a feature branch for your changes 2. Commit your changes (pre-commit hooks will run) 3. Push your branch and open a Pull Request against the `develop` branch ### Changes Planned * Investigate how critical `.close()` is for async client * Explore ways to avoid manual `.close()` calls # TypeScript Source: https://docs.trysiren.io/docs/SDK/backend/typescript-sdk This is the official TypeScript/Node.js SDK for the Siren notification platform. ## Installation <CodeGroup> ```bash npm theme={null} npm install @trysiren/node ``` ```bash Yarn theme={null} yarn add @trysiren/node ``` </CodeGroup> ## Basic Usage ```typescript theme={null} import { SirenClient, ProviderCode, RecipientChannel } from '@trysiren/node'; // Initialize using environment variables SIREN_API_KEY (and optional SIREN_ENV) const client = new SirenClient(); // --- Send a direct message (no template) --- const directMessageId = await client.message.send({ recipientValue: 'alice@company.com', channel: RecipientChannel.EMAIL, body: 'Your account has been successfully verified. You can now access all features.' }); console.log('Sent direct message:', directMessageId); // --- Send a message using a template --- const templatedMessageId = await client.message.send({ recipientValue: 'U01UBCD06BB', channel: RecipientChannel.SLACK, templateName: 'welcome_template', templateVariables: { user_name: 'John' } }); console.log('Sent template message:', templatedMessageId); // --- Send with a specific provider --- const providerMessageId = await client.message.send({ recipientValue: 'alice@company.com', channel: RecipientChannel.EMAIL, body: 'Your account has been successfully verified.', providerName: 'email-provider', providerCode: ProviderCode.EMAIL_SENDGRID }); console.log('Sent with provider:', providerMessageId); // --- Send using an awesome template identifier --- const awesomeMessageId = await client.message.sendAwesomeTemplate({ recipientValue: 'U01UBCD06BB', channel: RecipientChannel.SLACK, templateIdentifier: 'awesome-templates/customer-support/escalation_required/official/casual.yaml', templateVariables: { ticket_id: '123456', customer_name: 'John', issue_summary: 'Payment processing issue', ticket_url: 'https://support.company.com/ticket/123456', sender_name: 'Support Team' }, providerName: 'slack-provider', providerCode: ProviderCode.SLACK }); console.log('Sent awesome template:', awesomeMessageId); ``` ## SDK Methods The Siren TypeScript SDK provides a clean, namespaced interface to interact with the Siren API. Below are the available methods organized by functionality. ### Templates | Method | Description | | --------------------------- | ------------------------------------------------------------------------------------------- | | `client.template.get()` | Retrieves a list of notification templates with optional filtering, sorting, and pagination | | `client.template.create()` | Creates a new notification template | | `client.template.update()` | Updates an existing notification template | | `client.template.delete()` | Deletes an existing notification template | | `client.template.publish()` | Publishes a template, making its latest draft version live | ### Channel Templates | Method | Description | | ----------------------------------------- | ---------------------------------------------------------------- | | `client.template.createChannelTemplate()` | Creates or updates channel-specific templates (EMAIL, SMS, etc.) | | `client.template.getChannelTemplates()` | Retrieves channel templates for a specific template version | ### Messaging | Method | Description | | -------------------------------------- | -------------------------------------------------------------------------------------- | | `client.message.send()` | Sends a message (with or without using a template) to a recipient via a chosen channel | | `client.message.sendAwesomeTemplate()` | Sends a message using a template path/identifier | | `client.message.getReplies()` | Retrieves replies for a specific message ID | | `client.message.getStatus()` | Retrieves the status of a specific message (SENT, DELIVERED, FAILED, etc.) | ### Workflows | Method | Description | | ------------------------------- | ---------------------------------------------------------------- | | `client.workflow.trigger()` | Triggers a workflow with given data and notification payloads | | `client.workflow.triggerBulk()` | Triggers a workflow in bulk for multiple recipients | | `client.workflow.schedule()` | Schedules a workflow to run at a future time (once or recurring) | ### Webhooks | Method | Description | | ----------------------------------------- | ----------------------------------------------------- | | `client.webhook.configureNotifications()` | Configures webhook URL for receiving status updates | | `client.webhook.configureInbound()` | Configures webhook URL for receiving inbound messages | ### Users | Method | Description | | ---------------------- | ----------------------------------------------------------------- | | `client.user.add()` | Creates a new user or updates existing user with given unique\_id | | `client.user.update()` | Updates an existing user's information | | `client.user.delete()` | Deletes an existing user | ## For Package Developers ### Environment Configuration For testing the SDK, set these environment variables: * `SIREN_API_KEY`: Your API key from the Siren dashboard * `SIREN_ENV`: Set to `dev` for development/testing (defaults to `prod`) ### Prerequisites * Git * Node.js 14 or higher * npm or yarn ### Setup Steps <Steps> <Step title="Clone the repository"> ```bash theme={null} git clone https://github.com/KeyValueSoftwareSystems/siren-ts-sdk.git cd siren-ts-sdk ``` </Step> <Step title="Install dependencies"> ```bash theme={null} # Using npm npm install # Or using yarn yarn install ``` </Step> <Step title="Set up pre-commit hooks"> ```bash theme={null} # Using npm npm run prepare # Or using yarn yarn prepare ``` </Step> </Steps> You are now ready to contribute to the `@trysiren/node` SDK! ### Code Style & Linting Code style is enforced by: * ESLint and Prettier for code formatting * TypeScript compiler for type checking These tools are automatically run via pre-commit hooks. ### Running Tests To run the test suite, use the following command from the project root directory: ```bash theme={null} # Using npm npm test # Or using yarn yarn test ``` This will execute all tests defined in the `src/__tests__/` directory. ### Submitting Changes 1. Create a feature branch for your changes 2. Commit your changes (pre-commit hooks will run) 3. Push your branch and open a Pull Request against the `develop` branch # Android Source: https://docs.trysiren.io/docs/SDK/frontend/android-sdk ## Overview The `siren-android-inbox` SDK is a comprehensive and customizable Android UI kit for displaying and managing notifications. This documentation provides comprehensive information on how to install, configure, and use the SDK effectively. ## Installation ### Prerequisites * Android Studio Arctic Fox or later * Android SDK 21 or higher * Kotlin 1.5.0 or higher ### Add JitPack Repository Add the JitPack repository to your project-level `build.gradle` file: ```groovy theme={null} allprojects { repositories { // ... maven { url 'https://jitpack.io' } } } ``` ### Add Dependency Add the SDK dependency to your app-level `build.gradle` file: ```groovy theme={null} dependencies { implementation 'com.github.KeyValueSoftwareSystems:siren-android-inbox:1.0.1' } ``` ## Configuration ### Initialization Initialize `SirenSDK` in your `MainActivity` by passing the context, token, recipientId, and error callback: ```kotlin theme={null} import com.keyvalue.siren.androidsdk.helper.client.SirenSDK class MainActivity : AppCompatActivity() { private lateinit var sirenSDK: SirenSDK override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) sirenSDK = SirenSDK.getInstance( context = applicationContext, token = "YOUR_USER_TOKEN", recipientId = "YOUR_RECIPIENT_ID", object : ErrorCallback { override fun onError(jsonObject: JSONObject) { // Handle initialization error } } ) } } ``` ### Configure Notification Icon Add a notification icon with a badge showing unread count: ```kotlin theme={null} import com.keyvalue.siren.androidsdk.helper.customization.SirenInboxIconProps sirenSDK.SirenInboxIcon( SirenInboxIconProps( theme = customTheme, // Optional: Custom theme darkMode = true, // Optional: Enable dark mode notificationIcon = CustomIcon(), // Optional: Custom icon ), object : SirenInboxIconCallback { override fun onError(jsonObject: JSONObject) { // Handle error } override fun onClick() { // Handle icon click } }, ) ``` #### Notification Icon Parameters | Parameter | Description | Type | Default | | ------------------ | ------------------------ | --------------------------- | ------- | | `theme` | Theme configuration | `Theme` | `null` | | `customStyles` | Custom styles | `CustomStyles` | `null` | | `notificationIcon` | Custom notification icon | `@Composable (() -> Unit)?` | `null` | | `darkMode` | Enable dark mode | `Boolean` | `false` | | `disabled` | Disable click on icon | `Boolean` | `false` | | `hideBadge` | Hide the badge on icon | `Boolean` | `false` | ### Configure Notification Inbox Display a paginated list of notifications: ```kotlin theme={null} import com.keyvalue.siren.androidsdk.helper.customization.SirenInboxProps sirenSDK.SirenInbox( SirenInboxProps( title = "My Notifications", darkMode = true, hideHeader = false, // Other customization options... ), object : SirenInboxCallback { override fun onCardClick(notificationItem: AllNotificationResponseData) { // Handle notification click } override fun onError(jsonObject: JSONObject) { // Handle error } } ) ``` #### Inbox Parameters | Parameter | Description | Type | Default | | ------------------------ | ------------------------------ | --------------------------------------------------- | --------------- | | `theme` | Theme configuration | `Theme` | `null` | | `title` | Inbox title | `String` | "Notifications" | | `hideHeader` | Hide header section | `Boolean` | `false` | | `hideClearAll` | Hide clear all button | `Boolean` | `false` | | `darkMode` | Enable dark mode | `Boolean` | `false` | | `cardProps` | Notification card props | `CardProps` | `null` | | `listEmptyComponent` | Custom empty state | `@Composable () -> Unit` | `null` | | `customHeader` | Custom header component | `@Composable () -> Unit` | `null` | | `customFooter` | Custom footer component | `@Composable () -> Unit` | `null` | | `customNotificationCard` | Custom card component | `@Composable (AllNotificationResponseData) -> Unit` | `null` | | `customLoader` | Custom loading component | `@Composable () -> Unit` | `null` | | `customErrorWindow` | Custom error component | `@Composable () -> Unit` | `null` | | `itemsPerFetch` | Items per API request (max 50) | `Int` | `20` | ### Customization ```kotlin Theme Customization theme={null} import androidx.compose.ui.graphics.Color val customTheme = Theme( light = ThemeProps( colors = ThemeColors( primaryColor = Color(0xFF6200EE), textColor = Color(0xFF000000), // ... other colors ), badgeStyle = BadgeThemeProps( color = Color.Red, textColor = Color.White ) // ... other theme props ), dark = ThemeProps( // Dark theme overrides ) ) ``` #### ```kotlin Style Customization theme={null} import androidx.compose.ui.unit.dp import androidx.compose.ui.text.font.FontWeight val customStyles = CustomStyles( notificationIcon = NotificationIconStyle( size = 48.dp ), windowHeader = WindowHeaderStyle( height = 56.dp, titleFontWeight = FontWeight.Bold, titleSize = 18.sp ) // ... other style customizations ) ``` ### Functions ```kotlin Notification Management theme={null} // Mark notifications as read by date sirenSDK.markNotificationsAsReadByDate( startDate = "2023-01-01T00:00:00Z", callback = object : SirenAllNotificationUpdateCallback { override fun onSuccess(dataStatus: DataStatus?) { // Handle success } override fun onError(jsonObject: JSONObject) { // Handle error } } ) // Mark single notification as read sirenSDK.markAsRead( notificationId = "123", callback = object : MarkAsReadByIdCallback { override fun onSuccess(responseData: MarkAsReadByIdResponseData?) { // Handle success } override fun onError(jsonObject: JSONObject) { // Handle error } } ) // Delete notification sirenSDK.deleteNotification( notificationId = "123", callback = object : SirenAllNotificationUpdateCallback { override fun onSuccess(dataStatus: DataStatus?) { // Handle success } override fun onError(jsonObject: JSONObject) { // Handle error } } ) // Update user token sirenSDK.updateToken( userToken = "NEW_USER_TOKEN", recipientId = "NEW_RECIPIENT_ID" ) ``` ### Error Codes | Error Code | Description | | --------------------------- | --------------------------- | | `TIMED_OUT` | Request timed out | | `INVALID_TOKEN` | The token passed is invalid | | `INVALID_RECIPIENT_ID` | The recipient ID is invalid | | `TOKEN_VERIFICATION_FAILED` | Token verification failed | | `GENERIC_API_ERROR` | Unexpected API error | ### Example ```kotlin theme={null} class MainActivity : AppCompatActivity() { private lateinit var sirenSDK: SirenSDK override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Initialize SDK sirenSDK = SirenSDK.getInstance( context = applicationContext, token = "YOUR_USER_TOKEN", recipientId = "YOUR_RECIPIENT_ID", object : ErrorCallback { override fun onError(jsonObject: JSONObject) { Log.e("SirenSDK", "Initialization error: ${jsonObject.toString()}") } } ) // Set up notification icon setContent { sirenSDK.SirenInboxIcon( SirenInboxIconProps( darkMode = isSystemInDarkTheme(), notificationIcon = { Icon( imageVector = Icons.Default.Notifications, contentDescription = "Notifications", modifier = Modifier.size(24.dp) ) } ), object : SirenInboxIconCallback { override fun onError(jsonObject: JSONObject) { Log.e("SirenSDK", "Icon error: ${jsonObject.toString()}") } override fun onClick() { // Show notifications list showInbox() } } ) } } private fun showInbox() { // Show notifications list in a dialog or new screen setContent { sirenSDK.SirenInbox( SirenInboxProps( title = "My Notifications", darkMode = isSystemInDarkTheme() ), object : SirenInboxCallback { override fun onCardClick(notificationItem: AllNotificationResponseData) { // Handle notification click Toast.makeText( this@MainActivity, "Clicked: ${notificationItem.title}", Toast.LENGTH_SHORT ).show() } override fun onError(jsonObject: JSONObject) { Log.e("SirenSDK", "Inbox error: ${jsonObject.toString()}") } } ) } } } ``` # Flutter Source: https://docs.trysiren.io/docs/SDK/frontend/flutter-sdk ## Overview The `sirenapp_flutter_inbox` is a comprehensive and customizable Flutter UI kit for displaying and managing notifications. This documentation provides comprehensive information on how to install, configure, and use the SDK effectively. ## Installation To install the `sirenapp_flutter_inbox` package: <Steps> <Step title> Open your `pubspec.yaml` file </Step> <Step title> Add `sirenapp_flutter_inbox` to your dependencies:Add `sirenapp_flutter_inbox` to your dependencies: ```yaml theme={null} dependencies: sirenapp_flutter_inbox: ^1.0.0 # Use the latest version ``` </Step> <Step title> Run `flutter pub get` in your terminal to install the package </Step> </Steps> ## Configuration ### Initialization Initialize the SDK with user token and recipient ID. Wrap the provider around your App's root widget. ```dart theme={null} import 'package:sirenapp_flutter_inbox/sirenapp_flutter_inbox.dart'; void main() { runApp( SirenProvider( userToken: 'YOUR_USER_TOKEN', recipientId: 'YOUR_RECIPIENT_ID', child: const MyApp(), ), ); } ``` ### Configure Notification Icon This widget displays a notification icon with a badge showing the number of unviewed notifications. ```dart theme={null} SirenInboxIcon() ``` #### Notification Icon Arguments | Argument | Description | Type | Default | | ------------------ | -------------------------------------------------- | -------------------------- | ------- | | `darkMode` | Enable dark mode when custom theme is not provided | `bool` | `false` | | `disabled` | Disable click on icon | `bool` | `false` | | `hideBadge` | Hide unviewed count badge | `bool` | `false` | | `notificationIcon` | Custom notification icon | `Widget` | `null` | | `onError` | Error callback | `Function(SirenErrorType)` | `null` | | `onTap` | Custom tap handler | `VoidCallback` | `null` | | `theme` | Theme properties | `CustomThemeColors` | `null` | | `customStyles` | Style properties | `CustomStyles` | `null` | ### Configure Notification Inbox The `SirenInbox` widget provides a paginated list view for displaying notifications. ```dart theme={null} SirenInbox( headerParams: HeaderParams(showBackButton: true), cardParams: CardParams(hideAvatar: false), onError: (error) { // Handle Error }, ) ``` #### Inbox Arguments | Argument | Description | Type | Default | | -------------------- | ---------------------------------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `darkMode` | Enable dark mode | `bool` | `false` | | `hideTab` | Show/hide All/Unread tabs | `bool` | `false` | | `itemsPerFetch` | Notifications per request (max 50) | `int` | `20` | | `listEmptyWidget` | Custom empty state widget | `Widget` | `null` | | `customCard` | Custom card builder | `Widget Function(NotificationType)` | `null` | | `customLoader` | Custom loading widget | `Widget` | `null` | | `customErrorWidget` | Custom error widget | `Widget` | `null` | | `cardParams` | Card properties | `CardParams` | CardParams(`hideAvatar: false`, `disableAutoMarkAsRead: false`, `hideDelete: false`, `deleteIcon: Icon(Icons.close)`, `onAvatarClick: Function(NotificationType)`, `hideMediaThumbnail: false`, `onMediaThumbnailClick: Function(NotificationType))` | | `headerParams` | Header properties | `HeaderParams` | HeaderParams(`hideHeader: false`, `hideClearAll: false`, `title: 'Notifications'`, `customHeader: null`, `showBackButton: false`, `backButton: null`, `onBackPress: null`) | | `tabParams` | Tab bar properties | `TabParams` | TabParams(`tabs: [TabItem(key: 'ALL', title: 'All'), TabItem(key: 'UNREAD', title: 'Unread')], activeTabIndex: 0`) | | `onCardClick` | Card tap handler | `Function(NotificationType)` | `null` | | `onError` | Error callback | `Function(SirenErrorType)` | `null` | | `theme` | Theme properties | `CustomThemeColors` | `null` | | `customStyles` | Style properties | `CustomStyles` | `null` | | `customTabIndicator` | Tab indicator decoration | `BoxDecoration` | `null` | | `filterParams` | Filter configuration | `FilterParams` | FilterParams(`categoryFilterParams: CategoryFilterParams(showFilters: true`, `filterIconWidget: null`, `hideBadge: false`, `categoryFilterStyles: CategoryFilterStyles(dropdownTextStyle: null))`) | ### Filter Configuration ```dart theme={null} SirenInbox( filterParams: FilterParams( categoryFilterParams: CategoryFilterParams( showFilters: true, filterIconWidget: const Icon(Icons.filter_list), hideBadge: false, categoryFilterStyles: CategoryFilterStyles( dropdownTextStyle: const TextStyle( fontSize: 14, color: Colors.black87 ) ) ) ) ) ``` ## Customization ```dart Theme Customization theme={null} theme: CustomThemeColors( backgroundColor: Colors.blue, primary: Colors.blueAccent, highlightedCardColor: Colors.blue.shade100, borderColor: Colors.grey.shade300, deleteIcon: Colors.red, clearAllIcon: Colors.grey, textColor: Colors.black87, dateColor: Colors.grey, timerIcon: Colors.blue, notificationIconColor: Colors.blue, loaderColor: Colors.blue, inboxHeaderColors: InboxHeaderColors( background: Colors.white, titleColor: Colors.black87, headerActionColor: Colors.blue, borderColor: Colors.grey.shade300 ), badgeColors: BadgeColors( backgroundColor: Colors.red, color: Colors.white ), cardColors: CardColors( borderColor: Colors.grey.shade300, background: Colors.white, titleColor: Colors.black87, subtitleColor: Colors.grey, descriptionColor: Colors.black54 ), tabColors: TabColors( containerBackgroundColor: Colors.white, activeTabBackgroundColor: Colors.blue.shade50, activeTabTextColor: Colors.blue, inactiveTabTextColor: Colors.grey, indicatorColor: Colors.blue ), filterColors: FilterColors( categoryFilterColors: CategoryFilterColors( filterIconBorderColor: Colors.grey.shade300, filterBadgeColor: Colors.blue, filterDropdownBackgroundColor: Colors.white, filterCheckboxCheckedColor: Colors.blue, filterCheckboxUncheckedColor: Colors.grey.shade300, filterActionTextColor: Colors.black87, filterIconColor: Colors.blue, checkIconColor: Colors.white ) ) ) ``` ```dart Style Customization theme={null} customStyles: CustomStyles( container: ContainerStyle( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(8) ), margin: const EdgeInsets.all(8) ), cardStyle: CardStyle( cardContainer: ContainerStyle( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: Colors.white, border: Border.all(color: Colors.grey.shade300), borderRadius: BorderRadius.circular(8) ) ), cardTitle: const TextStyle( fontSize: 16, fontWeight: FontWeight.w600, color: Colors.black87 ), cardSubtitle: const TextStyle( fontSize: 14, fontWeight: FontWeight.w500, color: Colors.grey ), cardDescription: const TextStyle( fontSize: 14, color: Colors.black54 ), dateStyle: const TextStyle( fontSize: 12, color: Colors.grey ), avatarSize: 40 ), appBarStyle: InboxHeaderStyle( headerTextStyle: const TextStyle( fontSize: 18, fontWeight: FontWeight.w600, color: Colors.black87 ), titlePadding: const EdgeInsets.symmetric(horizontal: 16), borderWidth: 1 ), notificationIconStyle: const NotificationIconStyle( size: 24 ), badgeStyle: const BadgeStyle( fontSize: 12, size: 20, top: 0, right: 2 ), timerIconStyle: const TimerIconStyle( size: 20 ), deleteIconStyle: const DeleteIconStyle( size: 20 ), clearAllIconStyle: const ClearAllIconStyle( size: 20 ), tabStyles: TabStyles( containerStyle: ContainerStyle( padding: const EdgeInsets.symmetric(horizontal: 16), margin: const EdgeInsets.only(bottom: 8) ), activeTabTextStyle: const TextStyle( fontSize: 14, fontWeight: FontWeight.w600, color: Colors.blue ), inActiveTabTextStyle: const TextStyle( fontSize: 14, fontWeight: FontWeight.w500, color: Colors.grey ), indicatorSize: 2, indicatorPadding: const EdgeInsets.symmetric(horizontal: 16) ), hideTabMargin: const HideTabMargin( upper: false, lower: false ), filterStyles: FilterStyles( categoryFilterStyles: const CategoryFilterStyles( dropdownTextStyle: TextStyle( fontSize: 14, color: Colors.black87 ) ) ) ) ``` ## Siren Class The `Siren` class provides utility functions for managing notifications: | Function | Arguments | Type | Description | | ------------------ | ------------------- | -------- | ------------------------------------------------------ | | `markAsReadByDate` | `startDate: String` | `String` | Sets notifications as read until the given date | | `markAsReadById` | `id: String` | `String` | Marks a specific notification as read | | `deleteById` | `id: String` | `String` | Deletes a specific notification | | `deleteByDate` | `startDate: String` | `String` | Deletes notifications until the given date | | `markAllAsViewed` | `startDate: String` | `String` | Marks all notifications as viewed until the given date | ## Complete Example ```dart theme={null} import 'package:flutter/material.dart'; import 'package:sirenapp_flutter_inbox/sirenapp_flutter_inbox.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatefulWidget { const MyApp({super.key}); @override State<MyApp> createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { @override Widget build(BuildContext context) { return SirenProvider( userToken: 'YOUR_USER_TOKEN', recipientId: 'YOUR_RECIPIENT_ID', child: MaterialApp( title: 'Siren Flutter Inbox', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), home: const MyHomePage(title: 'Home Page'), )); } } class MyHomePage extends StatefulWidget { const MyHomePage({super.key}); @override State<MyHomePage> createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Theme.of(context).colorScheme.inversePrimary, title: const Text(''), actions: [ Padding( padding: const EdgeInsets.only(right: 8.0), child: Row( children: [ SirenInboxIcon(), ], ), ), ], ), body: SirenInbox(), ); } } ``` # JavaScript Source: https://docs.trysiren.io/docs/SDK/frontend/javascript-sdk ## Overview The Siren JS SDK enhances Siren's capabilities by providing advanced notification management functionalities within JavaScript applications. It offers seamless integration, robust error handling, and compatibility with Siren's ecosystem. ## Installation <CodeGroup> ```bash npm theme={null} npm install @sirenapp/js-sdk ``` ```bash Yarn theme={null} yarn add @sirenapp/js-sdk ``` ```bash CDN theme={null} <script src="https://siren-js.sirenapp.io/siren-js-umd-sdk.js"></script> ``` </CodeGroup> ## Usage ### Initialization ```javascript theme={null} import Siren from "@sirenapp/js-sdk"; const sirenInstance = new Siren({ token: "your-user-token", recipientId: "your-recipient-id", onError: (error) => { console.error("Siren Error:", error); }, actionCallbacks: { onEventReceive: (response, eventType) => { console.log("Event received:", eventType, response); } } }); ``` ### Constructor Options | Property | Description | Type | Required | | ----------------- | -------------------------------------- | -------- | -------- | | `token` | Siren user token | string | Yes | | `recipientId` | Siren recipient ID | string | Yes | | `onError` | Error callback function | Function | Yes | | `actionCallbacks` | Callbacks for notifications and counts | Object | No | ## Methods ### fetchUnviewedNotificationsCount() Retrieves the count of unviewed notifications. ```javascript theme={null} const { unviewedCount } = await sirenInstance.fetchUnviewedNotificationsCount(); console.log("Unviewed notifications:", unviewedCount); ``` ### fetchAllNotifications(options) Retrieves a paginated list of notifications. ```javascript theme={null} const notifications = await sirenInstance.fetchAllNotifications({ page: 0, size: 15, start: '2024-01-01T00:00:00.000Z', end: '2024-12-31T23:59:59.999Z', isRead: false, category: 'updates' }); ``` #### Options | Parameter | Description | Type | Default | | ---------- | -------------------------------------------------- | ------- | ------- | | `page` | Current page number | number | 0 | | `size` | Items per page | number | 10 | | `start` | Filter notifications after this date (ISO string) | string | null | | `end` | Filter notifications before this date (ISO string) | string | null | | `isRead` | Filter by read status | boolean | null | | `category` | Filter by category | string | null | #### Response ```typescript theme={null} interface Notification { id: string; createdAt?: string; message: { channel: string; header: string; subHeader: string; body: string; actionUrl: string; avatar: { imageUrl: string; actionUrl: string | null; }; additionalData: string; }; requestId: string; isRead: boolean; } ``` ### startRealTimeFetch(options) Starts real-time notification updates. ```javascript theme={null} // For notifications sirenInstance.startRealTimeFetch({ eventType: 'NOTIFICATIONS', params: { page: 0, size: 15, start: '2024-01-01T00:00:00.000Z', end: '2024-12-31T23:59:59.999Z', isRead: false, category: 'updates' } }); // For unviewed count sirenInstance.startRealTimeFetch({ eventType: 'UNVIEWED_COUNT' }); ``` ### stopRealTimeFetch(eventType) Stops real-time updates. ```javascript theme={null} // Stop notifications updates sirenInstance.stopRealTimeFetch('NOTIFICATIONS'); // Stop unviewed count updates sirenInstance.stopRealTimeFetch('UNVIEWED_COUNT'); ``` ### markAsReadById(notificationId) Marks a notification as read. ```javascript theme={null} await sirenInstance.markAsReadById("notification-id-123"); ``` ### markAsReadByDate(params) Marks notifications as read until a specific date. ```javascript theme={null} await sirenInstance.markAsReadByDate({ startDate: "2024-01-01T00:00:00.000Z", category: "updates" // Optional }); ``` ### deleteById(notificationId) Deletes a notification. ```javascript theme={null} await sirenInstance.deleteById("notification-id-123"); ``` ### deleteByDate(params) Deletes notifications until a specific date. ```javascript theme={null} await sirenInstance.deleteByDate({ startDate: "2024-01-01T00:00:00.000Z", isRead: true, // Optional category: "updates" // Optional }); ``` ### markAllAsViewed(date) Marks all notifications as viewed until the specified date. ```javascript theme={null} await sirenInstance.markAllAsViewed("2024-01-01T00:00:00.000Z"); ``` ## Example ```javascript theme={null} import Siren from "@sirenapp/js-sdk"; // Initialize const siren = new Siren({ token: "your-user-token", recipientId: "your-recipient-id", onError: (error) => { console.error("Siren Error:", error); }, actionCallbacks: { onEventReceive: (response, eventType) => { if (eventType === 'NOTIFICATIONS') { console.log("New notifications:", response); } else if (eventType === 'UNVIEWED_COUNT') { console.log("Unviewed count:", response.unviewedCount); } } } }); // Fetch initial data async function initialize() { try { // Get unread count const { unviewedCount } = await siren.fetchUnviewedNotificationsCount(); console.log("Initial unread count:", unviewedCount); // Get notifications const notifications = await siren.fetchAllNotifications({ page: 0, size: 10, isRead: false }); console.log("Initial notifications:", notifications); // Start real-time updates siren.startRealTimeFetch({ eventType: 'NOTIFICATIONS' }); siren.startRealTimeFetch({ eventType: 'UNVIEWED_COUNT' }); } catch (error) { console.error("Initialization failed:", error); } } // Mark all as read async function markAllAsRead() { try { await siren.markAsReadByDate({ startDate: new Date().toISOString() }); console.log("All notifications marked as read"); } catch (error) { console.error("Failed to mark as read:", error); } } // Clean up function cleanup() { siren.stopRealTimeFetch('NOTIFICATIONS'); siren.stopRealTimeFetch('UNVIEWED_COUNT'); } // Initialize the app initialize(); // Clean up on unmount window.addEventListener('beforeunload', cleanup); ``` # React Source: https://docs.trysiren.io/docs/SDK/frontend/react-sdk ## Overview The `@sirenapp/react-inbox` SDK is a comprehensive and customizable React UI kit for displaying and managing notifications. This documentation provides comprehensive information on how to install, configure, and use the SDK effectively. ## Installation <CodeGroup> ```bash npm theme={null} npm install @sirenapp/react-inbox ``` ```bash Yarn theme={null} yarn add @sirenapp/react-inbox ``` </CodeGroup> ### Prerequisites * React v16.8+ ## Configuration ### Initialization Initialize the SDK with user token and recipient ID. Wrap the provider around your App's root. ```jsx theme={null} import { SirenProvider } from "@sirenapp/react-inbox"; const config = { userToken: "your_user_token", recipientId: "your_recipient_id", }; function App() { return ( <SirenProvider config={config}> {/* Your app components */} </SirenProvider> ); } ``` ### Configure Notification Inbox Once the provider is configured, the next step is to set up the notification inbox. The `SirenInbox` component provides a paginated list view for displaying notifications. ```jsx theme={null} import { SirenInbox } from "@sirenapp/react-inbox"; function NotificationCenter() { return <SirenInbox />; } ``` #### Props for the Notification Inbox | Prop | Description | Type | Default Value | | -------------------- | ------------------------------------------------ | --------------------------------- | ------------- | | `theme` | Object for custom themes | `Theme` | `{}` | | `customStyles` | Object for custom styling | `CustomStyle` | `{}` | | `loadMoreLabel` | Text shown on the load more component | `string` | `"Load More"` | | `hideBadge` | Toggle to hide or show the badge | `boolean` | `false` | | `darkMode` | Toggle to enable dark mode | `boolean` | `false` | | `hideTab` | Toggle to enable all and unread tabs | `boolean` | `false` | | `tabProps` | Props for customizing tabs | `TabProps` | See below | | `itemsPerFetch` | Number of notifications per API request (max 50) | `number` | `20` | | `windowViewOnly` | Toggle for fit-to-screen window or modal view | `boolean` | `false` | | `notificationIcon` | Custom notification icon | `JSX.Element` | `null` | | `headerProps` | Props for customizing the header | `HeaderProps` | See below | | `cardProps` | Props for customizing notification cards | `CardProps` | See below | | `customCard` | Function for rendering custom notification cards | `(notification) => JSX.Element` | `null` | | `onCardClick` | Custom click handler for notification cards | `(notification) => void` | `() => null` | | `listEmptyComponent` | Custom component for empty notification list | `JSX.Element` | `null` | | `customFooter` | Custom footer component | `JSX.Element` | `null` | | `customLoader` | Custom loader component | `JSX.Element` | `null` | | `loadMoreComponent` | Custom load more component | `JSX.Element` | `null` | | `customErrorWindow` | Custom error window component | `JSX.Element` | `null` | | `onError` | Error callback function | `(error: SirenErrorType) => void` | `null` | ## Customization Customize the appearance of the notification inbox using themes: ```typescript Theme Customization theme={null} type Theme = { dark: ThemeProps, light: ThemeProps, }; type ThemeProps = { colors?: { primaryColor?: string, textColor?: string, neutralColor?: string, borderColor?: string, highlightedCardColor?: string, dateColor?: string, deleteIcon?: string, timerIcon?: string, clearAllIcon?: string, infiniteLoader?: string, windowShadowColor?: string, }, badgeStyle?: { color?: string, textColor?: string, }, windowHeader?: { background?: string, titleColor?: string, headerActionColor?: string, }, windowContainer?: { background?: string, }, customCard?: { borderColor?: string, background?: string, titleColor?: string, subtitleColor?: string, descriptionColor?: string, }, loadMoreButton?: { color?: string, background?: string, }, tabs?: { containerBackgroundColor?: string, activeTabBackgroundColor?: string, activeTabTextColor?: string, inactiveTabTextColor?: string, indicatorColor?: string, borderColor?: string, inactiveTabBackgroundColor?: string }; }; ``` Customize the styling of various components: ```typescript Style Customization theme={null} type CustomStyle = { notificationIcon?: { size?: number, }, window?: { width?: DimensionValue, borderRadius?: number, }, windowHeader?: { height?: DimensionValue, titleFontWeight?: TextStyle["fontWeight"], titleSize?: number, titlePadding?: number, borderWidth?: string, }, windowContainer?: { padding?: number, contentHeight?: DimensionValue, }, customCard?: { padding?: number, borderWidth?: number, avatarSize?: number, titleFontWeight?: TextStyle["fontWeight"], titleSize?: number, subtitleFontWeight?: TextStyle['fontWeight'], subtitleSize?: number, descriptionFontWeight?: TextStyle['fontWeight'], descriptionSize?: number, dateSize?: number, }, loadMoreButton?: { fontSize?: number, fontWeight?: TextStyle["fontWeight"] }, badgeStyle?: { size?: number, textSize?: number, top?: number, right?: number }, deleteIcon?:{ size?: number }, timerIcon?:{ size?: number }, clearAllIcon?:{ size?: number }, tabs?: { containerHeight?: number, tabPadding?: number, activeTabTextSize?: number, inactiveTabTextSize?: number, activeTabTextWeight?: TextStyle['fontWeight'], inactiveTabTextWeight?: TextStyle['fontWeight'], indicatorHeight?: number, headingGap?: number, borderWidth?: number, borderRadius?: number, paddingY?: number, paddingX?: number, tabContainerBorderWidth?: number }; } ``` ### Component Props #### CardProps ```typescript theme={null} type CardProps = { hideDelete?: boolean, hideAvatar?: boolean, hideMediaThumbnail?: boolean, disableAutoMarkAsRead?: boolean, deleteIcon?: JSX.Element, onAvatarClick?: () => void, onMediaThumbnailClick?: () => void, }; ``` #### InboxHeaderProps ```typescript theme={null} type InboxHeaderProps = { title?: string, hideHeader?: boolean, hideClearAll?: boolean, customHeader?: JSX.Element | null, }; ``` ## Hooks ### useSiren The `useSiren` hook provides utility functions for modifying notifications: ```jsx theme={null} import { useSiren } from "@sirenapp/react-inbox"; function MyComponent() { const { markAsReadById, markAsReadByDate, deleteById, deleteByDate, markAllAsViewed } = useSiren(); // Example usage const handleMarkAsRead = (id) => { markAsReadById(id); }; // ... rest of your component } ``` #### useSiren Functions | Function | Parameters | Type | Description | | ------------------ | ----------------------------------------- | -------- | -------------------------------------------------------------------- | | `markAsReadByDate` | `{ startDate: string, isRead?: boolean }` | `object` | Updates read status of notifications up to the specified date | | `markAsReadById` | `id: string` | `string` | Sets read status of a notification to true | | `deleteById` | `id: string` | `string` | Deletes a notification by ID | | `deleteByDate` | `{ startDate: string, isRead?: boolean }` | `object` | Deletes notifications until the given date | | `markAllAsViewed` | `untilDate: string` | `string` | Sets the viewed status of notifications to true until the given date | ## Complete Example Here's a complete example of implementing the Siren React Inbox: ```jsx theme={null} import React from "react"; import { SirenInbox, SirenProvider } from "@sirenapp/react-inbox"; // Custom theme const customTheme = { light: { colors: { primaryColor: "#4f46e5", textColor: "#1f2937", neutralColor: "#9ca3af", borderColor: "#e5e7eb", highlightedCardColor: "#f3f4f6", }, windowHeader: { background: "#ffffff", titleColor: "#111827", }, }, dark: { colors: { primaryColor: "#6366f1", textColor: "#f9fafb", neutralColor: "#9ca3af", borderColor: "#374151", highlightedCardColor: "#1f2937", }, windowHeader: { background: "#111827", titleColor: "#f9fafb", }, }, }; // Custom styles const customStyles = { window: { width: 400, borderRadius: 12, }, windowHeader: { height: 60, titleSize: 18, titleFontWeight: "600", }, customCard: { padding: 16, borderWidth: 1, avatarSize: 40, titleSize: 16, subtitleSize: 14, descriptionSize: 14, dateSize: 12, }, }; function App() { const config = { userToken: "your_user_token", recipientId: "your_recipient_id", }; return ( <SirenProvider config={config}> <div className="app"> <h1>My Application</h1> <NotificationCenter /> </div> </SirenProvider> ); } function NotificationCenter() { return ( <div className="notification-center"> <SirenInbox theme={customTheme} customStyles={customStyles} darkMode={false} headerProps={{ title: "Notifications", hideHeader: false, hideClearAll: false, }} cardProps={{ hideDelete: false, hideAvatar: false, disableAutoMarkAsRead: false, onAvatarClick: (notification) => { console.log("Avatar clicked:", notification); }, }} onCardClick={(notification) => { console.log("Notification clicked:", notification); }} onError={(error) => { console.error("Siren Error:", error); }} /> </div> ); } export default App; ``` # React Native Source: https://docs.trysiren.io/docs/SDK/frontend/reactnative-sdk ## Overview The `@sirenapp/react-native-inbox` SDK is a comprehensive and customizable React Native UI kit for displaying and managing notifications. This documentation provides comprehensive information on how to install, configure, and use the SDK effectively. ## Installation <CodeGroup> ```bash npm theme={null} npm install @sirenapp/react-native-inbox ``` ```bash Yarn theme={null} yarn add @sirenapp/react-native-inbox ``` </CodeGroup> ## Configuration ### Initialization Initialize the SDK with the user token and recipient ID. Wrap the provider around your App's root. ```jsx theme={null} import { SirenProvider } from '@sirenapp/react-native-inbox'; const config = { userToken: 'your_user_token', recipientId: 'your_recipient_id', }; function App() { return ( <SirenProvider config={config}> {/* Your app components */} </SirenProvider> ); } ``` ### Configure Notification Icon This component consists of a notification icon along with a badge to display the number of unviewed notifications. ```jsx theme={null} import { SirenInboxIcon } from '@sirenapp/react-native-inbox'; <SirenInboxIcon /> ``` #### Icon Props | Prop | Description | Type | Default | | ------------------ | -------------------------------------- | --------------------------------- | ------- | | `theme` | Object for custom themes | `Theme` | `{}` | | `customStyles` | Object for custom styling | `CustomStyleProps` | `{}` | | `notificationIcon` | Option to use custom notification icon | `JSX.Element` | `null` | | `darkMode` | Toggle to enable dark mode | `boolean` | `false` | | `onError` | Callback for handling errors | `(error: SirenErrorType) => void` | `null` | | `onPress` | Custom click handler | `() => void` | `null` | | `disabled` | Disable click on icon | `boolean` | `false` | | `hideBadge` | Hide unviewed count badge | `boolean` | `false` | #### Customization ```typescript Theme Customization theme={null} type Theme = { dark: ThemeProps; light: ThemeProps; }; type ThemeProps = { badgeStyle?: { color?: string; textColor?: string; }; }; ``` ```typescript Style Customization theme={null} type CustomStyleProps = { notificationIcon?: { size?: number, }; badgeStyle?: { size?: number; textSize?: number; top?: number; right?: number; }; }; ``` ### Configure Notification Inbox Inbox is a paginated list view for displaying notifications. ```jsx theme={null} import { SirenInbox } from '@sirenapp/react-native-inbox'; <SirenInbox /> ``` #### Inbox Props | Prop | Description | Type | Default | | -------------------- | ---------------------------------- | --------------------------------- | ------------ | | `theme` | Object for custom themes | `Theme` | `{}` | | `customStyles` | Object for custom styling | `CustomStyleProps` | `{}` | | `darkMode` | Toggle dark mode | `boolean` | `false` | | `itemsPerFetch` | Notifications per request (max 50) | `number` | `20` | | `cardProps` | Card customization | `CardProps` | See below | | `customCard` | Custom card renderer | `(notification) => JSX.Element` | `null` | | `onCardClick` | Card click handler | `(notification) => void` | `() => null` | | `listEmptyComponent` | Empty state component | `JSX.Element` | `null` | | `headerProps` | Header customization | `HeaderProps` | See below | | `customFooter` | Custom footer component | `JSX.Element` | `null` | | `customLoader` | Custom loading component | `JSX.Element` | `null` | | `customErrorWindow` | Custom error component | `JSX.Element` | `null` | | `onError` | Error handler | `(error: SirenErrorType) => void` | `null` | #### Customization ```typescript Theme Customization theme={null} type Theme = { dark: ThemeProps; light: ThemeProps; }; type ThemeProps = { colors?: { primaryColor?: string; textColor?: string; neutralColor?: string; borderColor?: string; highlightedCardColor?: string; dateColor?: string; deleteIcon?: string; timerIcon?: string; clearAllIcon?: string; infiniteLoader?: string; }; windowHeader?: { background?: string; titleColor?: string; headerActionColor?: string; borderColor?: string; }; windowContainer?: { background?: string; }; notificationCard?: { borderColor?: string; background?: string; titleColor?: string; subTitleColor?: string; descriptionColor?: string; }; }; ``` ```typescript Style Customization theme={null} type CustomStyleProps = { window?: { width?: DimensionValue; height?: DimensionValue; }; windowHeader?: { height?: number; titleFontWeight?: TextStyle['fontWeight']; titleSize?: number; borderWidth?: string; titlePadding?: number; }; windowContainer?: { padding?: number; }; notificationCard?: { padding?: number; borderWidth?: number; avatarSize?: number; titleFontWeight?: TextStyle['fontWeight']; titleSize?: number; subtitleFontWeight?: TextStyle['fontWeight']; subtitleSize?: number; descriptionFontWeight?: TextStyle['fontWeight']; descriptionSize?: number; dateSize?: number; }; deleteIcon?: { size?: number; }; timerIcon?: { size?: number; }; clearAllIcon?: { size?: number; }; }; ``` #### CardProps ```typescript theme={null} type CardProps = { hideAvatar?: boolean; onAvatarClick?: (notification: NotificationDataType) => void; disableAutoMarkAsRead?: boolean; deleteIcon?: JSX.Element; hideDelete?: boolean; hideMediaThumbnail?: boolean; onMediaThumbnailClick?: (notification: NotificationDataType) => void; }; ``` #### HeaderProps ```typescript theme={null} type HeaderProps = { title?: string; hideHeader?: boolean; hideClearAll?: boolean; customHeader?: JSX.Element | null; showBackButton?: boolean; backButton?: JSX.Element; onBackPress?: () => void; }; ``` ## Hooks ### useSiren `useSiren` is a hook that provides utility functions for modifying notifications. ```jsx theme={null} import { useSiren } from '@sirenapp/react-native-inbox'; function MyComponent() { const { markAsReadById, deleteById } = useSiren(); function handleMarkAsRead(id) { markAsReadById(id); } return ( // Your component logic ); } ``` #### useSiren Functions | Function | Parameters | Type | Description | | ------------------ | ----------- | ------------------- | ---------------------------------------------- | | `markAsReadByDate` | `startDate` | `string` (ISO date) | Marks notifications as read until given date | | `markAsReadById` | `id` | `string` | Marks a notification as read | | `deleteById` | `id` | `string` | Deletes a notification by ID | | `deleteByDate` | `startDate` | `string` (ISO date) | Deletes notifications until given date | | `markAllAsViewed` | `startDate` | `string` (ISO date) | Marks notifications as viewed until given date | ## Complete Example ```jsx theme={null} import React from 'react'; import { SafeAreaView, View } from 'react-native'; import { SirenProvider, SirenInbox, SirenInboxIcon, useSiren } from '@sirenapp/react-native-inbox'; function App(): React.JSX.Element { const config = { userToken: 'your_user_token', recipientId: 'your_recipient_id', }; return ( <SirenProvider config={config}> <MyContainer /> </SirenProvider> ); } function MyContainer(): React.JSX.Element { const [showInbox, setShowInbox] = React.useState(false); const { markAllAsViewed } = useSiren(); React.useEffect(() => { // Mark all notifications as viewed when component mounts markAllAsViewed(new Date().toISOString()); }, []); return ( <SafeAreaView style={{ flex: 1 }}> <View style={{ padding: 16 }}> <SirenInboxIcon onPress={() => setShowInbox(true)} darkMode={false} /> </View> {showInbox && ( <SirenInbox darkMode={false} headerProps={{ title: 'Notifications', showBackButton: true, onBackPress: () => setShowInbox(false) }} cardProps={{ hideAvatar: false, disableAutoMarkAsRead: false }} /> )} </SafeAreaView> ); } export default App; ``` # Vue.js Source: https://docs.trysiren.io/docs/SDK/frontend/vuejs-sdk ## Overview The `@sirenapp/vue-inbox` SDK is a comprehensive and customizable Vue 3 UI kit for displaying and managing notifications. This documentation provides comprehensive information on how to install, configure, and use the SDK effectively. ## Installation You can install the Vue SDK from npm or yarn <CodeGroup> ```bash npm theme={null} npm install @sirenapp/vue-inbox ``` ```bash Yarn theme={null} yarn add @sirenapp/vue-inbox ``` </CodeGroup> ### Prerequisites * Vue 3 (v3.0.0+) ### Configuration #### Initialization Initialize the SDK with user token and recipient ID. Wrap the provider around your app's root component: ```vue theme={null} <template> <SirenProvider :config="config"> <-- Your app components --> </SirenProvider> </template> <script setup lang="ts"> import { SirenProvider } from "@sirenapp/vue-inbox"; const config = { userToken: "your_user_token", recipientId: "your_recipient_id", }; </script> ``` #### Configure Notification Inbox Once the provider is configured, add the notification inbox component: ```vue theme={null} <template> <SirenInbox /> </template> <script setup lang="ts"> import { SirenInbox } from "@sirenapp/vue-inbox"; </script> ``` #### Inbox Props | Prop | Description | Type | Default | | ---------------- | ------------------------------------------------ | --------------------------------- | ------------------------------------------------------------------------------------------------- | | `theme` | Object for custom themes | `Theme` | `{}` | | `customStyles` | Object for custom styling | `CustomStyle` | `{}` | | `loadMoreLabel` | Text shown on the load more component | `string` | "Load More" | | `hideBadge` | Toggle to hide or show the badge | `boolean` | `false` | | `darkMode` | Toggle to enable dark mode | `boolean` | `false` | | `itemsPerFetch` | Number of notifications per API request (max 50) | `number` | `20` | | `windowViewOnly` | Toggle for fit-to-screen window or modal view | `boolean` | `false` | | `headerProps` | Props for customizing the header | `HeaderProps` | `{ title: 'Notifications', hideHeader: false, hideClearAll: false }` | | `cardProps` | Props for customizing notification cards | `CardProps` | `{ hideDelete: false, hideAvatar: false, disableAutoMarkAsRead: false, onAvatarClick: ()=>null }` | | `onCardClick` | Click handler for notification cards | `(notification) => void` | `() => null` | | `onError` | Error handler | `(error: SirenErrorType) => void` | `() => null` | #### CardProps ```typescript theme={null} type CardProps = { hideDelete?: boolean; hideAvatar?: boolean; onAvatarClick?: (notification: NotificationDataType) => void; disableAutoMarkAsRead?: boolean; }; ``` #### HeaderProps ```typescript theme={null} type HeaderProps = { title?: string; hideHeader?: boolean; hideClearAll?: boolean; }; ``` #### Inbox Slots Customize components using these slots: | Slot | Description | | -------------------- | ---------------------------------- | | `loadMoreComponent` | Custom load more button component | | `customHeader` | Custom header component | | `customLoader` | Custom loader component | | `customErrorWindow` | Custom error window | | `listEmptyComponent` | Custom empty list component | | `customCard` | Custom notification card component | | `customFooter` | Custom footer component | | `notificationIcon` | Custom notification icon component | ### Customization ```typescript Theme Customization theme={null} type Theme = { dark: ThemeProps, light: ThemeProps, }; type ThemeProps = { colors?: { primaryColor?: string, textColor?: string, neutralColor?: string, borderColor?: string, highlightedCardColor?: string, dateColor?: string, deleteIcon?: string, timerIcon?: string, clearAllIcon?: string, infiniteLoader?: string, windowShadowColor?: string, }, badgeStyle?: { color?: string, textColor?: string, }, windowHeader?: { background?: string, titleColor?: string, headerActionColor?: string, }, windowContainer?: { background?: string, }, customCard?: { borderColor?: string, background?: string, titleColor?: string, subtitleColor?: string, descriptionColor?: string, }, loadMoreButton?: { color?: string, background?: string, }, }; ``` #### ```typescript Style Customization theme={null} type CustomStyle = { notificationIcon?: { size?: number, }, window?: { width?: DimensionValue, borderRadius?: number, }, windowHeader?: { height?: DimensionValue, titleFontWeight?: TextStyle["fontWeight"], titleSize?: number, titlePadding?: number, borderWidth?: string, }, windowContainer?: { padding?: number, contentHeight?: DimensionValue, }, customCard?: { padding?: number, borderWidth?: number, avatarSize?: number, titleFontWeight?: TextStyle["fontWeight"], titleSize?: number, subtitleFontWeight?: TextStyle['fontWeight'], subtitleSize?: number, descriptionFontWeight?: TextStyle['fontWeight'], descriptionSize?: number, dateSize?: number, }, loadMoreButton?: { fontSize?: number, fontWeight?: TextStyle["fontWeight"], }, badgeStyle?: { size?: number, textSize?: number, top?: number, right?: number, }, deleteIcon?:{ size?: number, }, timerIcon?: { size?: number, }, clearAllIcon?:{ size?: number, } }; ``` ### Hooks #### useSiren The `useSiren` hook provides utility functions for modifying notifications: ```vue theme={null} <script setup lang="ts"> import { useSiren } from "@sirenapp/vue-inbox"; const { markAsReadByDate, markAsReadById, deleteById, deleteByDate, markAllAsViewed } = useSiren(); function handleMarkAsReadById(id: string) { markAsReadById(id); } function handleMarkAsReadByDate(untilDate: string) { markAsReadByDate(untilDate); } function handleDeleteById(id: string) { deleteById(id); } function handleDeleteByDate(date: string) { deleteByDate(date); } function handleMarkAllAsViewed(createdAt: string) { markAllAsViewed(createdAt); } </script> ``` #### useSiren Functions | Function | Parameters | Type | Description | | ------------------ | ----------- | --------------- | -------------------------------------------------- | | `markAsReadByDate` | `startDate` | ISO date string | Sets notifications as read until the given date | | `markAsReadById` | `id` | string | Marks a specific notification as read | | `deleteById` | `id` | string | Deletes a specific notification | | `deleteByDate` | `startDate` | ISO date string | Deletes notifications until the given date | | `markAllAsViewed` | `createdAt` | ISO date string | Marks notifications as viewed until the given date | ### Example Here's a complete example of using the Vue.js Inbox SDK: ```vue theme={null} <template> <SirenProvider :config="{ userToken: 'your-user-token', recipientId: 'your-user-recipientId', }" > <SirenInbox :headerProps="{ title: 'Siren Notifications', hideHeader: false, hideClearAll: true, }" :cardProps="{ hideDelete: false, hideAvatar: false, disableAutoMarkAsRead: false }" :darkMode="isDarkMode" @card-click="handleCardClick" @error="handleError" > <template #customLoader> <div class="custom-loader">Loading notifications...</div> </template> <template #listEmptyComponent> <div class="empty-state">No notifications yet</div> </template> </SirenInbox> </SirenProvider> </template> <script setup lang="ts"> import { ref } from 'vue'; import { SirenProvider, SirenInbox } from "@sirenapp/vue-inbox"; const isDarkMode = ref(false); function handleCardClick(notification) { console.log('Notification clicked:', notification); // Navigate to relevant page or show details } function handleError(error) { console.error('Notification error:', error); // Show error message to user } </script> <style scoped> .custom-loader { padding: 1rem; text-align: center; color: #666; } .empty-state { padding: 2rem; text-align: center; color: #999; } </style> ``` ### Troubleshooting #### Common Issues 1. **SDK Not Initializing** * Ensure you have wrapped your app with `SirenProvider` * Verify your `userToken` and `recipientId` are correct * Check the browser console for any error messages 2. **Notifications Not Displaying** * Confirm the user has notifications in the system * Check your network requests for any API errors * Verify the user has the correct permissions 3. **Styling Issues** * Ensure your custom styles do not conflict with the SDK's styles * Check for any CSS specificity issues * Verify all required theme properties are provided if using custom themes *** # Create Template using AI Source: https://docs.trysiren.io/docs/Templates/CreateTemplate Learn how to use our AI assistant to create customized templates for you <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEditPage.PNG?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=b785898de20b5968548959ff992d71e5" alt="Template edit page" data-og-width="1920" width="1920" data-og-height="875" height="875" data-path="docs/Images/Templates/TemplateEditPage.PNG" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEditPage.PNG?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=7c26bd39b88b3f41a5044f79ecfd542c 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEditPage.PNG?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=e81471f601d5b09e331a4f74cb04b581 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEditPage.PNG?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=48bc8901fc7f1973560737a157b80180 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEditPage.PNG?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=993adab14d177a39f9b361293b57df94 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEditPage.PNG?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=3e0e58b07428949974832abf4a7a3eff 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEditPage.PNG?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=a642534408f96d299fb3a586e5c6ef2f 2500w" /> To get started with creating a template, follow these steps: 1. In the left navigation panel, click on **Templates**. 2. Click **+ Add Template**. 3. **Name Your Template**: In the pop-up, provide a name and select or create a tag for ease in template filtering. 4. Click **Save**. 5. Choose the channels for which you want to create templates : <CardGroup cols={3}> <Card title="SMS" icon="message-sms" href="/docs/Templates/Template%20Configurations/SMS-Template" /> <Card title="Email" icon="envelope" href="/docs/Templates/Template%20Configurations/Email-Template" /> <Card title="Push Notification" icon="message" href="/docs/Templates/Template%20Configurations/Push-Template" /> <Card title="Whatsapp" icon="whatsapp" href="/docs/Templates/Template%20Configurations/Whatsapp-Template" /> <Card title="Slack" icon="slack" href="/docs/Templates/Template%20Configurations/Slack-Template" /> <Card title="Microsoft Teams" icon="Microsoft" href="/docs/Templates/Template%20Configurations/Teams-Template" /> <Card title="Discord" icon="discord" href="/docs/Templates/Template%20Configurations/Discord-Template" /> <Card title="In-App Messages" icon="Siren" href="/docs/Templates/Template%20Configurations/InApp-Template" /> <Card title="LINE" icon="Line" href="/docs/Templates/Template%20Configurations/LINE-Template" /> </CardGroup> ## Template editor In the template editor, you can create template either by utilising the provided fields and configurations or by utilising the AI assistant. ### Using AI Assistant <Note> Available for all channels except WhatsApp and LINE </Note> * Access the AI assistant from the right side of the editor UI * Generate template content using natural language prompts * Get suggestions for improvements and optimizations * The AI can help with: * Writing engaging message content * Suggesting effective variable usage * Optimizing message length and format for each channel ### Template Preview * A real-time preview of your template appears on the left side of the editor * See exactly how your message will look before sending * Toggle between different device views (where applicable) to ensure cross-platform compatibility ### Test Data Test data allows you to preview how your template will look with sample variable values. To set up test data: <Steps> <Step> Click the **Test Data** button on top right. </Step> <Step> In the JSON code editor that appears, you can define test values for your variables using these parameters: * **name**: The name of the variable * **placeholder**: A descriptive name shown in the editor * **defaultValue**: The test value to use for preview Example: ```json theme={null} { "name": "user_name", "placeholder": "User's full name", "defaultValue": "John Doe" } ``` </Step> <Step> Click **Save** to apply the test data </Step> <Step> The template preview will update automatically with your test values </Step> </Steps> ### Publishing Your Template Once you've created and tested your template: * Click the **Publish to Live** button in the top right corner. * You can see the template in the templates list. # Discord Template Source: https://docs.trysiren.io/docs/Templates/Template Configurations/Discord-Template The Discord template editor in Siren allows you to create and manage messages for sending to Discord channels or users. You can customize your message with text, variables, and file attachments. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/discordTemplate.PNG?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=662243e8848e1a531fe85cf22c14062a" alt="Discord Template" data-og-width="1756" width="1756" data-og-height="763" height="763" data-path="docs/Images/Templates/TemplateEdit/discordTemplate.PNG" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/discordTemplate.PNG?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=3c805707fe6ed7e8619ce28703a71499 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/discordTemplate.PNG?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=48405a798aa237936b1d6c505a470ee0 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/discordTemplate.PNG?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=fe5bc767b1e333b160551ac75b3b49f3 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/discordTemplate.PNG?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=8a7d8327a3f49824623854ee85936945 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/discordTemplate.PNG?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=9ea3a26b1711509aaff7086b9e001bb8 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/discordTemplate.PNG?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=0005c3665cd522d6e41a2836293e547a 2500w" /> ## Message Content <Steps> <Step title="Compose Message"> Enter your message content in the 'Message Content' field. This is the main text that will be sent to the Discord channel or user. </Step> <Step title="Add Variables"> Use the **'Insert Variable'** button to add dynamic content to your message. Variables will be replaced with actual values when the message is sent. </Step> </Steps> ## Adding Attachments Click the **'Add Attachments'** button to include files with your message. For each attachment, you will need to provide: 1. **File Name/Placeholder**: The name of the file or a placeholder 2. **Type**: Select the file type from the dropdown (PDF, JPEG, DOCX, or CSV) 3. **Content**: The file content as a base64-encoded variable <Note> The file content must be a variable containing a base64-encoded value of the file. </Note> ## Variable Format Use the following format for variables in your message: ``` ${workflow.input.data.variable_name} ``` # Email Template Source: https://docs.trysiren.io/docs/Templates/Template Configurations/Email-Template The Email template editor in Siren allows you to craft, personalize, and manage emails for workflows and campaigns. You can customize content, add dynamic variables, configure advanced sender options, and attach files; all from one place. <img src="https://mintcdn.com/siren/MPfS1RrCiLsgBPSv/docs/Images/Templates/TemplateEdit/emailTemplate.png?fit=max&auto=format&n=MPfS1RrCiLsgBPSv&q=85&s=478d9cd3b427df608d9316577d046d3b" alt="Email Template" data-og-width="1902" width="1902" data-og-height="878" height="878" data-path="docs/Images/Templates/TemplateEdit/emailTemplate.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/MPfS1RrCiLsgBPSv/docs/Images/Templates/TemplateEdit/emailTemplate.png?w=280&fit=max&auto=format&n=MPfS1RrCiLsgBPSv&q=85&s=7c65e190c3f69fb4445722269712cd4f 280w, https://mintcdn.com/siren/MPfS1RrCiLsgBPSv/docs/Images/Templates/TemplateEdit/emailTemplate.png?w=560&fit=max&auto=format&n=MPfS1RrCiLsgBPSv&q=85&s=e82fd6ebff55aba9e29382f286b698f1 560w, https://mintcdn.com/siren/MPfS1RrCiLsgBPSv/docs/Images/Templates/TemplateEdit/emailTemplate.png?w=840&fit=max&auto=format&n=MPfS1RrCiLsgBPSv&q=85&s=1157951638f1621f8ac2aed881a26c8e 840w, https://mintcdn.com/siren/MPfS1RrCiLsgBPSv/docs/Images/Templates/TemplateEdit/emailTemplate.png?w=1100&fit=max&auto=format&n=MPfS1RrCiLsgBPSv&q=85&s=939ee1ff68f0ffef024bd229da344251 1100w, https://mintcdn.com/siren/MPfS1RrCiLsgBPSv/docs/Images/Templates/TemplateEdit/emailTemplate.png?w=1650&fit=max&auto=format&n=MPfS1RrCiLsgBPSv&q=85&s=0778b7f4cc3cc378d40c983efbb099e4 1650w, https://mintcdn.com/siren/MPfS1RrCiLsgBPSv/docs/Images/Templates/TemplateEdit/emailTemplate.png?w=2500&fit=max&auto=format&n=MPfS1RrCiLsgBPSv&q=85&s=46cbaa1c8db4b54d8ffe528a80f32cac 2500w" /> <Note> Email templates must use Handlebars syntax for proper variable handling </Note> <Tabs> <Tab title="Email Template"> <Steps> <Step title="Subject Line"> Use the **subject** field to define the email's subject that appears in the recipient's inbox. It supports variable substitution for personalization. </Step> <Step title="Content Editor"> You can write the body of the email using: * **Rich Text(default)**: for basic formatting like bold, italics, link, and lists. * **HTML Mode**: for custom layouts, branded designs, and complete control over styling. Use the **Toggle Content Mode** button to switch between these two modes based on your use case. </Step> <Step title="Insert Variables and Images"> * Use **Insert Variable** to include dynamic content like `{{order_id}}` or `{{user_name}}`. * Use **Insert Image/Logo** to embed brand elements like headers or logos within your message. </Step> <Step title="Advanced Settings"> You can fine-tune sender information and delivery behavior using the following optional fields: | Setting | Purpose | | :-------------- | :--------------------------------------------------------------------------------- | | **From Name** | Display name shown to recipients (e.g., “Siren Notifications”) | | **From Email** | Email address used to send the message | | **Reply-To** | Address where user replies should go | | **CC / BCC** | Add carbon or blind carbon copy recipients | | **Attachments** | user can attach PDFs, images, docx, and csv, but has to be passed in base64 format | </Step> </Steps> </Tab> <Tab title="Loop Template"> <Steps> <Step title="Transaction ID"> The transaction ID generated after publishing the transactional template in your Loops account. </Step> <Step title="Data Variables"> Add variables that will be dynamically replaced in the transactional email template </Step> <Step title="Add attachments"> Add attachments that will be sent with the transactional email template </Step> </Steps> </Tab> </Tabs> # In-App Template Source: https://docs.trysiren.io/docs/Templates/Template Configurations/InApp-Template The In-App template editor in Siren allows you to create and manage rich notifications that appear within your application. You can customize the appearance and behavior of these notifications to enhance user engagement. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/inAppTemplate.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=1ffdb719d865adf2efa3f4fc1d3c283a" alt="In-App Template" data-og-width="1762" width="1762" data-og-height="752" height="752" data-path="docs/Images/Templates/TemplateEdit/inAppTemplate.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/inAppTemplate.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=60929d0049a9963c00d5864bae4d4492 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/inAppTemplate.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=d416886a22c9f20c95f44b7ade56952c 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/inAppTemplate.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=4d0ba409b8069f8d786c5985eace418c 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/inAppTemplate.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=dec6fefe62aa9408a8d45d304803caba 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/inAppTemplate.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=3de2c58d0714661e0665eaf5f4b8ac49 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/inAppTemplate.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=977b777c91457daff14d020b8fa7722e 2500w" /> ## Notification Configuration <Steps> <Step title="Set Basic Information"> * **Title**: Enter a clear and concise title for your notification * **Message Content**: Write the main message content that will be displayed to users * **Variables**: Use the **'Insert Variable'** button to add dynamic content to your message </Step> <Step title="Enhance Appearance"> * **Subtitle**: Add an optional subtitle to provide more context * **Avatar URL**: Enter a URL for the notification's avatar image * **Media Thumbnail URL**: Add a URL for an optional media thumbnail image </Step> <Step title="Configure Actions"> * **Action URL**: Specify a URL to navigate to when the notification is clicked * **Additional Data**: Enter any extra data as a JSON object (e.g., `{"key": "value"}`) </Step> </Steps> ## Variable Format Use the following format for variables in your message content: ``` ${workflow.input.data.variable_name} ``` ## Best Practices * Keep titles short and attention-grabbing * Use clear and concise message content * Test notifications on different device sizes * Use high-quality images for avatars and thumbnails * Keep JSON data well-structured and minimal # LINE Template Source: https://docs.trysiren.io/docs/Templates/Template Configurations/LINE-Template The LINE template editor in Siren allows you to create and manage rich messages for the LINE messaging platform. You can create multi-message templates with different content types including text, images, and videos. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/lineTemplate.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=02ca82a3c2014e2b7e0af8b1bec0d40c" alt="LINE Template" data-og-width="1759" width="1759" data-og-height="762" height="762" data-path="docs/Images/Templates/TemplateEdit/lineTemplate.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/lineTemplate.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=0b8f08280a0a4fd10bbab9350b0042fd 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/lineTemplate.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=003569ba64596b61c56e4e491c3f546d 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/lineTemplate.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=fb9c8437cf6f595f23cd304417662e0c 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/lineTemplate.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=47124a942ff4f749dd38ac699faba2e2 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/lineTemplate.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=e546ff757fae721ec7a3d532598bbcf3 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/lineTemplate.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=93f3ae6b3e1f538caa013b1d1238b0b8 2500w" /> ## Adding Messages <Steps> <Step title="Add a New Message"> Click the **'Add messages'** button to create a new message in your template. Each message can be configured independently. </Step> <Step title="Select Message Type"> Choose the message type from the **'Type'** dropdown: * **Text**: For text-based messages * **Image**: For sending images * **Video**: For sending videos </Step> </Steps> ## Message Type Configuration <Tabs> <Tab title="Text"> When 'Text' is selected as the message type, you will see these fields: * **Message**: Enter your text content * **Insert Variable**: Add dynamic content to your message * **Quote Token**: (Optional) Add a quote token for message threading </Tab> <Tab title="Image"> When 'Image' is selected as the message type, you will see these fields: * **Content URL**: The URL where the image is hosted * **Preview URL**: A thumbnail URL for the image preview </Tab> <Tab title="Video"> When 'Video' is selected as the message type, you will see these fields: * **Content URL**: The URL where the video is hosted * **Preview URL**: A thumbnail URL for the video preview </Tab> </Tabs> ## Variable Format Use the following format for variables in your message content: ``` ${workflow.input.data.variable_name} ``` ## Best Practices * Keep text messages concise and clear * Ensure image and video URLs are publicly accessible * Use appropriate aspect ratios for media content * Test your template with different message combinations # Push Notification Template Source: https://docs.trysiren.io/docs/Templates/Template Configurations/Push-Template The Push Notification template editor in Siren allows you to create and manage push notifications for mobile and web applications. You can customize the content, appearance, and behavior of your push notifications across different platforms. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/pushTemplate.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=7ed70416a709ee734a47f526dd9f9e6d" alt="Push Notification Template" data-og-width="1734" width="1734" data-og-height="733" height="733" data-path="docs/Images/Templates/TemplateEdit/pushTemplate.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/pushTemplate.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=1184ad930f8df248334fbfb7ce79cc28 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/pushTemplate.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=38f26f6eed1a9b6b67256e4a2049fbc1 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/pushTemplate.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=6a798f3cc5258a0f4df343a6e2c24e81 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/pushTemplate.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=0f694316cbd3308bd7b2808e6bebf083 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/pushTemplate.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=c13f375dd4f68748bd4bd8e364d10bbf 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/pushTemplate.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=e35b684af86f302c284879ccc47b7a6e 2500w" /> ## Preview Area On the left side of the editor, you will find a preview area that shows how your push notification will appear on different platforms. You can toggle between Android, iOS, and Web views to see platform-specific previews. ## Basic Configuration <Steps> <Step title="Title"> The main heading of your push notification. This is the first thing users will see. </Step> <Step title="Message Content"> The main body text of your push notification. Keep it concise and clear. * Use the **Insert Variable** button to add dynamic content like `{{user_name}}` or `{{order_id}}`. </Step> <Step title="Additional Settings"> Configure the behavior and delivery of your push notifications: | Setting | Description | | ------------------- | ------------------------------------------------------------------------- | | **Time to Live** | How long (in seconds) the message should be kept if the device is offline | | **Duration** | How long the notification should be displayed | | **Analytics Label** | A label to track this notification in analytics | | **Priority** | Delivery priority (high, normal, low) | | **Additional Data** | Key-value pairs of custom data to send with the notification | </Step> </Steps> ## Platform-Specific Settings ### Android Settings Configure how your push notification appears and behaves on Android devices: | Setting | Description | | ------------------- | ----------------------------------------------------------------------- | | **Image URL** | URL of an image to display in the notification | | **Destination URL** | URL to open when the notification is tapped | | **Icon URL** | URL of the notification icon | | **Color Hex Code** | Notification color in hex format (e.g., #FF0000) | | **Sound** | Sound to play when the notification arrives | | **Badge** | Number to display as a badge on the app icon | | **Tag** | Identifier used to replace an existing notification | | **Ticker** | Text that appears in the status bar when the notification first arrives | | **Collapse Key** | Key used to collapse similar notifications | ### iOS Settings Configure how your push notification appears and behaves on iOS devices: | Setting | Description | | ---------------- | ---------------------------------------------- | | **Image URL** | URL of an image to display in the notification | | **Subtitle** | Additional text displayed below the title | | **Icon URL** | URL of the notification icon | | **Sound** | Sound to play when the notification arrives | | **Badge** | Number to display as a badge on the app icon | | **Collapse Key** | Key used to collapse similar notifications | ### Web Settings Configure how your push notification appears and behaves in web browsers: | Setting | Description | | ------------- | --------------------------------------------------- | | **Image URL** | URL of an image to display in the notification | | **Icon URL** | URL of the notification icon | | **Badge** | URL of the badge icon | | **Tag** | Identifier used to replace an existing notification | | **Link** | URL to open when the notification is clicked | ## Best Practices * Keep the title under 50 characters for optimal display * Limit the message content to about 150 characters * Use images and icons to make your notifications more engaging * Test notifications on different platforms to ensure proper display * Use variables to personalize notifications when possible # SMS Template Source: https://docs.trysiren.io/docs/Templates/Template Configurations/SMS-Template The SMS template editor in Siren allows you to create and manage text messages for SMS delivery. You can customize your messages with dynamic content and configure delivery settings. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/smsTemplate.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=3f6da91fb69c857f62f14804a1ae96c4" alt="SMS Template" data-og-width="1767" width="1767" data-og-height="766" height="766" data-path="docs/Images/Templates/TemplateEdit/smsTemplate.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/smsTemplate.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=1f225b0ba17c26793dcbf61cdf6267f8 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/smsTemplate.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=f7f0d2d6b1304cbae9eb7768451050da 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/smsTemplate.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=72e29a25a706f8797794e427e5ee09c1 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/smsTemplate.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=325ed5b505f66828399f2f7fb9043d25 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/smsTemplate.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=81d221d085cc52d1bf146b3ef5ada2c1 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/smsTemplate.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=770ad4ca891245808f251347948ae627 2500w" /> ## Message Configuration <Steps> <Step title="Compose Your Message"> * **Message Content**: Enter your SMS content in the message field * **Insert Variable**: Add dynamic content to your message using the variable button </Step> <Step title="Configure SMS Settings"> * **Unicode**: Check this box if your message contains non-ASCII characters * **Flash**: Check this box to send as a flash SMS (appears directly on screen) </Step> <Step title="DLT Template ID (Optional)"> * Toggle the switch to enable DLT Template ID * Enter your DLT Template ID in the provided field <Info> Unique SMS Template ID can be obtained from DLT portal. </Info> </Step> </Steps> <Note> Standard SMS messages are limited to 160 characters. </Note> ## Best Practices * Keep messages concise and to the point * Test your template with different variable values * Be aware of character limits when including variables * Ensure compliance with local SMS regulations # Slack Template Source: https://docs.trysiren.io/docs/Templates/Template Configurations/Slack-Template The Slack template editor in Siren allows you to create and manage messages for sending to Slack channels or users. You can customize your message with rich text, variables, and interactive elements. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/SlackTemplate.PNG?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=953b994528199924499df0fe751de1c2" alt="Slack Template" data-og-width="1731" width="1731" data-og-height="735" height="735" data-path="docs/Images/Templates/TemplateEdit/SlackTemplate.PNG" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/SlackTemplate.PNG?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=470a5e7f1bd8f1941038dfab9488d903 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/SlackTemplate.PNG?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=b3a1bc4221f1e0b1ca98860081e64e7a 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/SlackTemplate.PNG?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=afd33f41624f06622290e27a7c8680bf 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/SlackTemplate.PNG?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=4393c0b4c997ec7a7733e7061d724349 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/SlackTemplate.PNG?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=ac90c7b177bdbb0e030162f23119c396 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/SlackTemplate.PNG?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=d1a26b8e393d258138010400e50044ff 2500w" /> ## Message Content <Steps> <Step title="Compose Message"> Enter your message content in the 'Message Content' field. This is the main text that will be sent to the Slack channel or user. </Step> <Step title="Add Variables"> Use the 'Insert Variable' button to add dynamic content to your message. Variables will be replaced with actual values when the message is sent. </Step> <Step title="Add Attachments (Optional)"> Click the **'Add Attachments'** button to include files with your message. For each attachment, provide: * **File Name/Placeholder**: The name of the file or a placeholder * **Type**: Select the file type from the dropdown (PDF, JPEG, DOCX, or CSV) * **Content**: The file content as a base64-encoded variable <Note> The file content must be a variable containing a base64-encoded value of the file. </Note> </Step> <Step title="Add Buttons (Optional)"> Click the **'Add Buttons'** button to include interactive buttons in your message. For each button, configure: * **Text**: The text to display on the button * **Action ID**: A unique identifier for the button's action * **Value**: The value to send when the button is clicked * **Style**: Choose from these button styles: * **Primary**: For the primary action * **Danger**: For destructive actions * **Plain**: For secondary actions </Step> </Steps> ## Variable Format Use the following format for variables in your message: ``` ${workflow.input.data.variable_name} ``` ## Best Practices * Keep messages clear and concise * Use variables for dynamic content * Test your template with different variable values * Preview your message before sending # MS Teams Template Source: https://docs.trysiren.io/docs/Templates/Template Configurations/Teams-Template The Microsoft Teams template editor in Siren allows you to create and manage messages for sending to Microsoft Teams channels or users. You can customize your message with text and dynamic variables. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/TeamsTemplate.PNG?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=9c9f26883c5b1efd4be679f2369bcf98" alt="Teams Template" data-og-width="1755" width="1755" data-og-height="755" height="755" data-path="docs/Images/Templates/TemplateEdit/TeamsTemplate.PNG" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/TeamsTemplate.PNG?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=38e7abaea870828ede0aebbe5f5643ad 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/TeamsTemplate.PNG?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=e4de68bc8f75d5ba54dc7fabcae84f6d 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/TeamsTemplate.PNG?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=d299c067247f0569563fce991d680339 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/TeamsTemplate.PNG?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=a342e2ab7c4f0556674132b6d03e72be 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/TeamsTemplate.PNG?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=3b1cc022eb62e579a3f82137345e8252 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/TeamsTemplate.PNG?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=9394d3e3c3743da3fe4612739e7070c2 2500w" /> ## Message Content <Steps> <Step title="Compose Message"> Enter your message content in the 'Message Content' field. This is the main text that will be sent to the Microsoft Teams channel or user. </Step> <Step title="Add Variables"> Use the **'Insert Variable'** button to add dynamic content to your message. Variables will be replaced with actual values when the message is sent. </Step> </Steps> ## Variable Format Use the following format for variables in your message: ``` ${workflow.input.data.variable_name} ``` # WhatsApp Template Source: https://docs.trysiren.io/docs/Templates/Template Configurations/Whatsapp-Template The WhatsApp template editor in Siren allows you to create and manage message templates that comply with WhatsApp's Business API guidelines. You can customize message content with variables for personalized communication. <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/whatsappTemplate.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=78396f0b16c355a9f7886f52b172c17f" alt="WhatsApp Template" data-og-width="1707" width="1707" data-og-height="731" height="731" data-path="docs/Images/Templates/TemplateEdit/whatsappTemplate.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/whatsappTemplate.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=114ea930959869aec57f2a72a0dd3ecf 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/whatsappTemplate.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=2a11e7c5a7987b33776e80e70da9c409 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/whatsappTemplate.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=7b4b6a16f914cf56c0870c289145837f 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/whatsappTemplate.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=13a647a92b7152ef1fe110241ecfa11b 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/whatsappTemplate.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=054e7c32c73946ba5ed1a9cb69827bca 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/TemplateEdit/whatsappTemplate.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=5ebf0a2e8d59fff8f69d654038c0eb9d 2500w" /> ## Template Selection <Steps> <Step title="Select Provider"> Choose your WhatsApp Business Solution Provider from the dropdown menu. This determines which templates are available for use. </Step> <Step title="Select Template"> Choose from pre-approved templates that comply with WhatsApp's DLT (Distributed Ledger Technology) guidelines. These templates ensure compliance with WhatsApp's messaging policies. </Step> </Steps> ## Template Configuration Once a template is selected, you can configure the following sections: <Steps> <Step title="Header"> Add an image variable for the header. </Step> <Step title="Body"> Add body variables as needed for the message content. </Step> <Step title="Buttons"> Add button variables for interactive elements. </Step> </Steps> ## Variable Management Add dynamic content to your template: 1. **Header Variables**: * Image URLs for dynamic header images * Text variables for short header text 2. **Body Variables**: * Text variables for personalized content * Format: `${workflow.input.data.variable_name}` * Example: `Hello ${workflow.input.data.customer_name}, your order ${workflow.input.data.order_id} is ready!` 3. **Button Variables**: * Dynamic text in buttons * URL parameters for dynamic links ## Best Practices * Keep messages concise and clear * Test templates with different variable lengths * Ensure all required variables are included * Follow WhatsApp's template approval guidelines * Preview your template before saving * Consider timezone differences for time-sensitive messages # Template Actions Source: https://docs.trysiren.io/docs/Templates/TemplateActions See how to manage templates # Tag Templates <img src="https://mintlify.s3.us-west-1.amazonaws.com/siren/docs/Images/Templates/TemplateTags.png" alt="Tag Template" /> Tags help categorize templates for easier filtering and management across your workspace. <Steps> <Step title="Add Tags During Creation"> While setting up a template, assign tags by selecting from existing ones or typing a new tag name and clicking **Create Tag** </Step> <Step title="Customize Tags"> Tags can contain up to 20 alphanumeric characters, hyphens, and underscores. Assign colors from a predefined palette for quick visual reference. </Step> <Step title="Edit Anytime"> You can add, remove, or update tags even after a template is published. </Step> </Steps> This lightweight tagging flow keeps your workspace organized and improves discoverability across all templates. # Duplicate Templates <img src="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/duplicateTemplate.png?fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=79c1fc942445e3146578f251712e1c96" alt="Duplicate Template" data-og-width="1846" width="1846" data-og-height="972" height="972" data-path="docs/Images/Templates/duplicateTemplate.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/duplicateTemplate.png?w=280&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=ea222ed34113f14bf56ff5da68f6bea1 280w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/duplicateTemplate.png?w=560&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=77fb442eca9e15acc14d11a84f74548a 560w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/duplicateTemplate.png?w=840&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=c09e941fe8eb853a13d5d3c20b28e91b 840w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/duplicateTemplate.png?w=1100&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=34023e65963b74e3aeeb128cead70464 1100w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/duplicateTemplate.png?w=1650&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=1190a44bff4c817714c5b0d1f66e301a 1650w, https://mintcdn.com/siren/7IpRt_YcaXDKVAtZ/docs/Images/Templates/duplicateTemplate.png?w=2500&fit=max&auto=format&n=7IpRt_YcaXDKVAtZ&q=85&s=7333b109d813a48026e77a513686c5c6 2500w" /> Quickly duplicate templates within the same environment to minimize repetition and streamline configuration.[​](https://docs.trysiren.io/Template/Duplicate%20Template#how-to-duplicate) <Steps> <Step> **Access Templates**: Navigate to **Templates** from the left sidebar. </Step> <Step> **Select Template**: Hover on the template to duplicate from the list, then click **Duplicate icon** under **Actions**. </Step> <Step> **Initiate Duplication:** This action prompts the Duplicate Template dialog to appear. Review the Template name, give a new name if you want. Add a Tag. </Step> <Step> **Confirm Duplication**: Complete the process by confirming the duplication. </Step> </Steps> The duplicated template is now available for further customisation or immediate use. # Clone Templates Quickly clone templates to different environments to maintain consistency and reduce errors.\[ <Steps> <Step> **Access Templates**: Navigate to **Templates** from the left sidebar. </Step> <Step> **Select Template**: Hover on the template to clone from the list, then click **Clone icon** under **Actions**. </Step> <Step> **Initiate Cloning:** This action prompts the Clone Template dialog to appear. Review the Template name, select the environment to which you want to clone the template. </Step> <Step> **Confirm Cloning**: Complete the process by confirming the cloning. </Step> </Steps> <Note> You can only clone a published template and the name of the template cannot be changed while cloning. </Note> # Template Overview Source: https://docs.trysiren.io/docs/Templates/TemplatesOverview Understand what templates are, how they work across channels, and how Siren lets you manage them efficiently. Templates in **Siren** are reusable message formats that let you design consistent and personalized content for notifications. These templates can be used across workflows to communicate with users via multiple channels such as Email, SMS, Push, WhatsApp, In-App, and more. Templates act as the foundation for delivering dynamic and personalized experiences across your product touchpoints. *** ## Why Use Templates? * **AI-Powered Creation:** The Chat AI Assistant helps you quickly create templates using natural language prompts, making template creation faster and more intuitive. * **Maintain consistency across Channels:** Using templates ensures that your messages are consistent in tone, structure, and formatting — whether you are sending an SMS, an email, or a push notification. You don’t have to rewrite or reformat every message manually. * **Customize messaging for your brand:** * Add your logo, colors, and brand tone in emails * Include brand-specific sign-offs, headers, or imagery * Align styling across all notifications * **Personalize with variables:** Siren templates support **dynamic content insertion** using variables (like user name, OTP, transaction ID). This allows you to personalize messages based on the recipient’s data while still using a single template. * **Reuse Across Workflows:** Once created, templates can be reused across multiple workflows or campaigns, saving time and ensuring standardization. * No need to duplicate message content every time. * Version control and history help you track changes easily. *** ## Supported Channels Siren supports templates across **9 channels**: <CardGroup cols={3}> <Card title="SMS" icon="Message" href="/docs/03-Templates/Template%20Configurations/SMS-Template" /> <Card title="Email" icon="inbox" href="/docs/03-Templates/Template%20Configurations/Email-Template" /> <Card title="Push Notification" icon="message" href="/docs/03-Templates/Template%20Configurations/Push-Template" /> <Card title="Whatsapp" icon="Whatsapp" href="/docs/03-Templates/Template%20Configurations/Whatsapp-Template" /> <Card title="Slack" icon="slack" href="/docs/03-Templates/Template%20Configurations/Slack-Template" /> <Card title="Microsoft Teams" icon="Microsoft" href="/docs/03-Templates/Template%20Configurations/Teams-Template" /> <Card title="Discord" icon="discord" href="/docs/03-Templates/Template%20Configurations/Discord-Template" /> <Card title="In-App Messages" icon="Siren" href="/docs/03-Templates/Template%20Configurations/InApp-Template" /> <Card title="LINE" icon="Line" href="/docs/03-Templates/Template%20Configurations/LINE-Template" /> </CardGroup> You can configure templates for **one or more channels** within the same template. This means a single template can include content for, say, Email + SMS + In-App together, enabling true multichannel delivery from a unified template. *** ## Multi-Channel Template Structure When creating a template, you can add and configure each channel independently. Each channel supports different fields based on its capabilities. For example: * **Email** supports subject, HTML body, attachments, and advanced headers. * **SMS** allows you to set unicode/flash message types and a DLT template ID. * **Push** supports mobile preview toggles, TTL, image/icon URL, and platform-specific behavior. *** ## Tags Each template can be associated with one or more **tags**. Tags help categorize and group templates by use case, department, product feature, or campaign. When you select templates in workflows or campaigns, **tags help filter and prioritize relevant templates**, especially useful when dealing with a large library. <Info> Templates with the same tag as the workflow are shown at the top in dropdowns when selecting a template. </Info> *** ## Template Versioning Siren maintains a version history every time a published template is updated. You can: * View changes across different versions * Restore to an older version if needed * Keep a clean audit trail of edits This helps you maintain content governance while iterating on templates. <Info> To view the template's version history, click the history icon in the top left corner of the template edit page. </Info> *** ## Where Templates Are Used Templates are used primarily in: * **Workflows** – Triggered notifications based on logic, rules, and data. * **Campaigns** – Bulk or segmented sends for promotional or event-based messaging. To learn how to create and manage templates, visit the [Create Template](./CreateTemplate) page. To see how templates are used inside workflows, check out [Template Node](/docs/02-Workflow/NodeConfiguration/TemplateNode) in Workflows. *** # Create Workflow Source: https://docs.trysiren.io/docs/Workflow/CreatingWorkflow Learn how to create a new workflow and configure different types of nodes # Create Workflow This page explains how to create a new workflow in **Siren** and gives an overview of the Workflow editor. <Steps> <Step title="Navigate to My Workflow"> After logging into Siren: Click **My Workflow** in the left navigation panel. * You will see a list of all existing workflows, including both **Drafts** and **Published**. * Use the **search bar** or apply filters to quickly find specific workflows by name, tag, or status. <Info> In the Workflow list, you will find **Clone** and **Duplicate** options under the **Actions** column. * **Duplicate Workflow** creates a copy of the selected workflow within the **same environment**. * **Clone Workflow** lets you copy the workflow to a **different environment**, such as from staging to production. </Info> </Step> <Step title="Add a New Workflow"> Click the **Add Workflow** button on the top right. This opens a modal where you need to enter: * **Workflow Name** – A unique name to identify your workflow. * **Description** *(optional)* – Brief explanation of what the workflow does. * **Workflow Type** – Select **Basic** or **Advanced**. * **Tag** – Add one or more tags to organize and group related workflows. Click **Save** to continue.\ You will now be redirected to the **Workflow Editor**, where you can begin building the flow. </Step> </Steps> ## <img src="https://mintcdn.com/siren/OGaRYrmfDLxhfwaP/docs/Images/Workflow/basic-workflow-create.png?fit=max&auto=format&n=OGaRYrmfDLxhfwaP&q=85&s=f94b677284344040f3552b47f0bfe794" alt="Workflow creation" data-og-width="1915" width="1915" data-og-height="963" height="963" data-path="docs/Images/Workflow/basic-workflow-create.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/OGaRYrmfDLxhfwaP/docs/Images/Workflow/basic-workflow-create.png?w=280&fit=max&auto=format&n=OGaRYrmfDLxhfwaP&q=85&s=126a7a6e6a2fe2ed1cae219e90ab886f 280w, https://mintcdn.com/siren/OGaRYrmfDLxhfwaP/docs/Images/Workflow/basic-workflow-create.png?w=560&fit=max&auto=format&n=OGaRYrmfDLxhfwaP&q=85&s=5bbc340963070c47df2a77e8db861c52 560w, https://mintcdn.com/siren/OGaRYrmfDLxhfwaP/docs/Images/Workflow/basic-workflow-create.png?w=840&fit=max&auto=format&n=OGaRYrmfDLxhfwaP&q=85&s=60ff731506fc5ef73528d36750434a69 840w, https://mintcdn.com/siren/OGaRYrmfDLxhfwaP/docs/Images/Workflow/basic-workflow-create.png?w=1100&fit=max&auto=format&n=OGaRYrmfDLxhfwaP&q=85&s=74afa00c11b9a12c7a9704eb973104fd 1100w, https://mintcdn.com/siren/OGaRYrmfDLxhfwaP/docs/Images/Workflow/basic-workflow-create.png?w=1650&fit=max&auto=format&n=OGaRYrmfDLxhfwaP&q=85&s=f07518f91eb51adc6cf2d91265eae6c9 1650w, https://mintcdn.com/siren/OGaRYrmfDLxhfwaP/docs/Images/Workflow/basic-workflow-create.png?w=2500&fit=max&auto=format&n=OGaRYrmfDLxhfwaP&q=85&s=17a1e7b50918498be18b653ee3a5e164 2500w" /> # Workflow Editor UI Once you have created and saved a workflow, you will enter the **Workflow Editor**, a visual interface where you can design, test, and configure your workflow. <img src="https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/start-node.PNG?fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=8d70116152f3145f3c4a3b8f90c60244" alt="Workflow Editor canvas" data-og-width="1920" width="1920" data-og-height="916" height="916" data-path="docs/Images/Workflow/start-node.PNG" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/start-node.PNG?w=280&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=2d0c62b85fbb41c5770d931ec044cf64 280w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/start-node.PNG?w=560&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=ace122ea686796078651525f1b7c1c12 560w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/start-node.PNG?w=840&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=880f631db88f1187c534091e62b95f72 840w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/start-node.PNG?w=1100&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=adcea6adc2b01a6a29b262140fda9cf1 1100w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/start-node.PNG?w=1650&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=a2fa37c13afeca2028b05843addccf0b 1650w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/start-node.PNG?w=2500&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=1d20d0d7d184393a6c23c5deb838aed0 2500w" /> At the **top-right corner**, you will find the **Publish** button. Use this to make the workflow live once you are ready. Near the **top-left**, beside the workflow name, you can access **Version History** to view or revert to earlier versions of the workflow. ## Editor Layout The editor starts with a single **Start Node**, which is fixed and cannot be modified. All nodes are added from this starting point. To add a new step, click the `+` icon below any node. This opens a list of available nodes (such as Wait, If, Switch, HTTP, Chat, Template or Provider). Depending on whether you have created a **Basic** or **Advanced** workflow, the available nodes may differ, but all compatible options are shown in the list. > We cover node types and their behavior in more detail in the [Node configuration](/docs/Workflow/NodeConfiguration/NodeConfiguration) page. When you are done building your flow, head to the **top-right corner** and click **Publish** to push the workflow live. Need to check what changed or roll back to an older version? You will find **Version History** next to the workflow name on the **top-left** — perfect for tracking edits as your workflow evolves. *** ## Test Mode You can toggle between **Editor** and **Test** mode at the top of the screen. <img src="https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/testWorkflow.png?fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=94cdcc2ce2b80b071f1b08fb0d1c3b0b" alt="Test Mode" data-og-width="1370" width="1370" data-og-height="746" height="746" data-path="docs/Images/Workflow/testWorkflow.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/testWorkflow.png?w=280&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=321412aaf4e02ed1cb4c0f7a5d8d6950 280w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/testWorkflow.png?w=560&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=f3b88e5330ed8e950b3de51d50174791 560w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/testWorkflow.png?w=840&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=3ae527e2ec1130bb7b67df99f1fde406 840w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/testWorkflow.png?w=1100&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=2d6c8ee1ca0c1efdbb391f10c53e8b8e 1100w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/testWorkflow.png?w=1650&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=d4169408eb4cc445b5b0565f5d11446e 1650w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/testWorkflow.png?w=2500&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=7a0be6b7c87f985f29dc89b6c76dba8e 2500w" /> * **Editor Mode** lets you build and edit the workflow. * **Test Mode** allows you to simulate how the workflow would run using mock data. In **Advanced workflows only**, you will see a **Test Code** panel on the left. This lets you run the flow with sample values and observe how the logic behaves. Click **Run flow** to test the execution path in real time. *** ### Input JSON Panel Whether you are in Editor or Test mode, you will have access to the **Input JSON** panel. <img src="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/inputJson.png?fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=d4904efbb6c21b0a59e85b5a260d8fa3" alt="Input JSON" data-og-width="992" width="992" data-og-height="723" height="723" data-path="docs/Images/Workflow/inputJson.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/inputJson.png?w=280&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=e9187bcdcda28655e377d299add3c071 280w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/inputJson.png?w=560&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=60386e86c0eceee5b848d677d53304ec 560w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/inputJson.png?w=840&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=8bc88f596024677115641181afa68432 840w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/inputJson.png?w=1100&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=13461f1d142b57704a36f73b095e8f1f 1100w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/inputJson.png?w=1650&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=e1dc6d91b875e690ef73e9b418a428c4 1650w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/inputJson.png?w=2500&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=468e37b38642930cf27c1c3a92a3fce7 2500w" /> The input JSON is divided into two keys: * `data`: Custom data used inside nodes or for conditions * `notify`: Recipient details mapped to various channels In **Advanced workflows**, this JSON is editable. You can update values in real time to simulate dynamic content or branching conditions during testing. Here is an example structure: ```json theme={null} { "data": { "name": "John", "event": "OTP" }, "notify": { "email": "user@example.com", "sms": "+911234567890" } } ``` # Channel Node Source: https://docs.trysiren.io/docs/Workflow/NodeConfiguration/ChannelNode The **Channel Node** lets you send a notification through a specific channel (such as Email, SMS, WhatsApp, etc.) using a configured provider. This is different from the Template Node — here, you manually select the provider and specify recipient details instead of using a predefined template. <img src="https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/providerConfiguration.png?fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=1736f9b2befa6922e6783a64f0f11b8c" alt="Provider Configuration" data-og-width="1707" width="1707" data-og-height="803" height="803" data-path="docs/Images/Workflow/providerConfiguration.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/providerConfiguration.png?w=280&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=5eefea32eb74e42c938b397d557ebf42 280w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/providerConfiguration.png?w=560&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=0149dedbcac105e2fb9ff8dce9833e4d 560w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/providerConfiguration.png?w=840&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=7171d89e4d1cb5fbf7a2fd9beab303ef 840w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/providerConfiguration.png?w=1100&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=5560c43977cecbb8db615c99f7bfb6ae 1100w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/providerConfiguration.png?w=1650&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=b27582273332158d793e8e64f7be0a47 1650w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/providerConfiguration.png?w=2500&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=4bbbfebca399122111b27ca3d1cff144 2500w" /> ### Basic Workflow Configuration In a Basic workflow, the configuration is straightforward: * **Provider**: Select from a dropdown list of available providers for the chosen channel. * **Wait for Delivery Status**: A checkbox to indicate whether the workflow should pause until a delivery status (e.g., delivered or failed) is returned. This setup works well when you want to quickly trigger a notification using a static provider and recipient details. ### Advanced Workflow Configuration In an Advanced workflow, this node offers more flexibility: * **Static Mode** (default view): * **Provider**: Same as in Basic — select a static provider from the dropdown. * **Recipient Field**: Enter the value for the recipient (e.g., Email address, phone number) or use a variable via JSON path (e.g., `${workflow.input.recipient.email}`). * **Wait for Delivery Status**: Same checkbox as in Basic. * **Dynamic Mode** (enabled via toggle switch): When toggled ON, the node supports fully dynamic provider routing: * **Provider Integration name or JSON Path**: Input field to define the integration either directly or via a JSON path (e.g., `${workflow.input.provider_name}`). * **Provider (dropdown)**: Still available as a fallback or default. * **Recipient Field or JSON Path**: Define where to fetch recipient info dynamically — e.g., `${workflow.input.notify.sms}`. * **Wait for Delivery Status**: Optional checkbox to enable delivery-based control logic. # Chat Node [Beta] Source: https://docs.trysiren.io/docs/Workflow/NodeConfiguration/ChatNode <Note>    This node is only available in Advanced Workflow </Note> Use the **Chat Node** to trigger chat-based interactions through providers like Slack, MS Teams, or Email. It is useful for automating conversations, collecting responses, or enabling interactive messaging flows as part of your workflow. <img src="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/Chat-node.png?fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=b6ea9ae039d0a7b3d3f8032f1893fa89" alt="Chat Node" data-og-width="1913" width="1913" data-og-height="915" height="915" data-path="docs/Images/Workflow/Chat-node.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/Chat-node.png?w=280&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=a53b88d1b2d563d757c4747db7825af3 280w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/Chat-node.png?w=560&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=513d45172d00c3fb6be8127169c8ebc4 560w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/Chat-node.png?w=840&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=85a3850e576f3c36ad477df3a554423c 840w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/Chat-node.png?w=1100&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=76c6d67ee3baac75827328b8e6918d08 1100w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/Chat-node.png?w=1650&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=3f0b7a20034c92eb127647ecd1542574 1650w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/Chat-node.png?w=2500&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=5102a2533a00feb63232749ed2bbe124 2500w" /> ### Configuration Options When you add a Chat Node, you will see the following fields in parameters: * **Chat Node ID**: A system-generated unique identifier for the node. This value is read-only and can be copied and saved for later use. * **Select Channel**: Choose the chat platform you want to track — e.g., Slack, MS Teams, Email. * **Select Provider**: From the dropdown, select a provider configured for the chosen channel. * **Dynamic Provider**: A toggle switch that allows you to use a provider dynamically at runtime. When enabled, the provider will be resolved using a variable or JSON path. * **Channel ID or JSON Path**: Enter the channel ID where the message should be sent. Alternatively, use a JSON path to dynamically fetch the channel ID from the input payload. * **Select Maximum Chat Duration**: Define the duration for how long the chat session should stay open. Specify the value in days, hours, and minutes. * **Provider Integration Name or JSON Path** *(only visible when Dynamic Provider is enabled)*: Input the provider integration name or a JSON path to dynamically resolve the provider during execution. > ### Example > > Let’s say you want to send a Slack message and keep the conversation active for 2 hours and 15 minutes by tracking the response and navigating the workflow based on the response. Here’s how you might configure the Chat Node: > > * **Chat Node ID**: Auto-generated > * **Select Channel**: `slack` > * **Select Provider**: `slack-primary` > * **Channel ID**: `#incident-response` > * **Select Maximum Chat Duration**: `0 Days`, `2 Hours`, `15 Minutes` > If you’re using a dynamic provider: > * **Dynamic Provider**: Enabled > * **Provider Integration Name or JSON Path**: \$`{workflow.input.data.provider_name}` > * **Channel ID or JSON Path**: \$`{workflow.data.channel_id}` > > ```json theme={null} > { > "provider_name": "slack", > "channelId": "ABCXX1234" > } > ``` # Control Nodes Source: https://docs.trysiren.io/docs/Workflow/NodeConfiguration/ControlNode Control nodes help your workflow make decisions and branch based on conditions or variable values. Siren currently supports two types of control nodes: * **If Node** — used for binary conditions (true/false paths) * **Switch Node** — used for multi-branch routing based on values *** ## If Node The **If Node** allows you to define one or more conditions, and split the workflow based on whether the condition(s) evaluate to **true** or **false**. <img src="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/ifNodeConfiguration.png?fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=334ab7b5a5b962a7d937256390b418dd" alt="If Node" data-og-width="1748" width="1748" data-og-height="821" height="821" data-path="docs/Images/Workflow/ifNodeConfiguration.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/ifNodeConfiguration.png?w=280&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=fe492cb821d0372a8607444e117b5008 280w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/ifNodeConfiguration.png?w=560&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=abe003fecbf5a6a41409b8ef7d8de5c3 560w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/ifNodeConfiguration.png?w=840&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=2f3b361477c97633b4d1e4c16209d7c5 840w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/ifNodeConfiguration.png?w=1100&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=d46362d36e3d50a0093602e6a5a4b644 1100w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/ifNodeConfiguration.png?w=1650&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=9541aadab26039bd65be417308db5cf4 1650w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/ifNodeConfiguration.png?w=2500&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=15ddda8e5987556e63cf30e9fe0ea961 2500w" /> ### Basic Workflow Configuration In a Basic workflow, you can configure only **one condition**. Each condition has the following fields: * **Value A** – This is the **input source**, typically a JSON path pointing to data pulled from your system, database, or even a prior node. * **Type** – The expected data type for comparison, such as `STRING`, `NUMBER`, or `BOOLEAN`. * **Comparison Operator** – How you want to compare the two values. Options include `EQUALS`, `NOT EQUALS`, `GREATER THAN`, etc. * **Value B** – The **reference value** you are comparing against. This is usually the value entered by the user or a static condition. If the condition evaluates to true, the workflow continues along the **true** path. Otherwise, it follows the **false** path. ### Advanced Workflow Configuration In an Advanced workflow, the If Node becomes more powerful. You can: * Add multiple conditions * Combine them using **AND** / **OR** logic * Use dynamic data from external APIs or workflow input using JSON paths > #### Example > > Imagine you need to send notification to a user whose ID is verified and check their country if India use one provider, if USA use another provider. So use the if node in advanced workflow for this. > > * A user submits their **country**, and if their ID is **verified or not verified**. > * Your backend fetches the corresponding details of the user from the database and passes it to Siren. > > You can configure the **If Node** like this: > > * **Value A**: `${workflow.input.data.country}` (value retrieved from your database) > * **Type**: `STRING` > * **Operator**: `EQUALS` > * **Value B**: `India` (the Country the user entered) > > This checks if the submitted country matches the required one. > > The other branch can look like this, where Value A fetches from the database whether the person's ID is verified or not. > > * **Value A**: `${workflow.input.data.verification}` > * **Type**: `STRING` > * **Operator**: `EQUALS` > * **Value B**: `verified` > > These conditions can then be combined using **AND** logic — so the workflow proceeds only if both checks pass. *** ## Switch Node The **Switch Node** is used to split the workflow into **multiple paths** based on the value of a variable, similar to a `switch-case` logic in programming. <img src="https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/switchConfiguration.png?fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=5e6b98829faf8188062bff538162fc5f" alt="Switch Node" data-og-width="1735" width="1735" data-og-height="887" height="887" data-path="docs/Images/Workflow/switchConfiguration.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/switchConfiguration.png?w=280&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=3f0a3bda4d64eccf8e9f28f112f3c9e7 280w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/switchConfiguration.png?w=560&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=08543e7b8abe65f70a8825ee35f8ddf4 560w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/switchConfiguration.png?w=840&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=bd82339cb6cec86f7cef47e33ffc1960 840w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/switchConfiguration.png?w=1100&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=ddcf793d6475c2d8a6e35b3640d9414a 1100w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/switchConfiguration.png?w=1650&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=15c1899a14108e961164eecfac0dc344 1650w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/switchConfiguration.png?w=2500&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=478daa86dad945388d6a7d4644926504 2500w" /> ### Basic Workflow Configuration In Basic mode, the switch has a **Name** field and allows defining up to **9 cases**, including a **default (fallback)** case. * Each case is a **static value**. * You can route each case to a different set of nodes. * The **default** route will be used if no match is found. ### Advanced Workflow Configuration In an Advanced workflow, you will see a **Switch Expression** field instead of a name. * Enter a **JSON variable path** (e.g., `${workflow.input.data.}`) to evaluate dynamically. * Add up to 9 cases to match the expression. * Just like in Basic mode, one fallback case is always present by default. > #### Example > > Suppose you want to notify users based on their preferred channel. > > * Use `${workflow.input.data.channel}` as your **Switch Expression** > * Add cases like `email`, `sms`, and `push` > * Connect each case to the respective channel’s template node > * Let the fallback case handle any unknown or missing channel values > > This allows you to streamline multi-channel workflows in a clean, organized way. *** # HTTP Node Source: https://docs.trysiren.io/docs/Workflow/NodeConfiguration/HTTPNode <Note> This node is only available in Advanced Workflow </Note> Use the **HTTP Node** to call an external API during your workflow — for example, to fetch user data, verify an action, or enrich notifications with information from another service. <img src="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/httpNodeConfiguration.png?fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=5e283444d6c7d85bace9332152b02b2b" alt="HTTP Node" data-og-width="1749" width="1749" data-og-height="830" height="830" data-path="docs/Images/Workflow/httpNodeConfiguration.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/httpNodeConfiguration.png?w=280&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=0ead61e7181469b3859826f7c0c1b12f 280w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/httpNodeConfiguration.png?w=560&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=811c968a2288a545e63f5d6ff5893b9d 560w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/httpNodeConfiguration.png?w=840&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=71527e5e90e98cbaa810d46cd8dd5efe 840w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/httpNodeConfiguration.png?w=1100&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=85820f6f2a4f76dd2c56e9f8115886f0 1100w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/httpNodeConfiguration.png?w=1650&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=9fd795c13fa9560a2bbc2e9bd9c65b73 1650w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/httpNodeConfiguration.png?w=2500&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=bf7e14e89049a6c3411b749da4cb7999 2500w" /> ### Configuration Options When you add an HTTP Node, you will see the following fields: * **Reference Name**: A label used to reference this API’s response in later parts of the workflow. * **Continue Workflow on API Failure**: If checked, the workflow continues even if the API call fails. Useful for optional or non-blocking requests. * **Method**: Choose the type of HTTP request from the following options: `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`, `HEAD`. * **URL**: Enter the **API endpoint link** you want to call. * **Body**: Required for methods like `POST`, `PUT`, or `PATCH`. You can insert variables using JSON path. * **Content Type**: Specifies the format of the request body: `application/json`, `text/plain`, `text/html`. * **Accept Type**: Defines what response format you expect: `application/json`, `text/plain`, `text/html`. * **Timeouts** * **Connection Timeout** – Time (in milliseconds) to wait for a connection to establish. * **Read Timeout** – Time (in milliseconds) to wait for the response after the connection is open. * **Headers**: Add custom headers to the request using key-value pairs. > ### Example > > Let’s say you want to check if a user passed a fraud check before sending them a transaction alert. > Here’s how you might configure the HTTP Node: > > * **Reference Name**: Reference name that is generated > * **Method**: `POST` > * **URL**: `https://api.example.com/verify` > * **Body**: > > ```json theme={null} > { > "userId": "${workflow.data.user_id}", > "phone": "${data.phone_number}" > } > ``` # Node Configuration Source: https://docs.trysiren.io/docs/Workflow/NodeConfiguration/NodeConfiguration Learn how to configure different types of nodes in Siren's visual workflow builder. Earlier, we covered how to create a workflow and got familiar with the Workflow Editor. Now, let's take a closer look at how each **node** works. Inside the editor, you build your workflow by connecting nodes — each representing a specific action, condition, or message step. To add a node, click the `+` icon below an existing one. Then click the node to open its configuration panel. Each node allows you to define how that step behaves. You can: * Set static values or attach message templates * Add conditions, delays, or branching logic * In **Advanced workflows**, configure nodes dynamically using **variables** with JSON paths The sections below cover each node type in detail and explain the options available for configuration. *** <CardGroup cols={3}> <Card title="Template Node" icon="file-code" href="/docs/Workflow/NodeConfiguration/TemplateNode"> Send messages using predefined templates. </Card> <Card title="Channel Node" icon="rss" href="/docs/Workflow/NodeConfiguration/ChannelNode"> Deliver direct notifications via specific channels. </Card> <Card title="Chat Node [Beta]" icon="message" href="/docs/Workflow/NodeConfiguration/ChatNode"> Interact and wait for recipient responses. </Card> <Card title="Wait Node" icon="hourglass" iconType="regular" href="/docs/Workflow/NodeConfiguration/WaitNode"> Pause workflows for specified durations. </Card> <Card title="Control Nodes" icon="network-wired" href="/docs/Workflow/NodeConfiguration/ControlNode"> Direct workflow paths based on conditions. </Card> <Card title="HTTP Node" icon="globe" href="/docs/Workflow/NodeConfiguration/HTTPNode"> Integrate with external APIs. </Card> </CardGroup> *** Once your workflow is designed to match your use case, just click **Publish** to push it live. From there, it’s ready to go; the moment the right trigger fires, your workflow jumps into action! Up next, let’s explore how to test your workflow and understand how triggers work behind the scenes. # Template Node Source: https://docs.trysiren.io/docs/Workflow/NodeConfiguration/TemplateNode The **Template Node** is used to send messages using predefined templates across supported channels such as Email, SMS, Push, WhatsApp, and more. To learn how to create, edit, and manage templates, visit the [Templates](/docs/Templates/TemplatesOverview) section. <img src="https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/templateConfiguration.png?fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=356afd48c505e3754f70742a5351568d" alt="Template Node" data-og-width="1749" width="1749" data-og-height="814" height="814" data-path="docs/Images/Workflow/templateConfiguration.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/templateConfiguration.png?w=280&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=a129aa4ba071946ad92cb208b803e0ff 280w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/templateConfiguration.png?w=560&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=1ab9f2dd59bea01f28d3aaca948ba33e 560w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/templateConfiguration.png?w=840&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=afee1b53c8738b76d3b5bb7edd508a06 840w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/templateConfiguration.png?w=1100&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=9d88f5937f143b510101cd295daffe68 1100w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/templateConfiguration.png?w=1650&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=59bea5f13b9a466dd6a58b4f80a506c0 1650w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/templateConfiguration.png?w=2500&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=997daa6d2078c449382da8cd4fe6bee8 2500w" /> ### Basic Workflow Configuration In a Basic workflow: * The **Parameter** section includes a **Template dropdown**. * All available templates are listed. * Templates that share the **same tag** as the workflow will appear **at the top** of the list for quicker access. You simply select the desired template, and the message will be sent using that configuration. *** ### Advanced Workflow Configuration In an Advanced workflow, the Template Node offers more flexibility: * A **radio button** lets you choose between: * **Static**: Works the same way as Basic — choose a template from the dropdown list. * **Dynamic**: Use variables to dynamically select the template and its version during runtime. Under **Dynamic**, you’ll see the following fields: * **Template Variable**: Input field where you provide the JSON path to fetch the template name at runtime (e.g., `${workflow.input.data.template_name}`). * **Template Version**: Optional field to specify a particular version of the template if needed. * **Variable Object Path**: Defines the path to the variables object (e.g., `{{data.vars}}`) that will be substituted into the template during execution. This makes it possible to personalize which template gets triggered — and what values are passed — based on real-time inputs. # Wait Node Source: https://docs.trysiren.io/docs/Workflow/NodeConfiguration/WaitNode The **Wait Node** lets you pause the workflow before proceeding to the next step. This is useful when you want to introduce a delay or wait until a specific date and time before sending a message or continuing the flow. When you click on the Wait Node, a configuration panel appears with a **Parameters** tab. Here, you can choose how the wait should be defined: <img src="https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/waitNodeConfiguration.png?fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=4a40185eb4c3bdc4cc437a9bda9f7ce2" alt="Wait Node" data-og-width="1737" width="1737" data-og-height="811" height="811" data-path="docs/Images/Workflow/waitNodeConfiguration.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/waitNodeConfiguration.png?w=280&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=7bb0e66e2f1e7e0ae79731643bca268e 280w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/waitNodeConfiguration.png?w=560&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=ee7b031b7ad2c6af62e1167a2d702bc1 560w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/waitNodeConfiguration.png?w=840&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=5819a7f9f0d517818a5b56a1f5d79c3c 840w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/waitNodeConfiguration.png?w=1100&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=ad23b6cfe8348ae8a9b19955365de522 1100w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/waitNodeConfiguration.png?w=1650&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=f2ef2ad3f33cc87b410de248400c2dac 1650w, https://mintcdn.com/siren/zWVAWNh-nsh09O5D/docs/Images/Workflow/waitNodeConfiguration.png?w=2500&fit=max&auto=format&n=zWVAWNh-nsh09O5D&q=85&s=abe0fa10c4728d0b648b773a5424de9c 2500w" /> ### Configuration Options * **Duration:** Set a fixed delay using: * **Days** * **Hours** * **Minutes** * **Seconds** This option is ideal for introducing consistent gaps between workflow steps. * **Until:** Define a specific **date and time** when the workflow should resume. * Select a **Time Zone** to align the timing with the recipient’s or system’s locale. ### Advanced Workflow Configuration In **Advanced workflows**, an extra field appears below the static options: * **Wait Variable**: A field to enter a dynamic wait value using a JSON path. * Example: `${workflow.input.data.time}` This allows the wait duration to be determined at runtime, based on input data. <Note> If you use a **Wait Variable**, it will override whatever you set in Duration or Until. Just make sure the variable returns a valid time value like a number in seconds or a proper date/time. so the workflow knows how long to wait. </Note> # Test & Trigger Source: https://docs.trysiren.io/docs/Workflow/TestTrigger Learn how to test and trigger workflows in Siren # Testing Workflow In **Advanced workflows**, Siren provides a powerful **Test Mode** inside the Workflow Editor to simulate how your flow will execute in real-time. To enter test mode: * In the top navigation bar of the Workflow Editor, toggle from **Editor** to **Test**. * You’ll now see an **Input JSON** panel on the left side of the screen. This allows you to modify and test with different input values. > The test payload consists of two keys: > > * `data`: Custom values used inside the workflow, such as names, flags, or attributes used in conditions or variable substitution. > * `notify`: Recipient details like email, phone number, or push token. > Example: ```json theme={null} { "data": { "event": "OTP", "user_type": "premium" }, "notify": { "email": "jane@example.com", "sms": "+911234567890" } } ``` * Edit the values as needed and click **Run Flow**. * The visual editor will show how the flow executes, which branches are followed, and whether any nodes fail. *** # Triggering Workflow Once your workflow is tested and ready, click **Publish** in editor. Published workflows can now be triggered externally via API. Siren supports two types of runtime triggers: ### Single Trigger Use this when targetting a single recipient. * Endpoint: `POST https://api.trysiren.io/api/v2/workflows/trigger` * The `notify` field is an object * The `data` field is shared context used throughout the workflow #### Sample Request ```bash theme={null} curl -X POST https://api.trysiren.io/api/v2/workflows/trigger \ -H "Content-Type: application/json" \ -H "Authorization: Bearer <YOUR_API_TOKEN>" \ -d '{ "workflowName": "otp", "data": { "subject": "otp verification" }, "notify": { "notificationType": "email", "recipient": "example@example.com" } }' ``` ### Bulk Trigger When sending notifications to **multiple recipients**, use the bulk trigger. The `notify` field becomes an **array**, each item representing a unique recipient. This is useful when sending messages like alerts, reminders, or promotions to a list of users in one API call. #### Example ```json theme={null} { "workflowName": "otp", "data": { "subject": "otp verification" }, "notify": [ { "notificationType": "email", "recipient": "example@example.com" }, { "notificationType": "sms", "recipient": "+1234567890" } ] } ``` Go to \[API reference]\(/docs/API-Reference/API References) to see more details about the API Configurations. *** ## Scheduling Workflow Triggers Siren allows you to schedule workflows to run automatically at specific intervals without manual triggers. This is useful for recurring tasks like sending daily reports, reminders, or maintenance notifications. You can access the **Schedules** section from the left navigation panel under **Workflows > Schedules**. ## Schedule List View Once inside, you will see: * A list of all previously scheduled workflows * A **Search** bar to quickly find a schedule by name * Filters to refine the list * An **Add Schedule** button to create a new schedule ## Creating a New Schedule Clicking on **Add Schedule** will prompt you to enter a **Schedule Name**. Once added, you are redirected to the schedule configuration screen. <img src="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/WorkflowSchedule.png?fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=d8335040a804a333d0a1556bcbc6fe04" alt="Schedule Configuration" data-og-width="1024" width="1024" data-og-height="483" height="483" data-path="docs/Images/Workflow/WorkflowSchedule.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/WorkflowSchedule.png?w=280&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=996077538f2e233999e99f73b43ff6b8 280w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/WorkflowSchedule.png?w=560&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=7399a06964827b978d0180dc32e7f4f6 560w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/WorkflowSchedule.png?w=840&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=cd7a8340200f1b4b511c79108d4bfdf3 840w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/WorkflowSchedule.png?w=1100&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=779cfb80732f292733c421315de96597 1100w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/WorkflowSchedule.png?w=1650&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=bbba557867e4b4160c11552a9e1d01df 1650w, https://mintcdn.com/siren/OGWbJyCrDoY8SVWL/docs/Images/Workflow/WorkflowSchedule.png?w=2500&fit=max&auto=format&n=OGWbJyCrDoY8SVWL&q=85&s=9265b3cc2d528495f964f3d5a4c75033 2500w" /> ### Schedule Configuration Options On the schedule creation screen, you’ll find the following input fields: * **Workflow**: Select the workflow you want to schedule. * **Time Zone**: Choose the time zone in which the schedule should run. * **Starts**: Pick a date for the schedule to begin (`YYYY-MM-DD`). * **Runs**: Choose how often the workflow should run: * **Once** – Specify a time (`HH:mm` format). * **Daily** – Select a time, and optionally an end date. * **Weekly** – Pick specific weekdays and a time. * **Monthly** – Choose: * First day of the month * Last day of the month * Custom day of the month * **Ends**: (only for recurring schedules) * **Never** – The schedule runs indefinitely. * **On** – Specify a date to stop the schedule. ### JSON Body Users have the option to input a **JSON body** for the workflow trigger. This JSON allows you to: * Pass dynamic values to the workflow * Provide user-specific data under the `data` object * Specify recipient details under the `notify` object Example: ```json theme={null} { "data": { "name": "Ravi", "action": "login" }, "notify": { "email": "ravi@example.com", "sms": "+911234567890" } } ``` ## Managing the Schedules Once you have configured everything and click **Update**, the Schedule will be active After scheduling: * A Pause Schedule button will appear in the bottom right. * You can use this to temporarily pause the scheduled workflow without deleting it. * To restart it, click Resume, and the schedule will continue from its configured timing. * You can view all existing schedules and their current status in the **Schedule List**. To modify a schedule, simply click the Edit button next to it in the list. <Note> No actions can be performed for completed schedules. </Note> # Workflows Source: https://docs.trysiren.io/docs/Workflow/WorkflowOverview Automate notification flows using Siren’s visual workflow builder. ## Workflows in Siren Workflows in **Siren** let you design powerful, no-code automation for how notifications are triggered, routed, personalized, and delivered across multiple channels. They provide a flexible and visual way to build message flows that adapt to your logic and data, without requiring any engineering effort. Inside the workflow editor, you can define a series of actions and decisions by adding nodes using a guided, point-and-click interface. Each node can be individually configured to control how and when notifications are sent, what data they use, and how the workflow behaves based on dynamic inputs. Once your workflow is ready, you can **publish** it to make it live. Published workflows can then be triggered in multiple ways: * **Via API**, by making a call to Siren’s `/trigger-workflow` endpoint — typically from your application backend or any system event you define. * **Via the AI Agent Toolkit**, which can learn from documentation and intelligently trigger the appropriate workflow based on context. * **Via MCP**, by calling the `trigger.workflow` function * **Via SDK**, by calling the corresponding function API-triggered workflows are generally called when an event happens in your product, such as a user action or system update. The API payload includes details like the workflow name, recipient information, and any dynamic variables needed for personalization. Whether sending a simple alert or orchestrating a multi-step notification journey, workflows in Siren give you the tools to automate and scale your communication strategy with complete control and visibility. *** ## Types of Workflows When creating a new workflow in Siren, you choose between **Basic** and **Advanced** workflows. Both types leverage the same intuitive visual editor and provide the core features for building end-to-end notification logic. However, **Advanced workflows** unlock additional capabilities and offer greater flexibility for complex scenarios. ### Basic Workflow: Streamlined Automation **Basic workflows** are perfect for straightforward automation flows. they are designed for simplicity and efficiency when your logic is predictable and does not require dynamic interaction with external systems. Basic workflows support: * **Wait Node**: Introduce delays between steps using a fixed duration (in days, hours, minutes, seconds). * **Control Nodes**: * **If Node**: Branch your flow based on a simple true/false condition. * **Switch Node**: Route the workflow to multiple paths based on a predefined value. * **Template Node**: Use a predefined template to send notifications. * **Channel Node**: Directly send messages via a selected provider and channel. Choose a Basic workflow when your automation needs are clear-cut and do not involve real-time external data or highly dynamic configurations. *** ### Advanced Workflow: Dynamic & Extensible Automation **Advanced workflows** provide all the features of Basic workflows, plus powerful additions for more complex, dynamic, and data-driven use cases. They allow your automation to react to external systems and adapt to rich data inputs. Advanced workflows include: * **HTTP Node**: Make **API calls to external services**. You can use the response data to shape subsequent workflow logic, enabling seamless integration with your existing infrastructure. * **Chat Node**: Facilitate human interaction by **pausing the workflow to await a recipient's response**. Define actions based on their reply or a timeout if no response is received. * **Dynamic Variables across all Nodes**:\ Advanced workflows allow you to configure node parameters dynamically using JSON paths. This means nodes can adapt in real time based on the incoming payload or outputs from earlier steps. * A **Wait Node** can set its duration using a variable from the input. * A **Template Node** can dynamically select which template to use, along with the version at runtime based on workflow data (e.g., `${workflow.input.data.template_name}`). * A **Channel Node** can dynamically determine the provider and recipient values using runtime inputs (e.g., `${workflow.input.notify.sms}` or `${workflow.input.data.provider_name}`). Opt for an Advanced workflow when you are working with rich data inputs, need personalized flows, or require robust coordination and data exchange with external systems. Now that you understand what workflows are, let’s explore how to [create and design one using the Workflow Editor](./CreatingWorkflow).