how to minimize the data scanned on my database using index?
You should give CREATE TABLE statements or at least info about what is indexed and how. But what I can gather from what you posted: 

JOIN on functions is bad, not indexable. If you cannot get rid of those substrings, you might store them precomputed in separate columns and index those (at least the dstchannel ones should be enough, because of current join order).

You can extend index on accountcode with dstchannel for better selectivity and calldate to get rid of the filesort.

The OR over a.channel is not very indexable as it is, but as it uses prefix, you might split your query into two, each one using one part of that OR (and "glue" them with UNION) and replace calldate with channel in that index, it will mean doing filesort, but can be better if those conditions on channelare selective enough (you will have to test that probably to find out which variant is better).