{"id":1036,"date":"2026-10-26T18:58:07","date_gmt":"2026-10-26T13:28:07","guid":{"rendered":"https:\/\/smppcenter.com\/kb\/?p=1036"},"modified":"2026-10-26T18:58:09","modified_gmt":"2026-10-26T13:28:09","slug":"send-customised-sms-file-upload","status":"publish","type":"post","link":"https:\/\/smppcenter.com\/kb\/send-customised-sms-file-upload\/","title":{"rendered":"How to Send Customised SMS Using File Upload"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Sending the same message to 50,000 people is easy. Sending 50,000 different messages, each with the customer&#8217;s name, an amount or an order number, is where most people get stuck. File Upload Custom is the feature that does it, and this guide covers it end to end so you can hand it to a customer or use it when supporting one.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Three different file upload modes<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Before anything else, be clear which one the customer needs. The compose screen has separate options and they behave differently.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Mode<\/th><th>What the file contains<\/th><th>Message comes from<\/th><\/tr><\/thead><tbody><tr><td><strong>File Upload (Mobile)<\/strong><\/td><td>One mobile number per row<\/td><td>The message box in the panel, same text for everyone<\/td><\/tr><tr><td><strong>File Upload (Mobile with Message)<\/strong><\/td><td>Phone and Message columns<\/td><td>The file. The message box is disabled<\/td><\/tr><tr><td><strong>File Upload Custom<\/strong><\/td><td>Phone, optional Message, plus up to 10 custom columns<\/td><td>Either the file or the message box, with variables filled from the file<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This guide is about the third one. If the customer only needs one fixed message, the first mode is simpler and harder to get wrong.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What file types you can upload<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">CSV, XLS, XLSX and TXT. You can also zip a file of any of those types and upload the zip.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use the <strong>Download Sample File<\/strong> link on the compose screen before building anything. It gives you the exact structure, and it saves the usual round of failed uploads.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Method 1: the message lives in the file<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This is the most flexible option, because every row can carry a completely different message.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Build the file like this:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Column A header: <code>Phone<\/code><\/strong><\/li>\n\n\n\n<li><strong>Column B header: <code>Message<\/code><\/strong><\/li>\n\n\n\n<li><strong>Column C header: <code>$CUSTOM1$<\/code><\/strong><\/li>\n\n\n\n<li><strong>Column D header: <code>$CUSTOM2$<\/code><\/strong><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">You can use up to <strong>10 custom columns, from Column C through Column L<\/strong>, so <code>$CUSTOM1$<\/code> to <code>$CUSTOM10$<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then fill the rows. Put the mobile numbers in Column A, write the message in Column B with the variable names inside it, and put the values for those variables in the custom columns.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Phone<\/th><th>Message<\/th><th>$CUSTOM1$<\/th><th>$CUSTOM2$<\/th><\/tr><\/thead><tbody><tr><td>91xxxxxxxxx1<\/td><td>hello $CUSTOM1$ please pay USD $CUSTOM2$<\/td><td>Joe<\/td><td>200<\/td><\/tr><tr><td>91xxxxxxxxx2<\/td><td>hello $CUSTOM1$ please pay USD $CUSTOM2$<\/td><td>Simon<\/td><td>100<\/td><\/tr><tr><td>91xxxxxxxxx3<\/td><td>hello $CUSTOM1$ please pay USD $CUSTOM2$<\/td><td>Kumar<\/td><td>150<\/td><\/tr><tr><td>91xxxxxxxxx4<\/td><td>hello $CUSTOM1$ please pay USD $CUSTOM2$<\/td><td>Gupta<\/td><td>350<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">At send time, each row&#8217;s message has its variables swapped for that row&#8217;s values, so Joe gets &#8220;hello Joe please pay USD 200&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Include the country code with every number.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Method 2: the message lives in the panel<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If the message wording is the same for everyone and only the values change, leave the Message column out of the file entirely.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Phone<\/th><th>$CUSTOM1$<\/th><th>$CUSTOM2$<\/th><\/tr><\/thead><tbody><tr><td>91xxxxxxxxx1<\/td><td>Joe<\/td><td>200<\/td><\/tr><tr><td>91xxxxxxxxx2<\/td><td>Simon<\/td><td>100<\/td><\/tr><tr><td>91xxxxxxxxx3<\/td><td>Kumar<\/td><td>150<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Then on the compose screen:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Upload the file.<\/li>\n\n\n\n<li>In <strong>Select Mobile Number Column<\/strong>, choose the header that holds the mobile numbers. The dropdown lists the headers found in your file.<\/li>\n\n\n\n<li>Click in the message box and write the message.<\/li>\n\n\n\n<li>To insert a variable, click the <strong>airplay icon<\/strong> inside the message box. A dropdown of the available custom variables appears, and the one you pick is inserted at the cursor.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">This method is usually the better one for regular campaigns. The file stays small and clean, and the wording is fixed in one place instead of repeated on every row.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Every other field on the compose screen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Identifier.<\/strong> A title for the campaign so you can recognise it later in reports. Use something meaningful, like &#8220;Oct dues reminder batch 2&#8221;, not &#8220;test&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Send Type.<\/strong> Pre-set to File Upload and not editable here.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sender ID.<\/strong> Pick an approved sender ID from the dropdown. You can set a default sender ID in the Sender ID section so it loads automatically on the compose page.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Message Type.<\/strong> Text uses the GSM 03.38 character set. Unicode uses the Unicode set for regional scripts.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Transliterate.<\/strong> With Unicode selected, you can type in English and press space to convert into the language chosen in the dropdown. Typing &#8220;Namaste&#8221; with Hindi selected gives \u0928\u092e\u0938\u094d\u0924\u0947.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Enable Smart Link.<\/strong> Turning this on shows a Smart Link Title field, and adds Smart Link and Media Link options under the message box. Both open a dialog where you add a new link or pick a saved one, and the link is appended to the message.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Append HTTP.<\/strong> Controls whether <code>https:\/\/<\/code> appears in your smart links. Setting it to false removes it and saves roughly 6 to 8 characters, which matters when you are close to a segment boundary. The trade off is that some recipients hesitate to tap a link with no visible https, so test on a small batch first. Default is true, which is the recommended setting. Over the API this is <code>appendHTTP=true<\/code> or <code>appendHTTP=false<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Remove Duplicates.<\/strong> On by default, and it strips duplicate numbers across single, multiple, group and file upload sends. You can switch it off if a customer genuinely needs to message the same number twice, but it is not recommended, because some operators fail repeat traffic.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Send as Flash SMS.<\/strong> Sends as a flash message.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Text Message.<\/strong> Where the content goes when you are using method 2. You can mix text and Unicode in one message, but the whole message is then costed as Unicode.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>DLT Templates List.<\/strong> Lists templates for the selected sender ID. Choosing one appends it to the message box and fills in the DLT Template ID for you.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>DLT Template ID.<\/strong> Only needed if you typed the template content in manually instead of picking it from the list.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Save Message Content as Draft.<\/strong> Saves what is in the message box so you can reuse it later.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Schedule.<\/strong> Pick a future date and time. You can change or cancel it later from the Manage Schedule menu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Enable Campaign Manager.<\/strong> Appears once Schedule is on, and sends the campaign in chunks.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Campaign Limit:<\/strong> how many messages per chunk. With 100,000 numbers in the file, entering 10,000 sends ten chunks.<\/li>\n\n\n\n<li><strong>Time Interval:<\/strong> the gap between chunks, chosen from a dropdown.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This is the setting that keeps a huge campaign from swamping your route and starving OTP traffic. Use it on anything large.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Send WhatsApp Link.<\/strong> Creates a short link that opens WhatsApp with a message ready to send to the number you specify, with optional default text such as &#8220;Hi ABC, please contact me.&#8221;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Check before you send<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Generate First Line Preview<\/strong> shows the first row of your file with the values filled in. Use it every time. It catches the two most common mistakes immediately: columns in the wrong order, and a header row that is not being recognised.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The right side of the screen also shows a live preview of how the message will look on a handset, with the sender name, timestamp and content.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When everything looks right, click <strong>Send Text<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">For India DLT traffic<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Personalisation and DLT work together, but only if the fixed part of your message matches an approved template and the variable parts line up with that template&#8217;s variables. So:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pick the template from the DLT Templates List rather than typing content by hand.<\/li>\n\n\n\n<li>Put your custom variables where the template&#8217;s variable parts sit.<\/li>\n\n\n\n<li>Make sure the values in the custom columns are within whatever your template allows.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A mismatch here fails the whole batch, which is an expensive way to find out.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Checking the results<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">After sending, go to the <strong>File Uploads Summary<\/strong> and <strong>Uploaded Files<\/strong> reports. You can search by file name, transaction ID and a date range, and each row shows:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Transaction ID<\/strong>, the identifier for the upload<\/li>\n\n\n\n<li><strong>Identifier<\/strong>, the campaign title you entered<\/li>\n\n\n\n<li><strong>File Name<\/strong><\/li>\n\n\n\n<li><strong>Uploaded Files<\/strong> and <strong>Processed File<\/strong> counts<\/li>\n\n\n\n<li><strong>Download<\/strong>, to pull the original file back<\/li>\n\n\n\n<li><strong>Uploaded Time<\/strong><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Comparing uploaded against processed is how you spot rows that were dropped rather than sent.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Troubleshooting<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Junk characters in the Message column.<\/strong> Rows with junk characters fail. This nearly always comes from pasting content out of Word or a rich text editor, which brings invisible characters with it. Type the message or paste it as plain text, and check the File Uploads Summary for the failed rows.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>&#8220;No valid phone numbers found&#8221;.<\/strong> The mobile column was not recognised, the numbers have no country code, or the header row is missing. Run Generate First Line Preview and confirm the right column is selected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Variables appear literally in the delivered message.<\/strong> The variable name in the message does not match the column header exactly. <code>$CUSTOM1$<\/code> in the message needs a column headed <code>$CUSTOM1$<\/code>, spelling and symbols included.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Fewer messages than rows in the file.<\/strong> Usually Remove Duplicates doing its job. Check the processed count in the report before assuming something broke.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Some rows failed and others went out.<\/strong> Normal with a mixed file. Failures are per row, not per file, so pull the report and look at those rows specifically.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Related articles<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/smppcenter.com\/kb\/what-is-the-php-sample-code-to-send-bulk-upload-file-using-sms-api\/\">What is the PHP sample code to send bulk upload file using SMS API?<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/smppcenter.com\/kb\/%e2%9d%8c-error-no-valid-phone-numbers-found-how-to-fix\/\">Error: No valid phone numbers found, how to fix<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/smppcenter.com\/kb\/split-campaign-manager\/\">Split campaign manager<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/smppcenter.com\/kb\/file-upload-admin-notification\/\">File upload admin notification<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/smppcenter.com\/kb\/can-i-download-any-or-all-user-uploaded-files-records-from-the-reseller-panel\/\">Can I download any or all user uploaded files records from the reseller panel?<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/smppcenter.com\/kb\/maximum-length-sms-message-long-sms\/\">Maximum length of an SMS message and long SMS<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/smppcenter.com\/kb\/sms-api-support-unicode-regional-sms\/\">SMS API support for unicode and regional SMS<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>The complete guide to personalised bulk SMS from a file, covering both ways to do it, the custom variable columns, and every option on the compose screen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[515],"tags":[519,521,517,518,522,516,520],"class_list":["post-1036","post","type-post","status-publish","format-standard","hentry","category-compose","tag-campaign-manager","tag-csv","tag-custom-sms","tag-custom-variables","tag-dlt-template","tag-file-upload","tag-personalised-sms"],"_links":{"self":[{"href":"https:\/\/smppcenter.com\/kb\/wp-json\/wp\/v2\/posts\/1036","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/smppcenter.com\/kb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/smppcenter.com\/kb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/smppcenter.com\/kb\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/smppcenter.com\/kb\/wp-json\/wp\/v2\/comments?post=1036"}],"version-history":[{"count":0,"href":"https:\/\/smppcenter.com\/kb\/wp-json\/wp\/v2\/posts\/1036\/revisions"}],"wp:attachment":[{"href":"https:\/\/smppcenter.com\/kb\/wp-json\/wp\/v2\/media?parent=1036"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/smppcenter.com\/kb\/wp-json\/wp\/v2\/categories?post=1036"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/smppcenter.com\/kb\/wp-json\/wp\/v2\/tags?post=1036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}