Generally in our real time developments we may need to send
SMS from our applications same way we can get requirement to send SMS from Portlet
in Liferay development.
When we send SMS we need following things
- We need to purchase BULK SMS from SMS vendors
- We need BULK SMS Vendor SMS API to use in our application.
BULK SMS vendor
There are many bulk SMS vendors in the market we can
register with them and we can purchase BULK SMS.
Each vendor is responsible to provide username and password
so that we will use these credentials to send SMS in our Portlet development
The following are Bulk SMS Vendors
BULK SMS Vendor SMS API
Bulk SMS vendors are responsible to provide SMS sender API
so that we will use SMS sender API to send SMS from our application.
SMS sender API Types
- WEB Service API (SOAP/REST)
- Language Specific API
- HTTP API
WEB Service API (SOAP/REST)
SMS vendors will provide SOAP/REST API to send SMS from our
applications and it will provide set of classes or some request URL so that we
can use those to send SMS.
Language Specific API
Based on language they will provide Language specific
implementation so that we can use those
packages in our application.
Here we are going to use JAVA specific implementation because
Liferay portal developed by java.
Generally they will provide some jar file and it consist some
set of interfaces and classes so that we can use their API classes to send SMS from
our Portlet.
HTTP API
This is one of most used API to send SMS in applications. SMS
vendors will provide request URL and its consist request parameters and its
values as query string .Once we prepared request URL we can ping that URL then SMS will be send it to
destination.
We just prepare URL and hit in browser address bar then we
can send SMS. In application we will use Apache Http Client or java.net
package to ping URL in java code.
Example URL to Send SMS
URL Consist
following things
Vendor Host Name: Main Host name of Vendor (smsc.vianett.no/v3/send.ashx
)
Common Request Parameters
Source: It’s like
Alpha numeric String visible to receiver when they received SMS
Destination mobile Number: Actual receiver mobile number
Message: Text Message
User Name: SMS Vendor register user name
Password: SMS vendor register user password
Note:
Request parameter names will be changed based on the SMS
vendor
SMS Portlet Implementation
To test SMS Portlet we need one SMS vendor and “vianett” is vendor they provide 5
sample SMS for testing purpose
We should register with vianett
so that we can get 5 free SMS so we can use this account in code implementation
to send SMS
Once we register we get password to our mail and we can
change later. Vianett register username
and password will be used to send SMS
In the example we use Apache HTTP API/Java NET Package to
send SMS we have different request URL parameter we need pass appropriate
values to each parameter so that we can send SMS. We can have URLs like send SMS
URL and to know delivery status we have other Delivery Status Request URL such
a way they provided different URL for different purpose.
Please have look into API document to know more information.
Download Portlet
Source Code.
Note:
Once you downloaded Portlet you need to modify code in the Portlet
action class with respect to SMS vendor HTTP URL and Its request parameters
then you can test.
Portlet Screen
VaiNett Login Page
VaiNett Customer Landing Page
Complete Code
Implementation
Portlet View JSP page (/html/jsps/view.jsp)
<%@page import="com.liferay.portal.kernel.servlet.SessionErrors"%>
<%@page import="com.liferay.portal.kernel.servlet.SessionMessages"%>
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet"%>
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme"%>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui"%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%>
<style>
.aui .control-group {
margin-bottom: 0px;
}
</style>
<portlet:defineObjects />
<liferay-theme:defineObjects />
<portlet:actionURL var="sendSMSActionURL" windowState="normal"
name="sendSMS">
</portlet:actionURL>
<% if(SessionMessages.contains(renderRequest.getPortletSession(),"SMS-send-success")){%>
<liferay-ui:success key="SMS-send-success" message="SMS has been sent successfully." />
<%} %>
<% if(SessionErrors.contains(renderRequest.getPortletSession(),"SMS-send-error")){%>
<liferay-ui:error
key="SMS-send-error" message="There is problem in Request URL te send
SMS." />
<%} %>
<aui:form action="<%=sendSMSActionURL%>" method="post"
name="smsForm">
<aui:input name="mobileNumber" id="mobileNumber" label="Mobile Number">
<aui:validator
name="required" />
<aui:validator
name="digits"></aui:validator>
<aui:validator
name="minLength">10</aui:validator>
<aui:validator
name="maxLength">10</aui:validator>
</aui:input>
<aui:input name="textMessage" id="textMessage" label="SMS Text Message" type="textarea">
<aui:validator
name="required" />
</aui:input>
<span style=" float: left;">Characters Left </span><p id="<portlet:namespace/>textCounter"></p>
<aui:button type="submit" value="Send
SMS"></aui:button>
</aui:form>
<aui:script>
AUI().use('aui-char-counter', function(A) {
new A.CharCounter({
counter : '#<portlet:namespace/>textCounter',
input : '#<portlet:namespace/>textMessage',
maxLength : 140,
on : {
maxLength : function(event) {
alert('The max length limit was reached');
}
}
});
});
</aui:script>
|
Portlet Action Class (LiferaySMS.java)
package com.meera.liferay.sms;
import java.io.IOException;
import
java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import
com.liferay.counter.service.CounterLocalServiceUtil;
import
com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import
com.liferay.portal.kernel.log.LogFactoryUtil;
import
com.liferay.portal.kernel.servlet.SessionErrors;
import
com.liferay.portal.kernel.servlet.SessionMessages;
import
com.liferay.portal.kernel.util.ParamUtil;
import
com.liferay.util.bridges.mvc.MVCPortlet;
/**
* Portlet implementation class
LiferaySMS
*/
public class LiferaySMS extends MVCPortlet {
public static final String VENDOR_HOST_URL= "http://smsc.vianett.no/V3/CPA/MT/MT.ashx";
public static final String VENDOR_USERNAME_RQUEST_PARAM_VALUE= "meera.success@gmail.com";
public static final String
VENDOR_PASSWORD_RQUEST_PARAM_VALUE= "your sms vendor password";
public static final String COUNTRY_CODE= "91";
public void sendSMS(ActionRequest actionRequest,
ActionResponse actionResponse) throws IOException, PortletException, SystemException {
String textMessage = ParamUtil.getString(actionRequest,"textMessage");
String mobileNumber = ParamUtil.getString(actionRequest,"mobileNumber");
long messageId = CounterLocalServiceUtil.increment();
HttpURLConnection connection = null;
URL completeSenderURL = null;
String conncetionResponse = null;
StringBuilder smsSenderURLQueryString = new StringBuilder();
try {
//Prepare URL query String with
required Parameters.
smsSenderURLQueryString.append("username=" + URLEncoder.encode(VENDOR_USERNAME_RQUEST_PARAM_VALUE, "UTF-8"));
smsSenderURLQueryString.append("&password=" + URLEncoder.encode(VENDOR_PASSWORD_RQUEST_PARAM_VALUE, "UTF-8"));
smsSenderURLQueryString.append("&msgid=" + URLEncoder.encode(String.valueOf(messageId), "UTF-8"));
smsSenderURLQueryString.append("&tel=" + URLEncoder.encode(COUNTRY_CODE+mobileNumber, "UTF-8"));
smsSenderURLQueryString.append("&msg=" + URLEncoder.encode(textMessage, "UTF-8"));
//Complete SMS Sender Request URL
String completeSenderURLString=
VENDOR_HOST_URL+"?"+smsSenderURLQueryString.toString();
_log.info("SMS Sender URL"+completeSenderURLString);
//Create JAVA NET URL from URL
String
completeSenderURL = new URL(completeSenderURLString);
connection = (HttpURLConnection) completeSenderURL.openConnection();
connection.setDoOutput(false);
connection.setDoInput(true);
conncetionResponse = connection.getResponseMessage();
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
connection.disconnect();
SessionMessages.add(actionRequest.getPortletSession(),"SMS-send-success");
_log.info("SMS has been sent successfully"+responseCode);
}else{
SessionErrors.add(actionRequest.getPortletSession(),"SMS-send-error");
_log.info("There is problem in Request URL to send
SMS"+responseCode);
}
_log.info("URL Respond Data"+conncetionResponse);
}catch (UnsupportedEncodingException e)
{
_log.error(e.getMessage());
}
catch(MalformedURLException mue){
_log.error(mue.getMessage());
}catch (Exception e) {
_log.error(e.getMessage());
}
}
private static Log _log = LogFactoryUtil.getLog(LiferaySMS.class);
}
|
Hi there, I read your blogs on a regular basis. Your humoristic style is witty, keep it up! Thank You for Providing Such a Unique and valuable information, If you are looking for the best Unlimited Bulk SMS,then visit NORSMS. I enjoyed this blog post.
ReplyDeleteWhat a fantabulous post this has been. Never seen this kind of useful post. I am grateful to you and expect more number of posts like these. Thank you very much. text messaging platforms
ReplyDeleteWow, What a Excellent post. I really found this to much informatics. It is what i was searching for.I would like to suggest you that please keep sharing such type of info.Thanks business texting services
ReplyDeleteStonersdankshop established in 2016 in United States has been the best vape shop exporting vape products online to most vape shops in USA and to vape . big chief extracts
ReplyDeleteJourney to San Diego: ups and downs
ReplyDeleteThe day when I planned to move to San Diego, due to my endeavors and job issues. It was the day, where I knew how things would go after we would travel. I’ve been reading about the city before I finally decided to move to San Diego. The first thing that fascinated me about San Diego was the different climate seasons San Diego has.
Fashion line of beauty
ReplyDeleteThe Bridal Planner is the leading destination fashion planner based in Goa, India. Founded in 2013, by Sadneep, a former Goa engineer, after her own destination fashion in Goa. With experience as an expatriate of over 10 years in various countries prior to forming The Bridal Planner, Sadneep has gained an appreciation for client expectations of luxury, professionalism and efficiency on an international scale. Her clients have been from all over the world including celebrities and a high profile company which were featured in various media in South East Asia and Europe.
pure white Visit our stylish gentlemen's boutique in the centre of Antwerp called Les garçons Antwerp. In addition to our large range of shoes online, we also offer men's
ReplyDeletereviewsyard
ReplyDeleteAt Reviews Yard Blog, we are committed to creating unique and customized content for our users that is useful for detailed information. We focus on applied information and a range of topics that can impact users in different technology areas.
Build your English foundational skills - including reading, writing and critical analysis - in our private English tutoring program
ReplyDeleteeroosss
ReplyDeleteali seo
bokep jav Bokep Indo, Bokep Barat, Bokep Asia, Bokep Gay, Bokep Semi.
ReplyDeleteThank you for oder my Gigs. Please share the details guide in the project
ReplyDeleteshaw internet plans
Neuseeland Visum Thisare a private website offering our users online application services which include assistance with their application for Electronic Travel Authorization for travel to India.
ReplyDeletevoyance telephone espoir. wow, great, I was wondering how to cure acne naturally. and found your site by google, learned a lot, now i’m a bit clear. I’ve bookmark your site and also add rss. keep us updated.
ReplyDeleteanti tarnish
ReplyDeleteArchivists and conservators both worry about metal corrosion. Anti-Tarnish Strips prevent silver, gold, copper, brass, nickel, bronze and pewter items from tarnishing during shipment, storage, and display. These anti-tarnish strips won't off-gass or leave a residue
Motivational Podcast
ReplyDeleteWelcome to The CLS Experience! I’m your host Craig Siegel. I've dedicated myself to personal growth and transformation by revamping my mindset and now I want to help others manufacture BIG breakthroughs of their own.
backing tracks Paris Music Here at Paris Music Limited we specialise in producing high quality, sound-a-like professional backing tracks for singers and performers.
ReplyDeleteGeo-Environmental Consultants
ReplyDelete
ReplyDeleteThe following SMS Service Provider Visit Website:
Bulk SMS
Bulk SMS Service
SMS Broadcast
Bulk SMS Gateway
SMS Online
Wonderful blog! I found it while surfing around on Yahoo News. Do you have any suggestions on how to get listed in Yahoo News? I’ve been trying for a while but I never seem to get there! Appreciate it. SMS Marketing - massen sms versenden
ReplyDeletei never know the use of adobe shadow until i saw this post. thank you for this! this is very helpful. flexispy review
ReplyDeleteCitycarpart
ReplyDeleteWe are a team of enthusiastic developers and entrepreneurs who decided to convert their common experience into this web store. We hope you’ll like it as much as we do and have a great shopping experience here. Our prime goal is to create a shop in which you can easily find whatever product you need.
ULTRACLUB ASIA บาคาร่าออนไลน์ มาตรฐานระดับสากล
ReplyDeleteสมัคร ฝาก-ถอน อัตโนมัติทั้งระบบ พร้อมทีมแอดมินมืออาชีพ
Sexy baccarat
ไพ่แคง
ไพ่แคง ออนไลน์
เทคนิคบาคาร่า
เว็บคาสิโนออนไลน์
slotxo
pgslot
เว็บเดิมพัน
บาคาร่า
You have done a great job on this article. It’s very readable and highly intelligent. You have even managed to make it understandable and easy to read. You have some real writing talent. Thank you
ReplyDeletenon voip sms verifications
Yes i am totally agreed with this article and i just want say that this article is very nice and very informative article.I will make sure to be reading your blog more. You made a good point but I can't help but wonder, what about the other side? !!!!!!THANKS!!!!!! mobile toilet for rent
ReplyDeletei love reading this article so beautiful!!great job! bathroom rental
ReplyDeletePretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I'll be subscribing to your feed and I hope you post again soon. Big thanks for the useful info. high dofollow backlinks
ReplyDeleteI just wanted to say that I love every time visiting your wonderful post! Very powerful and have true and fresh information. Thanks for the post and effort! Please keep sharing more such a blog.
ReplyDeleteFor Visit:
Visit Website: Whatsapp Marketing
Great post. I was checking continuously this blog and I am impressed! Very useful info specifically the last part :) I care for such info much. I was looking for this certain information for a very long time. Thank you and best of luck. Get It SMS is a India No 1 Bulk SMS in Bangalore. We are giving special offer in bulk SMS service. Our Services are Voice SMS, promotional bulk SMS, transactional SMS, miss call service, bulk e-mailing, transactional bulk SMS, Missed call alert Whatsapp SMS and website Design. Sign Up for a free trial!
ReplyDeleteWriting a blog post is really important for the growth of your websitesBulk WhatsApp Messaging For Business . Thanks for sharing amazing tips. Following these steps will transform the standard of your blog post for sure.
ReplyDeleteDiscover eco-friendly packaging solutions with biodegradable plastic produce bags from Singhal Industries. Our biodegradable plastic produce bags are crafted using materials designed to break down naturally, offering a sustainable alternative to traditional Biodegradable plastic produce bags Ideal for packaging fruits, vegetables, and other fresh produce, these bags maintain product freshness while reducing environmental impact. They are available in various sizes and thicknesses to accommodate different packaging needs, ensuring versatility and convenience for retailers and consumers alike.
ReplyDelete