Geralmente fazemos isso adicionando contextos no arquivo extensions_custom.conf. Esses contextos personalizados incluem os contextos padrão, mas escutam suas chamadas de saída, como NXXNXXXXXX, 1NXXNXXXXXX e adicionam seus códigos de discagem, como 7777, ao início da chamada. Em seguida, basta configurar suas rotas de saída para que as rotas específicas estejam atendendo aos códigos relevantes e removendo-os antes de enviar a chamada para a operadora.
Os telefones pertencentes ao client1 seriam definidos no contexto "custom-client1", enquanto os telefones client2 estariam em "custom-client2".
[custom-client1]
exten => _NXXNXXXXXX,1,Dial(Local/888${EXTEN}@from-internal)
exten => _1NXXNXXXXXX,1,Dial(Local/888${EXTEN}@from-internal)
exten => _NXXXXXX,1,Dial(Local/888${EXTEN}@from-internal)
include => from-internal
[custom-client2]
exten => _NXXNXXXXXX,1,Dial(Local/889${EXTEN}@from-internal)
exten => _1NXXNXXXXXX,1,Dial(Local/889${EXTEN}@from-internal)
exten => _NXXXXXX,1,Dial(Local/889${EXTEN}@from-internal)
include => from-internal