Playing only his second ODI after a long injury lay-off, Shami picked up four wickets giving 48 runs from his 10 overs to pull West Indies back.
Besides Shami, Umesh Yadav gave him ample support from the other end and returned with impressive figures of three for 53.
For West Indies, Shai Hope top-scored with a patient 51 off 98 balls during which he hit just five boundaries, while his brother Kyle made 46 off 50 deliveries with nine fours to his credit.
Hope brothers, Kyle and Shai then shared 37 runs off 45 balls for the second wicket before Umesh struck twin blows in consecutive balls to peg West Indies back.
Kyle, who was looking good, struck Umesh for two consecutive boundaries in the 16th over but in search of one too many he perished, picking out Shikhar Dhawan at midwicket while trying to attempt for an ambitious pull.
Shai and Jason Mohammed (16) then stitched 39 for the fourth wicket before Kedar Jadhav (1/13) struck with his golden arm, dismissing the latter with a straight forward return catch.
Young Shai held one end up and and played with caution to notch up his second half-century of the series in the 38th over.
Together with skipper Jason Holder, Shai added 48 runs for the fifth wicket to keep West Indies' innings afloat.
But an irresponsible shot led to Holder's dismissal as he was holed out to Dhawan at long-on to hand Shami his first wicket.
An over later Shami struck again when he dismissed Shai with the set batsman attempting an ambitious shot and Ajinkya Rahane did the rest by latching on to an outstanding running catch at midwicket.
Shami again struck in his next over removing Ashley Nurse, who chipped one straight to Kuldeep Yadav at short midwicket.
Rovman Powell (31 off 32 balls) played a good hand towards the end to get West Indies past the 200-run mark.
Disclaimer: No Business Standard Journalist was involved in creation of this content
