Skip to main content

Single Send

A Single Send is a campaign sent to one specific contact. It lets your systems send individual messages, such as WhatsApp API Official template messages, to one recipient through the Talqui API. However, in Talqui, we do not refer to these messages by channel-specific terms like “template messages.” Instead, Talqui adopts a unified, omni-channel approach where all message dispatches, regardless of the channel—whether WhatsApp, Instagram, Telegram, or others—are called campaign dispatches. This terminology ensures that the system remains flexible and agnostic to the specific communication channel, making it suitable for any integrated messaging service.

How It Works

A Single Send is a regular campaign whose audience is a single contact. You create the campaign with its Campaign Model (the approved message content), then schedule it for that contact. Talqui creates one campaign dispatch for the contact and sends it right away or at the time you chose, with the same tracking and logging as a bulk campaign. Through this mechanism, the system offers flexibility for automated processes and ensures that content consistency, controlled delivery, and results tracking are always maintained. Whether used for immediate one-on-one interactions or integrated into larger, automated workflows, a Single Send is a powerful tool within Talqui’s omni-channel messaging system.

Step-by-Step Guide for Creating a Campaign Dispatch:

This step by step guide shows how an external app sends a campaign to one specific contact through the Services API. For a bulk send ( regular campaign experience ), use the interface or the same endpoints with a larger audience.
Every request below must be authenticated. For an integration, use an API credential access token; an operator token works too. If you don’t know how authentication works, click here.
The legacy endpoints https://api.talqui.chat/tenants/:tenantID/campaigns (including POST .../campaigns/:campaignID/dispatches, which added one contact to an existing campaign) do not accept API credentials. Use the Services API endpoints below. The Services API has no endpoint to add a contact to a campaign that was already scheduled: each Single Send is a new campaign.

Step 1: Finding the Campaign Model

List the workspace’s campaign models and pick the approved one you want to send ( or follow this guide to create one ). Keep three of its fields for the next steps:
  • campaignModelID: the model to send.
  • campaignModelChannelID: the connection (for example, the WhatsApp number) the model belongs to.
  • The keys of its variables (for example, name for a body with {{ name }}).

Step 2: Finding the Contact

Look up the contact by its channel and external identifier, such as its WhatsApp number, and keep its contactID:
The contact must already exist in Talqui and be associated with the campaign channel. The Services API does not create contacts while scheduling a campaign: bring new contacts in with a contact import first.

Step 3: Creating the Campaign

Create the campaign with the model and the connection that sends it. campaignChannel is the channel of that connection (urn:talqui:whatsapp-cloud:0, urn:talqui:whatsapp-gup:0 or urn:talqui:whatsapp-zapi:0). The campaign is created in draft status; keep the campaign.campaignID of the answer.

Step 4: Scheduling the Campaign for the Contact

Schedule the campaign with the contact as its only recipient. variableConfigs gives a value to each variable of the model: a fixed value ("mode": "fixed") or a field of the contact ("mode": "contact", such as contactFirstname). Omit dispatchAt (or send null) to send now, or pass a future ISO 8601 date with its offset, such as 2026-12-01T09:00:00-03:00.
The answer comes right away, with campaignStatus processing (or scheduled for a future dispatchAt) and campaignPreparationStatus preparing: the Campaign Dispatch is written in the background. A contact missing a required variable is recorded as a failed dispatch.

Retrieving Campaign Dispatch Details

Read the campaign with GET /v1/tenants/<TENANT_ID>/campaigns/<CAMPAIGN_ID> until campaignPreparationStatus is prepared (or failed, with campaignPreparationError), and follow the delivery with GET /v1/tenants/<TENANT_ID>/campaigns/<CAMPAIGN_ID>/progress. A scheduled or processing campaign can be stopped with POST /v1/tenants/<TENANT_ID>/campaigns/<CAMPAIGN_ID>/cancel.