Using Opensips to load balance across two ZAP channels seems like a sledgehammer to crack a tiny nut in my opinion. However, if you really want to do it that way then you could do it by setting up two different host names in DNS, both of which resolve to the IP address of the Asterisk server. Suppose the two host names were zap37.myasterisk.local and zap38.myasterisk.local. In sip.conf you would then add two lines like this:
domain=zap37.myasterisk.lo
cal,myzap3
7
domain=zap38.myasterisk.lo
cal,myzap3
8
In extensions.conf you would add two contexts like this:
[myzap37]
exten => _X.,1,Dial(ZAP/37/${EXTEN}
,30)
[myzap38]
exten => _X.,1,Dial(ZAP/38/${EXTEN}
,30)
If you don't have your own internal DNS server, then you could use entries in /etc/hosts on the opensips server instead.
Personally, I wouldn't bother with opensips and would just use a global variable in the dial plan of Asterisk to send calls alternately to each channel. Or simpler, just put both channels in a group and send calls to the group so Asterisk will just pick a free channel from those that are in the group.
http://www.voip-info.org/wiki/view/Channels+and+Groups