Aller au contenu

Variables des messages

Utilisez des variables pour personnaliser les messages en cascade avec du contenu dynamique comme des noms, des URL et des valeurs personnalisées.

Aperçu

Les variables permettent :

  • Personnalisation : insérez les noms des destinataires et les numéros de compte
  • URL dynamiques : incluez des liens uniques pour chaque destinataire
  • ** Raccourcissement d'URL ** : raccourcissez automatiquement les URL longues
  • Réutilisabilité des modèles : un modèle, de nombreux messages personnalisés

Types de variables

Tapez Syntaxe Objectif Exemple
nom %name=id% Variables de texte Noms, codes, montants
url %url=identifiant% URL complètes Liens, URL de suivi
URL_courte %short_url=id% URL raccourcies Liens compacts

Syntaxe des variables

Les variables utilisent le format : %type=id%

  • type : Type de variable (name, url, short_url)
  • id : Identifiant unique (entier)

Exemples

Hello %name=1%, your code is %name=2%
Visit our website: %url=1%
Quick link: %short_url=1%

Utilisation de variables

Étape 1 : Télécharger les valeurs des variables

Avant d'envoyer des messages, téléchargez les valeurs des variables dans l'API :

Point de terminaison :

POST https://restapi.smsbat.com/api/items

Demande :

{
  "variables": [
    {
      "id": 1,
      "type": "name",
      "value": "John"
    },
    {
      "id": 2,
      "type": "name",
      "value": "12345"
    },
    {
      "id": 3,
      "type": "url",
      "value": "https://example.com/products"
    },
    {
      "id": 4,
      "type": "short_url",
      "value": "https://example.com/very-long-url-that-needs-shortening"
    }
  ]
}

Étape 2 : Envoyer un message avec des variables

Utilisez les ID de variable téléchargés dans votre message :

{
  "id": "msg-001",
  "fromName": "YourStore",
  "toPhone": "+380XXXXXXXXX",
  "messageType": "transaction",
  "text": "Hello %name=1%! Your verification code is %name=2%. Visit: %short_url=4%"
}

Résultat :

Hello John! Your verification code is 12345. Visit: https://sho.rt/abc123

Exemple complet

Variables de téléchargement

curl -X POST https://restapi.smsbat.com/api/items \
  -H "Content-Type: application/json" \
  -H "X-Authorization-Key: your-api-key" \
  -d '{
    "variables": [
      {
        "id": 1,
        "type": "name",
        "value": "Sarah"
      },
      {
        "id": 2,
        "type": "name",
        "value": "ORD-789"
      },
      {
        "id": 3,
        "type": "url",
        "value": "https://example.com/track/ORD-789"
      }
    ]
  }'

Envoyer un message

curl -X POST https://restapi.smsbat.com/api/CascadeMessage/send_message/async \
  -H "Content-Type: application/json" \
  -H "X-Authorization-Key: your-api-key" \
  -d '[
    {
      "id": "order-notification",
      "fromName": "YourStore",
      "toPhone": "+380XXXXXXXXX",
      "messageType": "transaction",
      "text": "Hi %name=1%! Order %name=2% shipped. Track: %url=3%"
    }
  ]'

Message délivré :

Hi Sarah! Order ORD-789 shipped. Track: https://example.com/track/ORD-789

Cas d'utilisation

Confirmation de commande

// Variables
{
  "variables": [
    {"id": 1, "type": "name", "value": "John"},
    {"id": 2, "type": "name", "value": "12345"},
    {"id": 3, "type": "name", "value": "$99.99"},
    {"id": 4, "type": "url", "value": "https://store.com/order/12345"}
  ]
}

// Message
{
  "text": "Hi %name=1%! Order #%name=2% for %name=3% confirmed. Details: %url=4%"
}

// Result
"Hi John! Order #12345 for $99.99 confirmed. Details: https://store.com/order/12345"

Réinitialisation du mot de passe

// Variables
{
  "variables": [
    {"id": 1, "type": "name", "value": "Mike"},
    {"id": 2, "type": "short_url", "value": "https://app.example.com/reset?token=abc123def456"}
  ]
}

// Message
{
  "text": "Hi %name=1%, reset your password: %short_url=2% (valid 30 min)"
}

// Result
"Hi Mike, reset your password: https://sho.rt/xyz789 (valid 30 min)"

Campagne promotionnelle

// Variables
{
  "variables": [
    {"id": 1, "type": "name", "value": "VIP20"},
    {"id": 2, "type": "short_url", "value": "https://store.com/sale?utm_source=sms&utm_campaign=summer"}
  ]
}

// Message
{
  "text": "Summer Sale! Use code %name=1% for 20% off: %short_url=2%"
}

// Result
"Summer Sale! Use code VIP20 for 20% off: https://sho.rt/abc"

