There are a lot of applicable solutions. The simplest one in my mind is 'template matching'. All you need for this solution are:
- Manually create one template / several templates. This requires you to segment a number of ringing signal. If you have multiple of them, you may take the average of these signals. Anyway, let us say this template signal is $T=[T_0,T_1,\cdots,T_K]$.
- For a given testing signal $S=[S_0,S_1,\cdots,S_N]$, you can compute $R=S\star T'$, which is the convolution between this signal and your template, and $T'=[T_K,\cdots,T_1,T_0]$ is the reversed version of $T$.
- Select a reasonable threshold to decide a segment of single is indeed `ringing', and finally apply non-maximum suppression.
Note, this is just one way of doing template matching w.r.t. the cross-correlation (see https://en.wikipedia.org/wiki/Cross-correlation). You can definitely use other criteria, e.g. normalized cross-correlation (see http://docs.opencv.org/modules/imgproc/doc/object_detection.html?highlight=matchtemplate#matchtemplate).
A more complicated solution could be a 'ring' classifier, which assumes you have a number of 'ring' samples, and all of them are of the same length. Once you have these training samples, you can train a classifier (any kind, ranging from simple logistic regression to more complicated deep neuron network classifier). However, this solution may require a lot of labeled data.
Finally, a better solution could be 'hidden Markov model' and 'recurrent deep neuron network', which are too complicated to discussed in several lines. I say this is a better solution, because these are general models that can handle much more complicate scenario in speech recognition: in the context of speech recognition, 'ring' is nothing but a 'machine word', which is not fundamentally different a 'English word'.