Help Center / Tutorials

Send messages from a CSV file using Java

Introduction

In this tutorial, you'll learn how to send messages to phone numbers stored in a CSV file using Java, the Unirest library, and the Utio API. We will read the phone numbers and messages from the CSV file, and then send them using the Utio API.

This article is just a small taste of all the API features. Explore dozens of use cases and ready-to-use code examples here.

Prerequisites

Create a new Maven project

Create a new Maven project using your preferred IDE or via command line.

Add required dependencies

Add the following dependencies to your pom.xml file:

<dependencies>
    <dependency>
        <groupId>com.konghq</groupId>
        <artifactId>unirest-java</artifactId>
        <version>3.11.00</version>
    </dependency>
    <dependency>
        <groupId>com.opencsv</groupId>
        <artifactId>opencsv</artifactId>
        <version>5.2</version>
    </dependency>
</dependencies>

Create the CSV file

Create a new file named numbers.csv in your project directory with two columns:

  1. First column: phone number in E164 format with the country prefix.
  2. Second column: text message to send to the target phone number.

The spreadsheet document should look like this:

Phone number Message body
+1234567890 👋 Welcome to {{your-business-name}}! Thanks for signing up. We are just a message away!
+1234567890 💐 Your order has been shipped. Tracking number is {{tracking-number}}. Don't hesitate to reach out to if you need help! 🤗

The equivalent spreadsheet document exported as CSV should look like this:

+1234567890,"👋 Welcome to {{your-business-name}}! Thanks for signing up. We are just a message away!"
+1234567890,"💐 Your order has been shipped. Tracking number is {{tracking-number}}. Don't hesitate to reach out to if you need help! 🤗"

Create a file with the code

Create a new file named SendMessage.java in your project directory and add the following code:

import com.opencsv.CSVReader;
import kong.unirest.HttpResponse;
import kong.unirest.JsonNode;
import kong.unirest.Unirest;

import java.io.FileReader;
import java.io.IOException;
import java.util.List;

public class SendMessage {

    private static final String CSV_FILE = "numbers.csv";

    // Replace this with your Utio API token
    private static final String API_TOKEN = "ENTER API KEY HERE";

    // Optionally specify the target WhatsApp device ID connected to Utio
    // you want to use for messages delivery (24 characters hexadecimal value)
    private static final String DEVICE = "DEVICE ID GOES HERE";

    // API URL endpoint
    private static final String URL = "https://whatsapp-api.utio.io/v1/messages";

    public static void main(String[] args) {
        try (CSVReader csvReader = new CSVReader(new FileReader(CSV_FILE))) {
            List<String[]> records = csvReader.readAll();

            for (String[] record : records) {
                String phone = record[0];
                String message = record[1];
                sendMessage(phone, message);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void sendMessage(String phone, String message) {
        HttpResponse<JsonNode> response = Unirest.post(URL)
                .header("Content-Type", "application/json")
                .header("Authorization", API_TOKEN)
                .field("phone", phone)
                .field("message", message)
                .asJson();

        if (response.isSuccess()) {
            System.out.println("=> Message created: " + phone);
        } else {
            System.out.println("Failed to create message to " + phone + ": " + response.getStatusText());
        }
    }
}
Play and run code in the cloud without installing any software in your computer. Create a free account in Replit and get started in minutes

Replace the API token

In the SendMessage.java file, make sure you have defined the API token of your actual Utio account:

// Replace this with your Utio API token
private static final String API_TOKEN = "ENTER API KEY HERE";

Optionally, if you have multiple WhatsApp numbers connected in your Utio account, you can specify which WhatsApp number you want to use for the messages delivery by specifying the Utio unique device ID (24 characters hexadecimal value) in the following line:

// Optionally specify the target WhatsApp device ID connected to Utio
// you want to use for messages delivery (24 characters hexadecimal value)
private static final String DEVICE = "DEVICE ID GOES HERE";

Run the program

Before running the program, if you plan to send hundreds of messages in a row, we recommend to define a lower messages delivery speed per minute no more than 2-3 messages per minute to prevent ban issues due to anti-spam policies by WhatsApp. Learn more about best practices and how to reduce risk here.

Run the SendMessage.java file in your IDE or compile and run it using the command line:

javac SendMessage.java
java SendMessage

If everything is set up correctly, you should see output indicating the messages have been created successfully:

=> Message created: +1234567890
=> Message created: +1234567890
=> Message created: +1234567890

Note messages will be added to your number's message delivery queue and delivered asynchronously in background over time based on your number's subscription message delivery speed per minute limit or the manually configured delivery speed you have defined in your number's settings.

Messages may take several minutes or hours, depending on how much you have created, to be effectively delivered to the target phone numbers via WhatsApp. You can monitor the progress of the messages delivery in the web panel or automatically by using webhook events.

Conclusion

In this tutorial, you learned how to send messages to phone numbers stored in a CSV file using Java, the Unirest library, and the Utio API.

You can update numbers.csv file and run the program again anytime you want to send new messages through your Utio connected WhatsApp number.

You can further customize the script to handle additional columns, create different types of messages, or integrate it with your own software as needed.



Was this article helpful?

Thank you for your feedback!

Related articles


Categories

FAQ