Thinking about the solution for Asterisk place number calls

I am trying to implement a call center system that made Asterisk place out going call to number of extensions.
The idea of the system is that we have number of extensions. In addition of the extensions, we also have a concept called groups. There are several extensions belong to different groups. For example, we have extensions: 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009
And those extensions are divided into different of groups, for instance:
Group A: 1000, 1003, 1006
Group B: 1001, 1002, 1005
Group C: 1004, 1007, 1008
Group D: 1009

I would like to implement this featuer, Assume we have a phone connected via SIP that is available at SIP/john and we want to initiate a call from that phone to any extensions in group A the default context. It means, if 1000 is busy, Asterisk would automatic try to reach 1003, and if 1003 is busy, the asterisk is trying to reach 1006

I come up with the idea the we can use originate action to initiate call between a channel and an extension like this.

Action: Originate
Channel: SIP/john
Context: default
Exten: 1000
Priority: 1
Callerid: 10000
Timeout: 300000
Async: true

So regarding my implementation, if someone could come up with the idea that how I could implement this concept.

something like

Action: Originate
Channel: SIP/john
Context: default
<in my case I would like to send many numnbers in to Asterisk, and set up kind of mechanism to make asterisk try to place calls according to the number list one by one.>
Priority: 1
Callerid: 10000
Timeout: 300000
Async: true

Any ideas helps would be appreciate.

core show application Queue