Vérification du compte

// Variables
{
  "variables": [
    {"id": 1, "type": "name", "value": "789456"},
    {"id": 2, "type": "name", "value": "10"}
  ]
}

// Message
{
  "text": "Your verification code: %name=1%. Valid for %name=2% minutes."
}

// Result
"Your verification code: 789456. Valid for 10 minutes."

Exemples de mise en œuvre

Python

import requests

class CascadeVariables:
    def __init__(self, api_key):
        self.base_url = 'https://restapi.smsbat.com'
        self.headers = {
            'Content-Type': 'application/json',
            'X-Authorization-Key': api_key
        }

    def upload_variables(self, variables):
        """Upload variable values"""
        response = requests.post(
            f'{self.base_url}/api/items',
            headers=self.headers,
            json={'variables': variables}
        )
        response.raise_for_status()
        return response.json()

    def send_with_variables(self, tracking_id, from_name, to_phone,
                           message_type, text, variables):
        """Upload variables and send message"""
        # Upload variables first
        self.upload_variables(variables)

        # Send message
        message = {
            'id': tracking_id,
            'fromName': from_name,
            'toPhone': to_phone,
            'messageType': message_type,
            'text': text
        }

        response = requests.post(
            f'{self.base_url}/api/CascadeMessage/send_message/async',
            headers=self.headers,
            json=[message]
        )

        response.raise_for_status()
        return response.json()[0]

# Usage
cascade = CascadeVariables('your-api-key')

# Define variables
variables = [
    {'id': 1, 'type': 'name', 'value': 'John'},
    {'id': 2, 'type': 'name', 'value': 'ORD-12345'},
    {'id': 3, 'type': 'url', 'value': 'https://example.com/track/ORD-12345'}
]

# Send message with variables
result = cascade.send_with_variables(
    tracking_id='order-notification',
    from_name='YourStore',
    to_phone='+380XXXXXXXXX',
    message_type='transaction',
    text='Hi %name=1%! Order %name=2% shipped. Track: %url=3%',
    variables=variables
)

print(f"Message sent: {result['messageId']}")

JavaScript (Node.js)

const axios = require('axios');

class CascadeVariables {
  constructor(apiKey) {
    this.baseUrl = 'https://restapi.smsbat.com';
    this.headers = {
      'Content-Type': 'application/json',
      'X-Authorization-Key': apiKey
    };
  }

  async uploadVariables(variables) {
    const response = await axios.post(
      `${this.baseUrl}/api/items`,
      { variables },
      { headers: this.headers }
    );

    return response.data;
  }

  async sendWithVariables({ id, fromName, toPhone, messageType, text, variables }) {
    // Upload variables first
    await this.uploadVariables(variables);

    // Send message
    const response = await axios.post(
      `${this.baseUrl}/api/CascadeMessage/send_message/async`,
      [{
        id,
        fromName,
        toPhone,
        messageType,
        text
      }],
      { headers: this.headers }
    );

    return response.data[0];
  }
}

// Usage
const cascade = new CascadeVariables('your-api-key');

const result = await cascade.sendWithVariables({
  id: 'order-notification',
  fromName: 'YourStore',
  toPhone: '+380XXXXXXXXX',
  messageType: 'transaction',
  text: 'Hi %name=1%! Order %name=2% shipped. Track: %url=3%',
  variables: [
    { id: 1, type: 'name', value: 'John' },
    { id: 2, type: 'name', value: 'ORD-12345' },
    { id: 3, type: 'url', value: 'https://example.com/track/ORD-12345' }
  ]
});

console.log('Message sent:', result.messageId);

PHP

<?php

class CascadeVariables {
    private $baseUrl = 'https://restapi.smsbat.com';
    private $apiKey;

    public function __construct($apiKey) {
        $this->apiKey = $apiKey;
    }

    public function uploadVariables($variables) {
        $ch = curl_init($this->baseUrl . '/api/items');

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json',
            'X-Authorization-Key: ' . $this->apiKey
        ]);
        curl_setopt($ch, CURLOPT_POSTFIELDS,
                   json_encode(['variables' => $variables]));

        $response = curl_exec($ch);
        curl_close($ch);

        return json_decode($response, true);
    }

    public function sendWithVariables($id, $fromName, $toPhone,
                                     $messageType, $text, $variables) {
        // Upload variables
        $this->uploadVariables($variables);

        // Send message
        $message = [
            'id' => $id,
            'fromName' => $fromName,
            'toPhone' => $toPhone,
            'messageType' => $messageType,
            'text' => $text
        ];

        $ch = curl_init(
            $this->baseUrl . '/api/CascadeMessage/send_message/async'
        );

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json',
            'X-Authorization-Key: ' . $this->apiKey
        ]);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([$message]));

        $response = curl_exec($ch);
        curl_close($ch);

        $result = json_decode($response, true);
        return $result[0];
    }
}

