If the object is dynamic, just resolve the collision ray, cast the obtained object to btRigidBody and apply and impulse to it.
Ok, it's not so easy. Many things can go wrong:
- I assumed the object was dynamic but that could be not the case in reality. It could fail to cast to btRigidBody or
- it could still cast correctly but be a kinematic or static
In the end this will only work if the object is properly authored (but that's hopefully an easy assumption).
If the object is static... I suggest to give up. It's not impossible to destroy it and re-create it dynamic. It might even make some sense in many situations. It didn't in my last project and sure you need some static objects to stay static whatever happens to them. In general, there are artistic reasons for which some objects cannot move, beyond the technical.
Kinematics are the real trouble. I think there are good gameplay reasons for which they shouldn't be moved at all but in the past I had a long discussion with a designer that seemed to think otherwise. The main problem with pushing kinematics is what I dubbed "kinematic invariance problem". A kinematic object, when pushed should be working as a purely dynamic object. This is not the case: if you just write your own integrator, there's a high chance its behaviour won't match dynamic.
But I suppose you'll be happy with just pushing dynamics around, are you?