Roy made 15 and Buttler just 14 before they were both dismissed by Umesh Yadav but Hales kept England in the game.
He had struggled against the Indian spinners in the opening game in Manchester but played with more confidence here and Kuldeep Yadav who took five for 24 in the first game went wicketless.
Jonny Bairstow launched him into the stands twice in his final over but the England man fell short when he holed out to Yadav off Kumar. When Bairstow departed the hosts were still 23 short of their target with three overs left.
Liam Plunkett and David Willey had put the squeeze on India as the tourists were restricted to 148-5.
Plunkett took 1-17 and Willey 1-18 as India were kept on a leash despite 47 from captain Virat Kohli and some late hitting from MS Dhoni who scored 32 not out and helped plunder 22 in Jake Ball’s final over
England put Indiain, and Plunkett responded with the most economical four over figures by an England bowler in a home T20 international.
And Willey leaked just one run more in his stint and picked up Kohli‘s wicket, caught in the deep by Joe Root, when the Indian captain was threatening to cut loose.
Ball, the Nottinghamshire pace bowler, was handed a T20 international debut and made the most of his chance by taking a wicket in his first over but his figures suffered at the hands of Dhoni.
Ball tempted opener Rohit Sharma into pull shot which he top edged leaving keeper Jos Buttler to take an easy skied chance.
Shikhar Darwan was run out when he dropped his bat and failed to get his foot over the crease and Plunkett bowled K.L.Rahul to leave the tourists reeling at 22-3 before Kohli set about rebuilding the innings.
Darwan was dismissed by Jason Roy’s throw and quick-thinking by England captain Eoin Morgan who referred the decision to the TV umpire and was proved correct.
Ball, who has 18 caps in 50 over internationals, replaced Moeen Ali in the England line-up with England leaving the spinner out because of the relatively short straight boundaries.
The series concludes with the third T20 game in Bristol on Sunday before three 50-over internationals and a five-match Test series.