// Usage
$cascade = new CascadeVariables('your-api-key');

$variables = [
    ['id' => 1, 'type' => 'name', 'value' => 'John'],
    ['id' => 2, 'type' => 'name', 'value' => 'ORD-12345'],
    ['id' => 3, 'type' => 'url', 'value' => 'https://example.com/track/ORD-12345']
];

$result = $cascade->sendWithVariables(
    'order-notification',
    'YourStore',
    '+380XXXXXXXXX',
    'transaction',
    'Hi %name=1%! Order %name=2% shipped. Track: %url=3%',
    $variables
);

echo "Message sent: " . $result['messageId'] . "\n";

meilleures pratiques

ID de variables

  • ✅ Utilisez des identifiants séquentiels (1, 2, 3, ...)
  • ✅ Réutilisez les identifiants pour les messages groupés avec les mêmes variables
  • ✅ Mappage d'ID de variable de document
  • ❌ N'utilisez pas d'identifiants aléatoires
  • ❌ Ne sautez pas les numéros d'identification

Valeurs des variables

  • ✅ Validez les valeurs avant de télécharger
  • ✅ Gérez correctement les caractères spéciaux
  • ✅ Test avec les cas Edge
  • ❌ Ne pas inclure de HTML dans les variables de nom
  • ❌ Ne dépassez pas les limites de longueur raisonnables

Variables d'URL

  • ✅ Utilisez short_url pour les URL longues
  • ✅ Inclure les paramètres de suivi
  • ✅ Utilisez HTTPS
  • ❌ N'utilisez pas d'URL suspectes
  • ❌ N'incluez pas de données sensibles dans les URL

Performances

  • Téléchargez les variables une fois, envoyez plusieurs messages
  • Téléchargements de variables par lots
  • Cacher les variables couramment utilisées
  • Nettoyer périodiquement les anciennes variables

Modèles avancés

Personnalisation groupée

async function sendBulkPersonalized(recipients) {
  const messages = [];
  const variables = [];
  let varId = 1;

  recipients.forEach((recipient, index) => {
    // Variables for this recipient
    const nameVarId = varId++;
    const orderVarId = varId++;
    const urlVarId = varId++;

    variables.push(
      { id: nameVarId, type: 'name', value: recipient.name },
      { id: orderVarId, type: 'name', value: recipient.orderId },
      { id: urlVarId, type: 'url', value: recipient.trackingUrl }
    );

    messages.push({
      id: `order-${recipient.orderId}`,
      fromName: 'YourStore',
      toPhone: recipient.phone,
      messageType: 'transaction',
      text: `Hi %name=${nameVarId}%! Order %name=${orderVarId}% shipped. Track: %url=${urlVarId}%`
    });
  });

  // Upload all variables
  await uploadVariables(variables);

  // Send all messages
  return await sendBulk(messages);
}

Système de modèles

class MessageTemplate {
  constructor(template) {
    this.template = template;
    this.varIdCounter = 1;
  }

  create(data) {
    const variables = [];
    let text = this.template;

    // Replace placeholders with variable syntax
    Object.entries(data).forEach(([key, value]) => {
      const varId = this.varIdCounter++;
      variables.push({
        id: varId,
        type: this.getVarType(value),
        value: value
      });

      text = text.replace(`{{${key}}}`, `%${this.getVarType(value)}=${varId}%`);
    });

    return { text, variables };
  }

  getVarType(value) {
    if (value.startsWith('http')) return 'url';
    return 'name';
  }
}

// Usage
const template = new MessageTemplate(
  'Hi {{name}}! Order {{orderId}} shipped. Track: {{trackUrl}}'
);

const { text, variables } = template.create({
  name: 'John',
  orderId: 'ORD-123',
  trackUrl: 'https://example.com/track/ORD-123'
});

await sendWithVariables({ text, variables });

Dépannage

Variables non remplacées

  • Vérifiez que les variables ont été téléchargées avant l'envoi
  • Vérifiez les correspondances d'ID de variable dans le texte et téléchargez
  • Assurez-vous que la syntaxe est correcte : %type=id%
  • Valider le type de variable correspond à la valeur

Échec du raccourcissement d'URL

  • Vérifier que l'URL est valide et accessible
  • Vérifiez que l'URL commence par http:// ou https://
  • Assurez-vous que l'URL n'est pas déjà raccourcie
  • Essayez d'utiliser url au lieu de short_url

Limite de variable dépassée

  • Contacter le support pour les limites variables
  • Réutiliser les ID de variables lorsque cela est possible
  • Nettoyer les anciennes variables
  • Optimiser l'utilisation des variables

Prochaines étapes